Name: series-workflow9lgqj Phase: Succeeded StartedAt: 2026-09-11 08:45:35 +0000 UTC FinishedAt: 2026-09-11 12:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[0] Phase: Succeeded StartedAt: 2026-09-11 08:45:35 +0000 UTC FinishedAt: 2026-09-11 08:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 08:45:35 +0000 UTC FinishedAt: 2026-09-11 08:48:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a101f2b7-4f1d-44fa-8628-5b57634572be" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "stack_slot_obj_get_spi", "process_iter_arg", "process_dynptr_func", "process_irq_flag", "bpf_check" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2l0ZXJfYXJnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfZHlucHRyX2Z1bmMmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pcnFfZmxhZyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCYjNDM7MGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcdTAwM2U9IDApLCBwcmV2ZW50aW5nIG9mZnNldCAwIGZyb20gZXJyb25lb3VzbHkgYWxpYXNpbmcgdG8gc3RhY2sgc2xvdCBpbmRleCAwLiBUaGlzIHJlYWNoYWJsZSB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEZfUFJPR19MT0FEKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0NzoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFiMGIxZmI2Mjg3ODYuLmVmYmI0NDY5OTg4NDggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3NcbiBcdH1cbiBcbiBcdG9mZiA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuLVx0aWYgKG9mZiAlIEJQRl9SRUdfU0laRSkge1xuJiM0MztcdGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCYjMzQ7LCBvYmpfa2luZCwgb2ZmKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5pbmRleCA2NDYwMjY0MzBlOWI1Li5lNWJiOWZlNmQ1ZTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbkBAIC01Miw2ICYjNDM7NTIsMjggQEAgaW50IGNyZWF0ZV9hbmRfZGVzdHJveSh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIGZwJiM0MzswIGlzIG5vdCBhIHN0YWNrIHNsb3QuIGJwZl9nZXRfc3BpKDApIHVzZWQgdG8gYWxpYXMgc3BpIDAgKGZwLTgpLiAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2Nhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTBcJiMzNDspXG4mIzQzO2ludCBkZXN0cm95X2ZwMF9mYWlsKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl9udW0gaXRlcjtcbiYjNDM7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtyMSA9ICVbaXRlcl07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMiA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMyA9IDEwMDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCYjMzQ7XG4mIzQzO1x0XHQvKiByMTAgaXMgZnAmIzQzOzAsIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIEJQRiBzdGFjayAqL1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByMTA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldO1wmIzM0O1xuJiM0MztcdFx0OlxuJiM0MztcdFx0OiBfX2ltbV9wdHIoaXRlciksIElURVJfSEVMUEVSU1xuJiM0MztcdFx0OiBfX2Nsb2JiZXJfY29tbW9uXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTFcJiMzNDspXG4gaW50IGNyZWF0ZV9hbmRfZm9yZ2V0X3RvX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFja19zbG90X29ial9nZXRfc3BpJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfaXRlcl9hcmcmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19keW5wdHJfZnVuYyYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2lycV9mbGFnJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcdTAwM2U9IDApLCBwcmV2ZW50aW5nIG9mZnNldCAwIGZyb20gZXJyb25lb3VzbHkgYWxpYXNpbmcgdG8gc3RhY2sgc2xvdCBpbmRleCAwLiBUaGlzIHJlYWNoYWJsZSB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEZfUFJPR19MT0FEKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0NzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCAxYjBiMWZiNjI4Nzg2Li5lZmJiNDQ2OTk4ODQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01NjcsNyAmIzQzOzU2Nyw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zCiAJfQogCiAJb2ZmID0gcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwotCWlmIChvZmYgJSBCUEZfUkVHX1NJWkUpIHsKJiM0MzsJaWYgKG9mZiAmZ3Q7PSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDtjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcbiYjMzQ7LCBvYmpfa2luZCwgb2ZmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jCmluZGV4IDY0NjAyNjQzMGU5YjUuLmU1YmI5ZmU2ZDVlNTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMKQEAgLTUyLDYgJiM0Mzs1MiwyOCBAQCBpbnQgY3JlYXRlX2FuZF9kZXN0cm95KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIGZwJiM0MzswIGlzIG5vdCBhIHN0YWNrIHNsb3QuIGJwZl9nZXRfc3BpKDApIHVzZWQgdG8gYWxpYXMgc3BpIDAgKGZwLTgpLiAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgcGFzcyBpbiBpdGVyIGF0IGFuIG9mZnNldD0wJiMzNDspCiYjNDM7aW50IGRlc3Ryb3lfZnAwX2ZhaWwodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX251bSBpdGVyOwomIzQzOwomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7cjEgPSAlW2l0ZXJdOyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkJJiMzNDtyMyA9IDEwMDA7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXddOyYjMzQ7CiYjNDM7CQkvKiByMTAgaXMgZnAmIzQzOzAsIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIEJQRiBzdGFjayAqLwomIzQzOwkJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tX3B0cihpdGVyKSwgSVRFUl9IRUxQRVJTCiYjNDM7CQk6IF9fY2xvYmJlcl9jb21tb24KJiM0MzsJKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MSYjMzQ7KQogaW50IGNyZWF0ZV9hbmRfZm9yZ2V0X3RvX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb2RpZmljYXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGNlbnRlcnMgYXJvdW5kIHRoZSBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24g4oCTIHdoYXQgaXMgaXQgZGVzaWduZWQgdG8gZG8/IE15IGV4cGVydCBrbm93bGVkZ2UgaW1tZWRpYXRlbHkga2V5cyBtZSBpbjogdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgc3RhY2sgc2xvdCBvZmZzZXRzIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBzcGVjaWZpYyBvYmplY3Qga2luZHMgd2l0aGluIHRoZSBCUEYgZW52aXJvbm1lbnQuCgpMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIHRoZSBjaGFuZ2UgaXMgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gV2UmIzM5O3ZlIGdvdCBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGBvZmZgLCB0aGUgb2Zmc2V0IHZhbHVlLiBUaGUgb3JpZ2luYWwgY29kZSBkaWQgYSBtb2R1bG8gY2hlY2sgb24gYG9mZmAgZm9yIHRoZSBgQlBGX1JFR19TSVpFYCB0byBtYWtlIHN1cmUgaXQgd2FzIGFsaWduZWQuIE5vdyB0aGUgcGF0Y2ggYWRkcyBhbiBhZGRpdGlvbmFsIGNoZWNrLCBsb29raW5nIHRvIHNlZSBpZiBvZmYgaXMgJmd0Oz0gMCwgb3IgaWYgaXQgbW9kdWxvIGlzIG5vdCAwLiBUaGlzIHN1Z2dlc3RzIHdlIGFyZSB0aWdodGVuaW5nIHVwIGEgcmVzdHJpY3Rpb24gb24gb2Zmc2V0cy4gVGhlIHZlcmJvc2UgbWVzc2FnZSBpbmRpY2F0ZXMgdGhhdCBtaXNhbGlnbmVkIG9mZnNldHMgYXJlIGludmFsaWQgZm9yIHRoZSBvYmplY3QgYmVpbmcgcGFzc2VkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGF0IG9iamVjdCB0eXBlLCBzcGVjaWZpY2FsbHkuIEFueSBuZWdhdGl2ZSBvZmZzZXQgY291bGQgYmUgYSBidWcuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB3aHkgdGhpcyBjaGVjayBpcyBiZWluZyBhbHRlcmVkLiBXZXJlIHRoZXJlIHByaW9yIGlzc3VlcyB3aXRoIG5lZ2F0aXZlIG9mZnNldHMsIG9yIGlzIHRoaXMgcGF0Y2ggcHJvYWN0aXZlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1pc2ludGVycHJldGF0aW9uIG9mIHN0YWNrIHNsb3QgYWNjZXNzPwoKRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBhIHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNgIHRlbGxzIG1lIHRoaXMgY2hhbmdlIGlzIGNydWNpYWwuIEkgZXhwZWN0IHRoZSBzZWxmdGVzdCBpcyBkZXNpZ25lZCB0byBlbnN1cmUgdGhlIGZpeCBpcyB3b3JraW5nIGFzIGludGVuZGVkLCBhbmQgcG9zc2libHkgdG8gZGVtb25zdHJhdGUgdGhhdCBwcmlvciBidWdneSBiZWhhdmlvciwgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGF0IHRlc3QgdG8gdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIGl0JiMzOTtzIGNvdmVyaW5nLiBJIGtub3cgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBCUEYgc2VjdXJpdHksIHNvIEkgd2lsbCBzY3J1dGluaXplIHRoaXMgcGF0Y2ggdG8gbG9vayBmb3Igc2lkZSBlZmZlY3RzIG9yIGlzc3VlcyB0aGF0IEkgZm9yZXNlZS4gSSB3aWxsIHByb2NlZWQgY2F1dGlvdXNseSB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFja19zbG90X29ial9nZXRfc3BpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU0NT1zdGF0aWMgYm9vbCBpc19zcGlfYm91bmRzX3ZhbGlkKHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGksIGludCBucl9zbG90cylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU1OTpzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjAtXHRcdFx0ICAgICAgICAgIGNvbnN0IGNoYXIgKm9ial9raW5kLCBpbnQgbnJfc2xvdHMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU4Nj1zdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1ODg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7ZHlucHRyXCYjMzQ7LCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01ODktfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTE9c3RhdGljIGludCBpdGVyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Mi17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFwmIzM0O2l0ZXJcJiMzNDssIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTQtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTY9c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXJxX2ZsYWdcJiMzNDssIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHJlZmxlY3RpbmcgdGhlIGFwcHJvYWNoIGEgc2Vhc29uZWQgZXhwZXJ0IG1pZ2h0IHRha2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBjcnVjaWFsIGNvbXBvbmVudCBhY3R1YWxseSB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcg4oCTIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaXRzIGxvZ2ljLCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCwgb2YgY291cnNlLCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKQmV5b25kIGp1c3QgdGhlIG1haW4gdmVyaWZpZXIgZnVuY3Rpb24sIEnigJlsbCBuZWVkIHRvIHRyYWNlIGl0cyBpbnRlcmFjdGlvbnMuIFdobyYjMzk7cyBjYWxsaW5nIGl0PyBXaGF0JiMzOTtzIGZlZWRpbmcgaXQ/IFdoZXJlIGFyZSB0aGUgaW5wdXRzIGNvbWluZyBmcm9tLCBhbmQgd2hlcmUgYXJlIHRoZSByZXN1bHRzIGdvaW5nPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IG9uIHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIHR5cGljYWwgaW5wdXQgc2NlbmFyaW9zIHRoZSB2ZXJpZmllciBoYXMgdG8gaGFuZGxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGV4dGVybmFsIGNvbXBvbmVudHMgZGVwZW5kIG9uIHRoZSBvdXRwdXQgb2YgdGhlIHZlcmlmaWVyLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgY29kZS4KCkkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFdoYXQgaXMgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGxpa2U/IEFyZSB0aGVyZSBtdWx0aXBsZSBzdGFnZXM/IERvZXMgaXQgaGF2ZSBhbnkgb3B0aW1pemF0aW9uIHBhc3Nlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLCBmcm9tIGJvdGggcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHBvaW50cyBvZiB2aWV3PyBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHZlcmlmaWVycyBhcmUgb2Z0ZW4gY29tcGxleCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZGV2ZWxvcCBhIGdvb2QsIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTU6XHRcdCovXG4gNTU2Olx0ICAgICAgIHJldHVybiBzcGkgLSBucl9zbG90cyAmIzQzOyAxIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYyBhbGxvY2F0ZWRfc2xvdHM7XG4gNTU3Olx0fVxuIDU1ODpcdFxuIDU1OTpcdHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuIDU2MDpcdFx0XHRcdCAgICAgICAgICBjb25zdCBjaGFyICpvYmpfa2luZCwgaW50IG5yX3Nsb3RzKVxuIDU2MTpcdHtcbiA1NjI6XHRcdGludCBvZmYsIHNwaTtcbiA1NjM6XHRcbiA1NjQ6XHRcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbiA1NjU6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGhhcyB0byBiZSBhdCBhIGNvbnN0YW50IG9mZnNldFxcblwmIzM0Oywgb2JqX2tpbmQpO1xuIDU2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdG9mZiA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuIDU3MDpcdFx0aWYgKG9mZiBcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKSB7XG4gNTcxOlx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXG5cJiMzNDssIG9ial9raW5kLCBvZmYpO1xuIDU3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NzM6XHRcdH1cbiA1NzQ6XHRcbiA1NzU6XHRcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XG4gNTc2Olx0XHRpZiAoc3BpICYjNDM7IDEgXHUwMDNjIG5yX3Nsb3RzKSB7XG4gNTc3Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXG5cJiMzNDssIG9ial9raW5kLCBvZmYpO1xuIDU3ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1Nzk6XHRcdH1cbiA1ODA6XHRcbiA1ODE6XHRcdGlmICghaXNfc3BpX2JvdW5kc192YWxpZChicGZfZnVuYyhlbnYsIHJlZyksIHNwaSwgbnJfc2xvdHMpKVxuIDU4MjpcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbiA1ODM6XHRcdHJldHVybiBzcGk7XG4gNTg0Olx0fVxuIDU4NTpcdFxuIDU4NjpcdHN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiA1ODc6XHR7XG4gNTg4Olx0XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7ZHlucHRyXCYjMzQ7LCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbiA1ODk6XHR9XG4gNTkwOlx0XG4gNTkxOlx0c3RhdGljIGludCBpdGVyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxuIDU5MjpcdHtcbiA1OTM6XHRcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcJiMzNDtpdGVyXCYjMzQ7LCBucl9zbG90cyk7XG4gNTk0Olx0fVxuIDU5NTpcdFxuIDU5NjpcdHN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDU5NzpcdHtcbiA1OTg6XHRcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcJiMzNDtpcnFfZmxhZ1wmIzM0OywgMSk7XG4gNTk5Olx0fVxuIDYwMDpcdFxuIDYwMTpcdHN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXG4gNjAyOlx0e1xuIDYwMzpcdFx0c3dpdGNoIChhcmdfdHlwZSBcdTAwMjYgRFlOUFRSX1RZUEVfRkxBR19NQVNLKSB7XG4gNjA0Olx0XHRjYXNlIERZTlBUUl9UWVBFX0xPQ0FMOlxuIDYwNTpcdFx0XHRyZXR1cm4gQlBGX0RZTlBUUl9UWVBFX0xPQ0FMO1xuIDYwNjpcdFx0Y2FzZSBEWU5QVFJfVFlQRV9SSU5HQlVGOlxuIDYwNzpcdFx0XHRyZXR1cm4gQlBGX0RZTlBUUl9UWVBFX1JJTkdCVUY7XG4gNjA4Olx0XHRjYXNlIERZTlBUUl9UWVBFX1NLQjpcbiA2MDk6XHRcdFx0cmV0dXJuIEJQRl9EWU5QVFJfVFlQRV9TS0I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgxOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIFRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGluZ3MsIHRvdWNoaW5nIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgbGlrZSBCUEYgaXRzZWxmLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN5c2NhbGwgaGFuZGxpbmcuIEFuZCwgb2YgY291cnNlLCB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgLiBHaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRob3NlIHN1YnN5c3RlbXMgYW5kIHRoZSBleHBvc2VkIGludGVyZmFjZSwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgV29ydGhGdXp6aW5nLgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBhbmQgcG9zc2libHkgYENPTkZJR19CUEZgIHRvby4gSeKAmWxsIGRvdWJsZS1jaGVjayBgaW5pdC9LY29uZmlnYCwgb3IgbWF5YmUgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBvciBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciByZXBsaWNhdGluZyB0aGUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9idGYuYy01OTgwLVxua2VybmVsL2JwZi9idGYuYzo1OTgxOlx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxua2VybmVsL2JwZi9idGYuYy01OTgyLVx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXHUwMDNlb3BzO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVx0Lypcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0mIzM5O3Mgb3BzLiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XHRbX2lkXSA9IFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI3OT1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5MC0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjkxOiAqIGNsZWFycyByZWctXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyOTItICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24mIzM5O3QgY2FyZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDU2Mz1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MzctXHRcdFx0XHRlbnYsIFwmIzM0O1RoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFwmIzM0O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzM4Olx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MzktXHRcdFx0XHRwdHJfcmVnbm8sIGRzdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Njg1PWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc1MC0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzUxOiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzUyLSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczMj1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODQ5LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODUwOlx0ZW52LVx1MDAzZW9wcyA9IHN0X29wcy1cdTAwM2V2ZXJpZmllcl9vcHM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTEtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNDgzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUyMi1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1MjM6XHRcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTI0LVx0XHRwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMTU1PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2NS1cdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE2NjpcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE3Ny1cdGVudi1cdTAwM2Vwcm9nID0gKnByb2c7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNzg6XHRlbnYtXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE3OS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExODc6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODgtXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEyCgkJCQkJCQlvdXRwdXQ6IDYxCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFZlcmlmaWVyJiMzOTtzIFNQSSBBY2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBicGZfY2hlY2tgIGZ1bmN0aW9uLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIHRoZSBCUEYgdmVyaWZpZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAuIEkgc2VlIHRoYXQgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGlzIGNhbGxlZCBieSB0aHJlZSBvdGhlciBmdW5jdGlvbnM6IGBkeW5wdHJfZ2V0X3NwaWAsIGBpdGVyX2dldF9zcGlgLCBhbmQgYGlycV9mbGFnX2dldF9zcGlgLgoKTm93IEkgbmVlZCB0byB0YWtlIGl0IGEgc3RlcCBmdXJ0aGVyOiBJIG5lZWQgdG8gdHJhY2UgKmJhY2t3YXJkcyogZnJvbSB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmNhbGxpbmcqIHRob3NlIHRocmVlLCBhbG9uZyB3aXRoIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpdHNlbGYuIEJ5IG1hcHBpbmcgb3V0IHRoZSBjYWxsIGdyYXBoIHRoaXMgd2F5LCBJJiMzOTtsbCBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgU1BJIChzdGF0ZSBwb2ludGVyIGluZGV4KSB2YWx1ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgdmVyaWZpZXIuIEkgbmVlZCB0byBrbm93IHRoZSBvcmlnaW4gb2YgdGhlIGFjY2Vzcy4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGRhdGEgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhkeW5wdHJfZ2V0X3NwaXxpdGVyX2dldF9zcGl8aXJxX2ZsYWdfZ2V0X3NwaXxzdGFja19zbG90X29ial9nZXRfc3BpKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PXN0YXRpYyBib29sIGlzX3NwaV9ib3VuZHNfdmFsaWQoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSwgaW50IG5yX3Nsb3RzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTU5OnN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2MC1cdFx0XHQgICAgICAgICAgY29uc3QgY2hhciAqb2JqX2tpbmQsIGludCBucl9zbG90cylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU4NjpzdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1ODg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7ZHlucHRyXCYjMzQ7LCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01ODktfVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTE6c3RhdGljIGludCBpdGVyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Mi17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFwmIzM0O2l0ZXJcJiMzNDssIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTQtfVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTY6c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXJxX2ZsYWdcJiMzNDssIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3MT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Nzk6XHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwLVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzUzPXN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzU4Olx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc1OS1cdGlmIChzcGkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg0NT1zdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODUyOlx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTg1My1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODczPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg3Olx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTg4OC1cdGlmIChzcGkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMj1zdGF0aWMgZW51bSBicGZfZHlucHRyX3R5cGUgZHlucHRyX3JlZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MTA6XHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTExLVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMzPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDE6XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDItXHRpZiAoc3BpIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NzY9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTgyOlx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTgzLVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwND1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMy1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTQ6XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE1LVx0aWYgKHNwaSA9PSAtRVJBTkdFKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDMxPXN0YXRpYyBpbnQgaXNfaXRlcl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzc6XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM4LVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA2Nj1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdF9pcnFfZmxhZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNzY6XHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc3LVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5OT1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90X2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNzpcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDgtXHRpZiAoc3BpIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY0PXN0YXRpYyBib29sIGlzX2lycV9mbGFnX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3My1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzQ6XHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc1LVx0aWYgKHNwaSA9PSAtRVJBTkdFKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4PXN0YXRpYyBpbnQgaXNfaXJxX2ZsYWdfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk1Olx0c3BpID0gaXJxX2ZsYWdfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Ni1cdGlmIChzcGkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc2MDQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OTYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY5NzpcdFx0XHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5OC1cdFx0XHRpZiAoc3BpIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzQzPXN0YXRpYyBpbnQgcHJvY2Vzc19pdGVyX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLCBpbnQgaW5zbl9pZHgsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzgyOTpcdFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzMC1cdFx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxODQ9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM5Olx0XHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjI0MC1cdFx0aWYgKHNwaSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIFNQSSBDb250ZXh0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgQlBGIGNvZGUsIGFuZCBpdCYjMzk7cyB1c2luZyBgYnBmX2dldF9zcGlgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgbGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZSB3ZSBrbm93IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZzsgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gb3VyIHVuZGVyc3RhbmRpbmcuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2dldF9zcGlgIHJpZ2h0IGF3YXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgU1BJIGNvbnRleHQgd2l0aGluIHRoZSBCUEYgZW52aXJvbm1lbnQuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIG1ha2UgYXNzdW1wdGlvbnMgaW4gdGhpcyBkb21haW4sIGFuZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2Ugd2lsbCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgc3VidGxldGllcyBpbiBob3cgU1BJIHZhbHVlcyBhcmUgaGFuZGxlZC4gR290dGEga2VlcCB0aGF0IHNoYXJwLCBleHBlcnQmIzM5O3MgZWRnZSwgcmlnaHQ/IExldCYjMzk7cyBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzY9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDMtXHRcdFx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzQ0Olx0XHRcdFx0XHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM0NS1cdFx0XHRcdFx0aXRlcl9zdGF0ZSA9IFx1MDAyNmJwZl9mdW5jKGVudiwgaXRlcl9yZWcpLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU1OT1zdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU3NTpcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc2LVx0aWYgKHNwaSAmIzQzOyAxIFx1MDAzYyBucl9zbG90cykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjU5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM2ODg6XHRcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODktXHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgYnBmX2dldF9zcGlgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfZ2V0X3NwaWAuIEl0JiMzOTtzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgc28gaXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGluZnJhc3RydWN0dXJlIHNvbWV3aGVyZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjayBkb3duIGl0cyBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIGZvciB0aGlzIOKAkyBgZ3JlcGAsIG1heWJlIGBjc2NvcGVgIG9yIGBjc2VhcmNoYCBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IHNwcmF3bGluZywgb3IgZXZlbiBqdXN0IGEgcXVpY2sgc2VhcmNoIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgd2l0aCBteSBlZGl0b3IuIEtub3dpbmcgdGhlIHR5cGljYWwgbmFtaW5nIGNvbnZlbnRpb25zLCBJIGNhbiB0cnkgYSBicm9hZCBzZWFyY2ggZmlyc3QgYW5kIHRoZW4gbmFycm93IGl0IGRvd24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhlYWRlciBmaWxlcyB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCwgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLCB3aGljaCB3aWxsIHByb2JhYmx5IGludm9sdmUgc29tZSBtYWNybyBtYWdpYyBnaXZlbiBob3cgQlBGIGhlbHBlcnMgYXJlIHVzdWFsbHkgc2V0IHVwLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBoZWxwZXIgYWN0dWFsbHkgKmRvZXMqIHVuZGVyIHRoZSBob29kIOKAkyB3aGF0IHJlZ2lzdGVycyBvciBtZW1vcnkgaXQgYWNjZXNzZXMsIGFueSBjb25zdHJhaW50cyBvciBzaWRlIGVmZmVjdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaywgaWYgYXQgYWxsLiBJdCBtaWdodCBpbnZvbHZlIGxvb2tpbmcgYXQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgYGJwZl9wcm9nX2luZm9gIG9yIHdoYXRldmVyIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHVzaW5nIGF0IHRoZSB0aW1lLiBJJiMzOTtsbCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBhbnkgcG90ZW50aWFsIGNoYW5nZXMgb3IgYnVnIGZpeGVzIHJlbGV2YW50IHRvIHRoaXMgaGVscGVyLCB0byBhdm9pZCBnZXR0aW5nIHRyaXBwZWQgdXAgYnkgb2xkIGluZm9ybWF0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpdHMgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCB0aGV5IGluZGljYXRlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaG93IGl0IHNob3VsZCBiZSBjb3JyZWN0bHkgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGlcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMjMwPWludCBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEyMzQ6c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIzNS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM2PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVx0XHRcdFx0XHQgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcdFx0XHRcdFx0c3BpID0gYnBmX2dldF9zcGkoaXRlcl9yZWctXHUwMDNldmFyX29mZi52YWx1ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDUtXHRcdFx0XHRcdGl0ZXJfc3RhdGUgPSBcdTAwMjZicGZfZnVuYyhlbnYsIGl0ZXJfcmVnKS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NTk9c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzU6XHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cdGlmIChzcGkgJiM0MzsgMSBcdTAwM2MgbnJfc2xvdHMpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzY4Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4Olx0XHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jPTM0PWludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYzo1NTovKiBmcCYjNDM7MCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01Ni1TRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgaG93IHRoZSBCUEYgdmVyaWZpZXIgd29ya3MsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicGZfZ2V0X3NwaWAgaGVscGVyLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbiBhbmQgaG9wZWZ1bGx5IHNvbWUgcmVsZXZhbnQgY29tbWVudHMgYWJvdXQgaG93IHRoaXMgYGJwZl9nZXRfc3BpYCBoZWxwZXIgaXMgbWVhbnQgdG8gZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgd2l0aGluIHRoZSB2ZXJpZmllciBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBob3BpbmcgdGhpcyBoZWFkZXIgZmlsZSBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzA6XHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjMxOlx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGFydGluZ19zdGF0ZSxcbjEyMzI6XHRcdFx0XHQgICAgIGludCByZWdubywgYm9vbCAqY2hhbmdlZCk7XG4xMjMzOlx0XG4xMjM0Olx0c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbjEyMzU6XHR7XG4xMjM2Olx0XHRyZXR1cm4gKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRTtcbjEyMzc6XHR9XG4xMjM4Olx0XG4xMjM5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmJwZl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjQwOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4xMjQxOlx0e1xuMTI0MjpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbjEyNDM6XHRcbjEyNDQ6XHRcdHJldHVybiBjdXItXHUwMDNlZnJhbWVbcmVnLVx1MDAzZWZyYW1lbm9dO1xuMTI0NTpcdH1cbjEyNDY6XHRcbjEyNDc6XHQvKiBSZXR1cm4gSVAgZm9yIGEgZ2l2ZW4gZnJhbWUgaW4gYSBjYWxsIHN0YWNrICovXG4xMjQ4Olx0c3RhdGljIGlubGluZSB1MzIgYnBmX2ZyYW1lX2luc25faWR4KHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0LCB1MzIgZnJhbWUpXG4xMjQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5MgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQlBGIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dC4gIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBob3cgYGJwZl9nZXRfc3BpYCBjYWxjdWxhdGVzIHRoZSBzdGFjayBwb2ludGVyIGluZGV4IChTUEkpIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZvdW5kIHNvbWV0aGluZy4gSXQgc2VlbXMgdGhhdCBvcmlnaW5hbGx5IHRoZSBjYWxjdWxhdGlvbiBgKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRWAgd291bGQgbWFwIGFuIG9mZnNldCBvZiAwIHRvIFNQSSAwLiBUaGUgaW50ZWdlciBkaXZpc2lvbiBpbiBDOTkgdHJ1bmNhdGVzIHRvd2FyZCB6ZXJvLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBhbGlhc2luZy4gU3BlY2lmaWNhbGx5LCBhbiBvZmZzZXQgb2YgMCB3b3VsZCBnaXZlIGFuIFNQSSBvZiAwLCBlZmZlY3RpdmVseSBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIHN0YWNrIHNsb3QgYXQgaW5kZXggMCB2aWEgYW4gaW52YWxpZCBvZmZzZXQuIFRoaXMgaXMgY29uY2VybmluZywgb2YgY291cnNlLgoKVGhlIGZpeCwgYGlmIChvZmYgJmd0Oz0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpYCwgaW4gYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGxvb2tzIGxpa2UgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IHRoaXMgYW5kIG90aGVyIGludmFsaWQgYWNjZXNzZXMuICBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBjb21wbGV0ZWx5IG1pdGlnYXRlcyB0aGUgaXNzdWUuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgaXMgdGhlIGtleSBmdW5jdGlvbiwgYW5kIGFzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBpdCBpbXBsaWVzIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkLiAgSSYjMzk7bSB0cmFja2luZyBpdHMgbm9uLXN0YXRpYyBjYWxsZXJzIG5vdzogYGR5bnB0cl9nZXRfc3BpYCwgYGl0ZXJfZ2V0X3NwaWAsIGBpcnFfZmxhZ19nZXRfc3BpYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXRlcl9hcmdgLCBgcHJvY2Vzc19pcnFfZmxhZ2AsIGFuZCBgYnBmX2NoZWNrYCBhcmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLiAgSSB3YW50IHRvIGtub3cgaWYgdGhlc2UgYXJlIGluIGFueSB3YXkgYnlwYXNzYWJsZS4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpcyBpbmRlZWQgc3RhdGljLiAgSSYjMzk7bSBsaXN0aW5nIHRoZW0gb3V0IHRvIGNoZWNrIGZvciBpbmxpbmluZyBvciBvdGhlciBzeW1ib2wgdmlzaWJpbGl0eTogYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLCBgcHJvY2Vzc19pdGVyX2FyZ2AsIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXJxX2ZsYWdgLCBgYnBmX2NoZWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIGluIHRoZSBjb2RlIHRoZSBpc3N1ZSBtaWdodCBwZXJzaXN0IG9yIGJlIGV4cGxvaXRhYmxlLgoKQ29uZmlndXJhdGlvbi13aXNlLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbC4gYEJQRl9TWVNDQUxMYCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBlbmFibGVzIHRoZSB2ZXJpZmllciBhbmQgdGhlIEJQRiBzeXNjYWxsIGl0c2VsZi4gVGhpcyBzZWVtcyB0byBiZSB0aGUgY29udHJvbGxpbmcgZmFjdG9yLgoKU28sIHRvIHN1bW1hcml6ZSBteSBmaW5kaW5ncyBhbmQgZm9jdXM6CgoxLiAgVGhpcyB2dWxuZXJhYmlsaXR5IGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgaXMgYSBmbGF3LgoyLiAgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLgozLiAgTXkga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmU6IGBzdGFja19zbG90X29ial9nZXRfc3BpYCwgYHByb2Nlc3NfaXRlcl9hcmdgLCBgcHJvY2Vzc19keW5wdHJfZnVuY2AsIGBwcm9jZXNzX2lycV9mbGFnYCwgYW5kIGBicGZfY2hlY2tgLgo0LiAgTXkgcmVhc29uaW5nIGlzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZmxhdy4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHRlc3RzIGFscmVhZHkgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2l0ZXJfYXJnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfZHlucHRyX2Z1bmMmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pcnFfZmxhZyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBzdGFja19zbG90X29ial9nZXRfc3BpKCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBzdGFjayBvZmZzZXRzIChvZmYgXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2l0ZXJfYXJnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfZHlucHRyX2Z1bmMmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pcnFfZmxhZyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBzdGFja19zbG90X29ial9nZXRfc3BpKCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBzdGFjayBvZmZzZXRzIChvZmYgXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCYjNDM7MGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmI5ZjRmZjBhYTVlNjYzYmVjYWEzMzJlNWQzZDljYzlkZjZhMDI1NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjQ3OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDFiMGIxZmI2Mjg3ODYuLmVmYmI0NDY5OTg4NDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3MKIAl9CiAKIAlvZmYgPSByZWctJmd0O3Zhcl9vZmYudmFsdWU7Ci0JaWYgKG9mZiAlIEJQRl9SRUdfU0laRSkgewomIzQzOwlpZiAob2ZmICZndDs9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKSB7CiAJCXZlcmJvc2UoZW52LCAmIzM0O2Nhbm5vdCBwYXNzIGluICVzIGF0IGFuIG9mZnNldD0lZFxuJiMzNDssIG9ial9raW5kLCBvZmYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMKaW5kZXggNjQ2MDI2NDMwZTliNS4uZTViYjlmZTZkNWU1MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYwpAQCAtNTIsNiAmIzQzOzUyLDI4IEBAIGludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7LyogZnAmIzQzOzAgaXMgbm90IGEgc3RhY2sgc2xvdC4gYnBmX2dldF9zcGkoMCkgdXNlZCB0byBhbGlhcyBzcGkgMCAoZnAtOCkuICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTAmIzM0OykKJiM0MztpbnQgZGVzdHJveV9mcDBfZmFpbCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfbnVtIGl0ZXI7CiYjNDM7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtyMSA9ICVbaXRlcl07JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O3IzID0gMTAwMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107JiMzNDsKJiM0MzsJCS8qIHIxMCBpcyBmcCYjNDM7MCwgb25lIGJ5dGUgYWJvdmUgdGhlIHRvcCBvZiB0aGUgQlBGIHN0YWNrICovCiYjNDM7CQkmIzM0O3IxID0gcjEwOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW1fcHRyKGl0ZXIpLCBJVEVSX0hFTFBFUlMKJiM0MzsJCTogX19jbG9iYmVyX2NvbW1vbgomIzQzOwkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/cmF3X3RwJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0xJiMzNDspCiBpbnQgY3JlYXRlX2FuZF9mb3JnZXRfdG9fZGVzdHJveV9mYWlsKHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBUaGlzIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgS01TQU4gZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpbiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgdGhpczogYSBzaW1wbGUgY2hlY2sgb24gdGhlIG9mZnNldC4gUHJldmlvdXNseSwgdGhlIGNvbmRpdGlvbiB3YXMganVzdCBjaGVja2luZyBmb3IgdGhlIG1vZHVsbzogYGlmIChvZmYgJSBCUEZfUkVHX1NJWkUpYC4gTm93IGl0IGluY2x1ZGVzIGEgbm9uLW5lZ2F0aXZlIG9mZnNldCBjaGVjazogYGlmIChvZmYgJmd0Oz0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpYC4gCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIGlzIGd1YXJkaW5nIGFnYWluc3QgaW52YWxpZCBvZmZzZXRzLCB3aGljaCBpcyBnb29kLiBUaGUgYWRkaXRpb24gb2YgdGhlIGAmZ3Q7PSAwYCBjb25kaXRpb24gc2VlbXMgdG8gYmUgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciBhZGRlZCBzZWN1cml0eS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWxsb3dpbmcgYSBuZWdhdGl2ZSBvZmZzZXQgaGVyZS4gSXQgbWlnaHQgb3BlbiBhIHdpbmRvdyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBleGlzdGluZyBjaGVjayBhbHJlYWR5IGNhdGNoZXMgbm9uLWFsaWduZWQgb2Zmc2V0czsgdGhpcyBuZXcgY29uc3RyYWludCBzZWVtcyBkZXNpZ25lZCB0byBwcmV2ZW50IG5lZ2F0aXZlIHZhbHVlcy4KCkkmIzM5O20gdGhpbmtpbmcsIHRoaXMgY2hhbmdlIGlzIHByb2JhYmx5IGFpbWVkIGF0IHN0cmVuZ3RoZW5pbmcgdGhlIGJvdW5kcyBjaGVjayBhbmQgcHJldmVudGluZyBzb21lIGtpbmQgb2YgcG90ZW50aWFsIGV4cGxvaXQuIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHdoZXJlIGFyYml0cmFyeSBieXRlY29kZSBleGVjdXRpb24gaXMgYSBjb25jZXJuLCBhbnkgaW1wcm92ZW1lbnQgdG8gbWVtb3J5IHNhZmV0eSBpcyBwcm9iYWJseSBpbXBvcnRhbnQuIE15IGd1dCB0ZWxscyBtZSB0aGlzICpjb3VsZCogYmUgYSBzcG90IHdoZXJlIEtNU0FOIGZ1enppbmcgd291bGQgYmUgdmFsdWFibGUsIGVzcGVjaWFsbHkgaWYgbmVnYXRpdmUgb2Zmc2V0cyB3ZXJlIHByZXZpb3VzbHkgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0XHQqIHdpdGhpbiBbMCwgYWxsb2NhdGVkX3N0YWNrKS5cbiA1NTE6XHRcdCpcbiA1NTI6XHRcdCogUGxlYXNlIG5vdGUgdGhhdCB0aGUgc3BpIGdyb3dzIGRvd253YXJkcy4gRm9yIGV4YW1wbGUsIGEgZHlucHRyXG4gNTUzOlx0XHQqIHRha2VzIHRoZSBzaXplIG9mIHR3byBzdGFjayBzbG90czsgdGhlIGZpcnN0IHNsb3Qgd2lsbCBiZSBhdFxuIDU1NDpcdFx0KiBzcGkgYW5kIHRoZSBzZWNvbmQgc2xvdCB3aWxsIGJlIGF0IHNwaSAtIDEuXG4gNTU1Olx0XHQqL1xuIDU1NjpcdCAgICAgICByZXR1cm4gc3BpIC0gbnJfc2xvdHMgJiM0MzsgMSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2MgYWxsb2NhdGVkX3Nsb3RzO1xuIDU1NzpcdH1cbiA1NTg6XHRcbiA1NTk6XHRzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiA1NjA6XHRcdFx0XHQgICAgICAgICAgY29uc3QgY2hhciAqb2JqX2tpbmQsIGludCBucl9zbG90cylcbiA1NjE6XHR7XG4gNTYyOlx0XHRpbnQgb2ZmLCBzcGk7XG4gNTYzOlx0XG4gNTY0Olx0XHRpZiAoIXRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4gNTY1Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBoYXMgdG8gYmUgYXQgYSBjb25zdGFudCBvZmZzZXRcXG5cJiMzNDssIG9ial9raW5kKTtcbiA1NjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRvZmYgPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiA1NzA6XHRcdGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xuIDU3MTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCYjMzQ7LCBvYmpfa2luZCwgb2ZmKTtcbiA1NzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTczOlx0XHR9XG4gNTc0Olx0XG4gNTc1Olx0XHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xuIDU3NjpcdFx0aWYgKHNwaSAmIzQzOyAxIFx1MDAzYyBucl9zbG90cykge1xuIDU3NzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCYjMzQ7LCBvYmpfa2luZCwgb2ZmKTtcbiA1Nzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTc5Olx0XHR9XG4gNTgwOlx0XG4gNTgxOlx0XHRpZiAoIWlzX3NwaV9ib3VuZHNfdmFsaWQoYnBmX2Z1bmMoZW52LCByZWcpLCBzcGksIG5yX3Nsb3RzKSlcbiA1ODI6XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gNTgzOlx0XHRyZXR1cm4gc3BpO1xuIDU4NDpcdH1cbiA1ODU6XHRcbiA1ODY6XHRzdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gNTg3Olx0e1xuIDU4ODpcdFx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFwmIzM0O2R5bnB0clwmIzM0OywgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XG4gNTg5Olx0fVxuIDU5MDpcdFxuIDU5MTpcdHN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbiA1OTI6XHR7XG4gNTkzOlx0XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXRlclwmIzM0OywgbnJfc2xvdHMpO1xuIDU5NDpcdH1cbiA1OTU6XHRcbiA1OTY6XHRzdGF0aWMgaW50IGlycV9mbGFnX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiA1OTc6XHR7XG4gNTk4Olx0XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXJxX2ZsYWdcJiMzNDssIDEpO1xuIDU5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9nZXRfc3BpYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX2dldF9zcGlgLi4uIHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCB0aGF0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgZnVuY3Rpb24uIEl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmV0cmlldmluZyBTZXJ2aWNlIFByaW5jaXBhbCBJZGVudGlmaWVyIGRhdGEgd2l0aGluIGEgQlBGIGNvbnRleHQsIGxpa2VseSBmb3Igc2VjdXJpdHkgb3IgcG9saWN5IGVuZm9yY2VtZW50IHB1cnBvc2VzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgdXNlciBhdXRoZW50aWNhdGlvbiwgb3IgZXZlbiBpbnRydXNpb24gZGV0ZWN0aW9uLiBEZXBlbmRpbmcgb24gd2hlcmUgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtLCBgYnBmX2dldF9zcGlgIGlzIGxpa2VseSBlaXRoZXI6CgoqICAgUHJvdmlkaW5nIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc2VydmljZSBpbnZvbHZlZCBpbiBuZXR3b3JrIGNvbW11bmljYXRpb24sIHBlcmhhcHMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHRyYWZmaWMgYWxpZ25zIHdpdGggYW4gZXN0YWJsaXNoZWQgU2VydmljZSBMZXZlbCBPYmplY3RpdmUgKFNMTykuCiogICBFbmFibGluZyB0aGUgZW5mb3JjZW1lbnQgb2YgbGVhc3QtcHJpdmlsZWdlIHByaW5jaXBsZXMgYnkgcmVzdHJpY3RpbmcgdGhlIHJlc291cmNlcyBhY2Nlc3NpYmxlIHRvIGEgZ2l2ZW4gc2VydmljZSBvciBwcm9jZXNzIGJhc2VkIG9uIGl0cyBTUEkuCiogICBBbGxvd2luZyBmb3IgZmluZS1ncmFpbmVkIGFjY2VzcyBjb250cm9sIGluIGEgY29udGFpbmVyaXplZCBlbnZpcm9ubWVudCwgb3IsCiogICBTdXBwb3J0aW5nIHNvbWUgYXNwZWN0IG9mIHplcm8tdHJ1c3QgbmV0d29yayBhcmNoaXRlY3R1cmVzLCBieSBsaW5raW5nIGNvbW11bmljYXRpb25zIHRvIGEgc3BlY2lmaWMsIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZpZWxkcyB0aGUgZnVuY3Rpb24gZXhwb3NlcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IHJldHJpZXZlcyB0aGUgU1BJLiBJcyBpdCBsZXZlcmFnaW5nIGtlcm5lbC1sZXZlbCBtZXRhZGF0YT8gRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIHBhY2tldCBoZWFkZXJzIG9yIGFwcGxpY2F0aW9uIHByb3RvY29scz8gVGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUga2V5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzY9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDMtXHRcdFx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzQ0Olx0XHRcdFx0XHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM0NS1cdFx0XHRcdFx0aXRlcl9zdGF0ZSA9IFx1MDAyNmJwZl9mdW5jKGVudiwgaXRlcl9yZWcpLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU1OT1zdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU3NTpcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc2LVx0aWYgKHNwaSAmIzQzOyAxIFx1MDAzYyBucl9zbG90cykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjU5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM2ODg6XHRcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODktXHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX2dldF9zcGlgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2dldF9zcGlgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcmV0cmlldmluZyBzb21lIFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIGRhdGEgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gTXkgaW1tZWRpYXRlIHRob3VnaHRzIGdvIHRvIGl0cyBwb3RlbnRpYWwgcm9sZSBpbiB0cmFjaW5nIG5ldHdvcmsgYWN0aXZpdHksIHBlcmhhcHMgaW4gY29uanVuY3Rpb24gd2l0aCBlQlBGIHByb2JlcyBvbiBzb2NrZXRzIG9yIG90aGVyIG5ldHdvcmstcmVsYXRlZCBmdW5jdGlvbnMuIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0JiMzOTtzIHJldHVybmluZyBTUEkgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gYSBzb2NrZXQsIG9yIG1heWJlIHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgYWJvdXQgdGhlIHN5c3RlbS4gSSBhbHNvIGNvbnNpZGVyIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIHR5cGljYWxseSB1c2Vk4oCUaXMgaXQgcHJpbWFyaWx5IGZvciBzZWN1cml0eSBwdXJwb3NlcywgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gd291bGQgYmUgdXNlZnVsIHRvIGFzY2VydGFpbiB0aGUgcHJlY2lzZSBpbnB1dHMgaXQgdGFrZXMgYW5kIHdoYXQgaXQgYWN0dWFsbHkgb3V0cHV0cy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBlQlBGIHByb2dyYW0gZGVzaWduLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCYjMzk7cyBhbiBleHBlbnNpdmUgZnVuY3Rpb24gdG8gY2FsbCwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgbWlnaHQgaGF2ZSBvbiBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGlcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMjMwPWludCBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEyMzQ6c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIzNS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM2PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVx0XHRcdFx0XHQgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcdFx0XHRcdFx0c3BpID0gYnBmX2dldF9zcGkoaXRlcl9yZWctXHUwMDNldmFyX29mZi52YWx1ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDUtXHRcdFx0XHRcdGl0ZXJfc3RhdGUgPSBcdTAwMjZicGZfZnVuYyhlbnYsIGl0ZXJfcmVnKS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NTk9c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzU6XHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cdGlmIChzcGkgJiM0MzsgMSBcdTAwM2MgbnJfc2xvdHMpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzY4Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4Olx0XHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jPTM0PWludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYzo1NTovKiBmcCYjNDM7MCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01Ni1TRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllciYjMzk7cyBTUEkgUmV0cmlldmFsKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYnBmX2dldF9zcGlgLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgIGhlYWRlciBmaWxlLiBNeSBpbnRlcmVzdCBpcyBwaXF1ZWQg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlIHJldHJpZXZhbCBvZiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKFNQSSkgdmFsdWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSBpbnRlcnByZXRpbmcgYW5kIHZhbGlkYXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgaW50ZXJhY3Qgd2l0aCBzZWN1cml0eSBjb250ZXh0cy4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pc21zIGZvciBleHRyYWN0aW5nIHRoZXNlIFNQSSB2YWx1ZXMsIGxpa2VseSBmcm9tIG5ldHdvcmsgaGVhZGVycyBvciBvdGhlciBzZWN1cml0eS1yZWxhdGVkIG1ldGFkYXRhLiBJJiMzOTttIGhvcGluZyB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBlbnN1cmVzIHRoZSB2YWxpZGl0eSBhbmQgc2FmZXR5IG9mIHRoZXNlIGV4dHJhY3RlZCB2YWx1ZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdW50cnVzdGVkIEJQRiBjb2RlLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgYm91bmRzIGNoZWNraW5nLCBlcnJvciBoYW5kbGluZywgYW5kIHNlY3VyaXR5IGNoZWNrcyBwZXJmb3JtZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBidWlsZGluZyByb2J1c3QgYW5kIHNlY3VyZSBCUEYgYXBwbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzA6XHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjMxOlx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGFydGluZ19zdGF0ZSxcbjEyMzI6XHRcdFx0XHQgICAgIGludCByZWdubywgYm9vbCAqY2hhbmdlZCk7XG4xMjMzOlx0XG4xMjM0Olx0c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbjEyMzU6XHR7XG4xMjM2Olx0XHRyZXR1cm4gKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRTtcbjEyMzc6XHR9XG4xMjM4Olx0XG4xMjM5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmJwZl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjQwOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4xMjQxOlx0e1xuMTI0MjpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbjEyNDM6XHRcbjEyNDQ6XHRcdHJldHVybiBjdXItXHUwMDNlZnJhbWVbcmVnLVx1MDAzZWZyYW1lbm9dO1xuMTI0NTpcdH1cbjEyNDY6XHRcbjEyNDc6XHQvKiBSZXR1cm4gSVAgZm9yIGEgZ2l2ZW4gZnJhbWUgaW4gYSBjYWxsIHN0YWNrICovXG4xMjQ4Olx0c3RhdGljIGlubGluZSB1MzIgYnBmX2ZyYW1lX2luc25faWR4KHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0LCB1MzIgZnJhbWUpXG4xMjQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI2CgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDc0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIEJQRiBWZXJpZmllciBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgd2FzIGxvb2tpbmcgYXQgdGhlIGBicGZfZ2V0X3NwaShzMzIgb2ZmKWAgZnVuY3Rpb24sIGFuZCB0aGUgd2F5IGl0IGhhbmRsZXMgb2Zmc2V0IGNhbGN1bGF0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbGluZSBgcmV0dXJuICgtb2ZmIC0gMSkgLyBCUEZfUkVHX1NJWkU7YCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBXaGVuIGBvZmZgIGlzIHplcm8gKGxpa2Ugd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGByMTAgPSBmcCAmIzQzOyAwYCksIHRoZSBjYWxjdWxhdGlvbiBnaXZlcyB1cyBgKC0wIC0gMSkgLyA4ID0gLTEgLyA4ID0gMGAuIFRoYXQmIzM5O3MgZHVlIHRvIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIHRydW5jYXRpb24uCgpUaGUgc3VycHJpc2luZyBwYXJ0PyBgYnBmX2dldF9zcGkoMClgIGFjdHVhbGx5IHJldHVybnMgYDBgLCB3aGljaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgc3RhY2sgbWFwIGNvcnJlc3BvbmRzIHRvIGBmcCAtIDhgLiBUaGF0IG1lYW5zIGFuIG9mZnNldCBvZiBgMGAsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGJlIG91dHNpZGUgb2YgdGhlIHN0YWNrIGFuZCBvbmUgYnl0ZSBhYm92ZSB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaXMgYmVpbmcgaW5jb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXMgYGZwIC0gOGAgKHN0YWNrIHNsb3QgMCkuCgpUaGUgcHJvYmxlbSwgaXQgc2VlbXMsIGxpZXMgaW4gdGhlIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBmdW5jdGlvbiwgd2hpY2ggb25seSBjaGVja2VkIGBpZiAob2ZmICUgQlBGX1JFR19TSVpFKWAuIFNpbmNlIGAwICUgOGAgaXMgemVybywgdGhlIGNoZWNrIGluY29ycmVjdGx5IGFjY2VwdHMgYG9mZiA9IDBgLiBUaGlzIGFsaWFzaW5nIGJ1ZyBhbGxvd3MgZm9yIHRoZSBtYW5pcHVsYXRpb24gb3IgZGVzdHJ1Y3Rpb24gb2Ygc3RhY2sgc2xvdCAwIHdoZW4gYSBwb3NpdGl2ZSBvciB6ZXJvIG9mZnNldCBpcyBwcm92aWRlZCwgZXNzZW50aWFsbHkgZ2l2aW5nIHVzIGFjY2VzcyB0byBzb21ldGhpbmcgd2Ugc2hvdWxkbiYjMzk7dCBoYXZlLgoKVGhlIGZpeD8gU2ltcGxlIOKAkyB1cGRhdGUgdGhlIGNvbmRpdGlvbiBpbiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgdG8gYGlmIChvZmYgJmd0Oz0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpYC4gVGhpcyB3aWxsIHByZXZlbnQgYW55IG5vbi1uZWdhdGl2ZSBvZmZzZXQsIGluY2x1ZGluZyB6ZXJvLCBmcm9tIGJlaW5nIGNvbnNpZGVyZWQgYSB2YWxpZCBzdGFjayBpbmRleC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBhIEtNU0FOIGlzc3VlPyBOby4gVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGZpeCwgYSBib3VuZHMgY2hlY2sgdG8gcHJldmVudCBpbnZhbGlkIHN0YWNrIHNsb3QgaW5kZXhpbmcuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJiMzOTtyZSB0aWdodGVuaW5nIHZlcmlmaWNhdGlvbiwgbm90IGludHJvZHVjaW5nIGEgcmlzay4gTm8ga2VybmVsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBubyBuZXcgYWxsb2NhdGlvbiBpc3N1ZXMgaGF2ZSBlbWVyZ2VkLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIEtNU0FOIGNyaXRlcmlhOiB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBpdCBkb2VzbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgaXQmIzM5O3Mgc2ltcGx5IHRpZ2h0ZW5pbmcgdGhlIGJvdW5kcyBjaGVjay4gVGhlIHJpc2tzIGFyZSB0aG9zZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgbnVsbCBkZXJlZmVyZW5jZXMsIGV0Yy4pLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBgTmVlZHNLTVNBTj1mYWxzZWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gVGhpcyBmaXggaXMgcHJldmVudGluZyBhbiBpbGxlZ2FsIG1lbW9yeSBhY2Nlc3MsIG5vdCBlbmFibGluZyBvbmUuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEJQRiB0ZXN0cyBhcmUgc3VmZmljaWVudC4gSSBzaG91bGQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCYjNDM7MGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApIHRvIHJlamVjdCBub24tbmVnYXRpdmUgb2Zmc2V0cyAoYG9mZiBcdTAwM2U9IDBgKSBmb3Igc3RhY2stYWxsb2NhdGVkIG9iamVjdHMgc3VjaCBhcyBpdGVyYXRvcnMsIGR5bnB0cnMsIGFuZCBpcnEgZmxhZ3MuIFByZXZpb3VzbHksIHBhc3Npbmcgb2Zmc2V0IDAgKGkuZS4gYHIxMGAgLyBgZnAmIzQzOzBgKSByZXN1bHRlZCBpbiBgYnBmX2dldF9zcGkoMClgIGV2YWx1YXRpbmcgdG8gYCgtMCAtIDEpIC8gOCA9IDBgIGR1ZSB0byBpbnRlZ2VyIHRydW5jYXRpb24sIGVycm9uZW91c2x5IGFsaWFzaW5nIG9mZnNldCAwIHRvIHN0YWNrIHNsb3QgaW5kZXggMCAoYGZwLThgKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgdmVyaWZpZXIgdmFsaWRhdGlvbi9ib3VuZHMgY2hlY2sgb24gQlBGIHJlZ2lzdGVyIG9mZnNldHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIHBhZGRpbmcsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0YWNrIGluZGV4aW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB2ZXJpZmllciB0ZXN0cyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6MzAuNDk5MzM2NzE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NjQ3MTc1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFja19zbG90X29ial9nZXRfc3BpXCIsXG4gICAgXCJwcm9jZXNzX2l0ZXJfYXJnXCIsXG4gICAgXCJwcm9jZXNzX2R5bnB0cl9mdW5jXCIsXG4gICAgXCJwcm9jZXNzX2lycV9mbGFnXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzdGFja19zbG90X29ial9nZXRfc3BpKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIG9mZnNldHMgKGBvZmYgXFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCswYCkgcmVzdWx0ZWQgaW4gYGJwZl9nZXRfc3BpKDApYCBldmFsdWF0aW5nIHRvIGAoLTAgLSAxKSAvIDggPSAwYCBkdWUgdG8gaW50ZWdlciB0cnVuY2F0aW9uLCBlcnJvbmVvdXNseSBhbGlhc2luZyBvZmZzZXQgMCB0byBzdGFjayBzbG90IGluZGV4IDAgKGBmcC04YCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgdmVyaWZpZXIgdmFsaWRhdGlvbi9ib3VuZHMgY2hlY2sgb24gQlBGIHJlZ2lzdGVyIG9mZnNldHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIHBhZGRpbmcsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0YWNrIGluZGV4aW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB2ZXJpZmllciB0ZXN0cyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjMwLjQ5OTM0MDk5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjgzNDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDc6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMWIwYjFmYjYyODc4Ni4uZWZiYjQ0Njk5ODg0OCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zXFxuIFxcdH1cXG4gXFxuIFxcdG9mZiA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4tXFx0aWYgKG9mZiAlIEJQRl9SRUdfU0laRSkge1xcbitcXHRpZiAob2ZmIFxcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxcXG5cXFwiLCBvYmpfa2luZCwgb2ZmKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXFxuaW5kZXggNjQ2MDI2NDMwZTliNS4uZTViYjlmZTZkNWU1MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcXG5AQCAtNTIsNiArNTIsMjggQEAgaW50IGNyZWF0ZV9hbmRfZGVzdHJveSh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBmcCswIGlzIG5vdCBhIHN0YWNrIHNsb3QuIGJwZl9nZXRfc3BpKDApIHVzZWQgdG8gYWxpYXMgc3BpIDAgKGZwLTgpLiAqL1xcbitTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTBcXFwiKVxcbitpbnQgZGVzdHJveV9mcDBfZmFpbCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pdGVyX251bSBpdGVyO1xcbitcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwicjEgPSAlW2l0ZXJdO1xcXCJcXG4rXFx0XFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcdFxcXCJyMyA9IDEwMDA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1xcXCJcXG4rXFx0XFx0LyogcjEwIGlzIGZwKzAsIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIEJQRiBzdGFjayAqL1xcbitcXHRcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9kZXN0cm95XTtcXFwiXFxuK1xcdFxcdDpcXG4rXFx0XFx0OiBfX2ltbV9wdHIoaXRlciksIElURVJfSEVMUEVSU1xcbitcXHRcXHQ6IF9fY2xvYmJlcl9jb21tb25cXG4rXFx0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTFcXFwiKVxcbiBpbnQgY3JlYXRlX2FuZF9mb3JnZXRfdG9fZGVzdHJveV9mYWlsKHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6MzIuMjkyOTU3Nzg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MzY3MTc4Mjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlcIixcbiAgICBcInByb2Nlc3NfaXRlcl9hcmdcIixcbiAgICBcInByb2Nlc3NfZHlucHRyX2Z1bmNcIixcbiAgICBcInByb2Nlc3NfaXJxX2ZsYWdcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgaW4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpIHRvIHJlamVjdCBub24tbmVnYXRpdmUgc3RhY2sgb2Zmc2V0cyAob2ZmIFxcdTAwM2U9IDApLCBwcmV2ZW50aW5nIG9mZnNldCAwIGZyb20gZXJyb25lb3VzbHkgYWxpYXNpbmcgdG8gc3RhY2sgc2xvdCBpbmRleCAwLiBUaGlzIHJlYWNoYWJsZSB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEZfUFJPR19MT0FEKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYjlmNGZmMGFhNWU2NjNiZWNhYTMzMmU1ZDNkOWNjOWRmNmEwMjU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDc6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFiMGIxZmI2Mjg3ODYuLmVmYmI0NDY5OTg4NDggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTU2Nyw3ICs1NjcsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc1xuIFx0fVxuIFxuIFx0b2ZmID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4tXHRpZiAob2ZmICUgQlBGX1JFR19TSVpFKSB7XG4rXHRpZiAob2ZmIFx1MDAzZT0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwiY2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCIsIG9ial9raW5kLCBvZmYpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbmluZGV4IDY0NjAyNjQzMGU5YjUuLmU1YmI5ZmU2ZDVlNTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuQEAgLTUyLDYgKzUyLDI4IEBAIGludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIGZwKzAgaXMgbm90IGEgc3RhY2sgc2xvdC4gYnBmX2dldF9zcGkoMCkgdXNlZCB0byBhbGlhcyBzcGkgMCAoZnAtOCkuICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTBcIilcbitpbnQgZGVzdHJveV9mcDBfZmFpbCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9pdGVyX251bSBpdGVyO1xuK1xuK1x0YXNtIHZvbGF0aWxlIChcInIxID0gJVtpdGVyXTtcIlxuK1x0XHRcInIyID0gMDtcIlxuK1x0XHRcInIzID0gMTAwMDtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fbmV3XTtcIlxuK1x0XHQvKiByMTAgaXMgZnArMCwgb25lIGJ5dGUgYWJvdmUgdGhlIHRvcCBvZiB0aGUgQlBGIHN0YWNrICovXG4rXHRcdFwicjEgPSByMTA7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldO1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbV9wdHIoaXRlciksIElURVJfSEVMUEVSU1xuK1x0XHQ6IF9fY2xvYmJlcl9jb21tb25cbitcdCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwiP3Jhd190cFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTFcIilcbiBpbnQgY3JlYXRlX2FuZF9mb3JnZXRfdG9fZGVzdHJveV9mYWlsKHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjMyLjI5Mjk1OTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg3OTI5ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmaWxlLiBUaGUgY29yZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgdGhlIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiDigJMgd2hhdCBpcyBpdCBkZXNpZ25lZCB0byBkbz8gTXkgZXhwZXJ0IGtub3dsZWRnZSBpbW1lZGlhdGVseSBrZXlzIG1lIGluOiB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzdGFjayBzbG90IG9mZnNldHMgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHNwZWNpZmljIG9iamVjdCBraW5kcyB3aXRoaW4gdGhlIEJQRiBlbnZpcm9ubWVudC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCB0aGUgY2hhbmdlIGlzIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFdlJ3ZlIGdvdCBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGBvZmZgLCB0aGUgb2Zmc2V0IHZhbHVlLiBUaGUgb3JpZ2luYWwgY29kZSBkaWQgYSBtb2R1bG8gY2hlY2sgb24gYG9mZmAgZm9yIHRoZSBgQlBGX1JFR19TSVpFYCB0byBtYWtlIHN1cmUgaXQgd2FzIGFsaWduZWQuIE5vdyB0aGUgcGF0Y2ggYWRkcyBhbiBhZGRpdGlvbmFsIGNoZWNrLCBsb29raW5nIHRvIHNlZSBpZiBvZmYgaXMgXHUwMDNlPSAwLCBvciBpZiBpdCBtb2R1bG8gaXMgbm90IDAuIFRoaXMgc3VnZ2VzdHMgd2UgYXJlIHRpZ2h0ZW5pbmcgdXAgYSByZXN0cmljdGlvbiBvbiBvZmZzZXRzLiBUaGUgdmVyYm9zZSBtZXNzYWdlIGluZGljYXRlcyB0aGF0IG1pc2FsaWduZWQgb2Zmc2V0cyBhcmUgaW52YWxpZCBmb3IgdGhlIG9iamVjdCBiZWluZyBwYXNzZWQuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoYXQgb2JqZWN0IHR5cGUsIHNwZWNpZmljYWxseS4gQW55IG5lZ2F0aXZlIG9mZnNldCBjb3VsZCBiZSBhIGJ1Zy5cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB3aHkgdGhpcyBjaGVjayBpcyBiZWluZyBhbHRlcmVkLiBXZXJlIHRoZXJlIHByaW9yIGlzc3VlcyB3aXRoIG5lZ2F0aXZlIG9mZnNldHMsIG9yIGlzIHRoaXMgcGF0Y2ggcHJvYWN0aXZlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1pc2ludGVycHJldGF0aW9uIG9mIHN0YWNrIHNsb3QgYWNjZXNzP1xuXG5GaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIGEgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY2AgdGVsbHMgbWUgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbC4gSSBleHBlY3QgdGhlIHNlbGZ0ZXN0IGlzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGUgZml4IGlzIHdvcmtpbmcgYXMgaW50ZW5kZWQsIGFuZCBwb3NzaWJseSB0byBkZW1vbnN0cmF0ZSB0aGF0IHByaW9yIGJ1Z2d5IGJlaGF2aW9yLCBpcyBubyBsb25nZXIgcG9zc2libGUuIEknbGwgbmVlZCB0byByZXZpZXcgdGhhdCB0ZXN0IHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyBpdCdzIGNvdmVyaW5nLiBJIGtub3cgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBCUEYgc2VjdXJpdHksIHNvIEkgd2lsbCBzY3J1dGluaXplIHRoaXMgcGF0Y2ggdG8gbG9vayBmb3Igc2lkZSBlZmZlY3RzIG9yIGlzc3VlcyB0aGF0IEkgZm9yZXNlZS4gSSB3aWxsIHByb2NlZWQgY2F1dGlvdXNseSB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQyLjE3MjI2MDU2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQzNTEwOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2tfc2xvdF9vYmpfZ2V0X3NwaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PXN0YXRpYyBib29sIGlzX3NwaV9ib3VuZHNfdmFsaWQoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSwgaW50IG5yX3Nsb3RzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU1OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTU5OnN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjAtXFx0XFx0XFx0ICAgICAgICAgIGNvbnN0IGNoYXIgKm9ial9raW5kLCBpbnQgbnJfc2xvdHMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg2PXN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTg4OlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiZHlucHRyXFxcIiwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4OS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTkxPXN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiaXRlclxcXCIsIG5yX3Nsb3RzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk0LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTY9c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Ny17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5ODpcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImlycV9mbGFnXFxcIiwgMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQyLjI4NjYxNTM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwOTc3NTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHJlZmxlY3RpbmcgdGhlIGFwcHJvYWNoIGEgc2Vhc29uZWQgZXhwZXJ0IG1pZ2h0IHRha2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBjcnVjaWFsIGNvbXBvbmVudCBhY3R1YWxseSB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcg4oCTIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBpdHMgbG9naWMsIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cbkJleW9uZCBqdXN0IHRoZSBtYWluIHZlcmlmaWVyIGZ1bmN0aW9uLCBJ4oCZbGwgbmVlZCB0byB0cmFjZSBpdHMgaW50ZXJhY3Rpb25zLiBXaG8ncyBjYWxsaW5nIGl0PyBXaGF0J3MgZmVlZGluZyBpdD8gV2hlcmUgYXJlIHRoZSBpbnB1dHMgY29taW5nIGZyb20sIGFuZCB3aGVyZSBhcmUgdGhlIHJlc3VsdHMgZ29pbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgb24gdGhlIGV4cGVjdGVkIHVzYWdlIHBhdHRlcm5zIGFuZCB0aGUgdHlwaWNhbCBpbnB1dCBzY2VuYXJpb3MgdGhlIHZlcmlmaWVyIGhhcyB0byBoYW5kbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZXh0ZXJuYWwgY29tcG9uZW50cyBkZXBlbmQgb24gdGhlIG91dHB1dCBvZiB0aGUgdmVyaWZpZXIuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBjb2RlLlxuXG5JJ20gbG9va2luZyBmb3IgYSBzb2xpZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFdoYXQgaXMgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGxpa2U/IEFyZSB0aGVyZSBtdWx0aXBsZSBzdGFnZXM/IERvZXMgaXQgaGF2ZSBhbnkgb3B0aW1pemF0aW9uIHBhc3Nlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLCBmcm9tIGJvdGggcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHBvaW50cyBvZiB2aWV3PyBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHZlcmlmaWVycyBhcmUgb2Z0ZW4gY29tcGxleCwgYW5kIEknbGwgbmVlZCB0byBkZXZlbG9wIGEgZ29vZCwgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvZGUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ1LjI5NjM5MjI3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTU1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTU1OlxcdFxcdCovXFxuIDU1NjpcXHQgICAgICAgcmV0dXJuIHNwaSAtIG5yX3Nsb3RzICsgMSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHNwaSBcXHUwMDNjIGFsbG9jYXRlZF9zbG90cztcXG4gNTU3OlxcdH1cXG4gNTU4OlxcdFxcbiA1NTk6XFx0c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuIDU2MDpcXHRcXHRcXHRcXHQgICAgICAgICAgY29uc3QgY2hhciAqb2JqX2tpbmQsIGludCBucl9zbG90cylcXG4gNTYxOlxcdHtcXG4gNTYyOlxcdFxcdGludCBvZmYsIHNwaTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cXHUwMDNldmFyX29mZikpIHtcXG4gNTY1OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaGFzIHRvIGJlIGF0IGEgY29uc3RhbnQgb2Zmc2V0XFxcXG5cXFwiLCBvYmpfa2luZCk7XFxuIDU2NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTY3OlxcdFxcdH1cXG4gNTY4OlxcdFxcbiA1Njk6XFx0XFx0b2ZmID0gcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbiA1NzA6XFx0XFx0aWYgKG9mZiBcXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xcbiA1NzE6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXFxcblxcXCIsIG9ial9raW5kLCBvZmYpO1xcbiA1NzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU3MzpcXHRcXHR9XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxuIDU3NjpcXHRcXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuIDU3NzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCBwYXNzIGluICVzIGF0IGFuIG9mZnNldD0lZFxcXFxuXFxcIiwgb2JqX2tpbmQsIG9mZik7XFxuIDU3ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTc5OlxcdFxcdH1cXG4gNTgwOlxcdFxcbiA1ODE6XFx0XFx0aWYgKCFpc19zcGlfYm91bmRzX3ZhbGlkKGJwZl9mdW5jKGVudiwgcmVnKSwgc3BpLCBucl9zbG90cykpXFxuIDU4MjpcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gNTgzOlxcdFxcdHJldHVybiBzcGk7XFxuIDU4NDpcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdHN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gNTg3OlxcdHtcXG4gNTg4OlxcdFxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiZHlucHRyXFxcIiwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XFxuIDU4OTpcXHR9XFxuIDU5MDpcXHRcXG4gNTkxOlxcdHN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG4gNTkyOlxcdHtcXG4gNTkzOlxcdFxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiaXRlclxcXCIsIG5yX3Nsb3RzKTtcXG4gNTk0OlxcdH1cXG4gNTk1OlxcdFxcbiA1OTY6XFx0c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDU5NzpcXHR7XFxuIDU5ODpcXHRcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImlycV9mbGFnXFxcIiwgMSk7XFxuIDU5OTpcXHR9XFxuIDYwMDpcXHRcXG4gNjAxOlxcdHN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxuIDYwMjpcXHR7XFxuIDYwMzpcXHRcXHRzd2l0Y2ggKGFyZ190eXBlIFxcdTAwMjYgRFlOUFRSX1RZUEVfRkxBR19NQVNLKSB7XFxuIDYwNDpcXHRcXHRjYXNlIERZTlBUUl9UWVBFX0xPQ0FMOlxcbiA2MDU6XFx0XFx0XFx0cmV0dXJuIEJQRl9EWU5QVFJfVFlQRV9MT0NBTDtcXG4gNjA2OlxcdFxcdGNhc2UgRFlOUFRSX1RZUEVfUklOR0JVRjpcXG4gNjA3OlxcdFxcdFxcdHJldHVybiBCUEZfRFlOUFRSX1RZUEVfUklOR0JVRjtcXG4gNjA4OlxcdFxcdGNhc2UgRFlOUFRSX1RZUEVfU0tCOlxcbiA2MDk6XFx0XFx0XFx0cmV0dXJuIEJQRl9EWU5QVFJfVFlQRV9TS0I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ1LjI5NzIwMTkzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODYwMjYyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBUaGlzIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB0aGUgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gVGhlIEJQRiB2ZXJpZmllciBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLCB0b3VjaGluZyBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgQlBGIGl0c2VsZiwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBzeXNjYWxsIGhhbmRsaW5nLiBBbmQsIG9mIGNvdXJzZSwgdXNlcnNwYWNlIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYC4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aG9zZSBzdWJzeXN0ZW1zIGFuZCB0aGUgZXhwb3NlZCBpbnRlcmZhY2UsIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5IFdvcnRoRnV6emluZy5cblxuTmV4dCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIGFuZCBwb3NzaWJseSBgQ09ORklHX0JQRmAgdG9vLiBJ4oCZbGwgZG91YmxlLWNoZWNrIGBpbml0L0tjb25maWdgLCBvciBtYXliZSB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHJlcGxpY2F0aW5nIHRoZSBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ4LjE4MzIyOTk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjUwODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00MTM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsc21fcHJvZ19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXFxua2VybmVsL2JwZi9icGZfbHNtLmM6NDE2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGxzbV92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVxcdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02ND1zdGF0aWMgREVGSU5FX01VVEVYKHVwZGF0ZV9tdXRleCk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjgtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY5OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NTk2ND1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNTk4MC1cXG5rZXJuZWwvYnBmL2J0Zi5jOjU5ODE6XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxcbmtlcm5lbC9icGYvYnRmLmMtNTk4Mi1cXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTkyMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGNnX2Rldl9wcm9nX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5MjY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfZGV2X3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MjctXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBjZ3JvdXBfZGV2X2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI0Nzg9c3RhdGljIHUzMiBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTQyOmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3N5c2N0bF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQzLVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc3lzY3RsX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI3NTY9c3RhdGljIGludCBjZ19zb2Nrb3B0X2dldF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjc2NTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2Nrb3B0X3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjYtXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBjZ19zb2Nrb3B0X2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTc0Nj1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ3MgPSBlbnYtXFx1MDAzZXN1YnByb2dfaW5mbztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcXHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqb3BzID0gZW52LVxcdTAwM2VvcHM7XFxua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXFx0aW50IGksIGNudCwgc2l6ZSwgY3R4X2ZpZWxkX3NpemUsIHJldCwgZGVsdGEgPSAwLCBlcGlsb2d1ZV9jbnQgPSAwO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNjogKiBpbnNpZGUgaXRzIG93biB2ZXJpZmllcl9vcHMtXFx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY2MzA9c3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjQ2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2NDc6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N5c2NhbGxfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXFx0LmdldF9mdW5jX3Byb3RvICA9IHN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTAtXFx0LypcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEwMTE6XFx0ICogVGhlIHZlcmlmaWVyIG9ubHkgdHJ1c3RzIHZtX21tIGFuZCB2bV9maWxlIChzZWVcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXFx0ICogQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwgaW4gdmVyaWZpZXIuYykuIFRha2UgYSByZWZlcmVuY2VcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0ncyBvcHMuICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTktfTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDA6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICogY29uc3QgYnBmX3ZlcmlmaWVyX29wc1tdID0ge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MS0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSkgXFxcXFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjpcXHRbX2lkXSA9IFxcdTAwMjYgX25hbWUgIyMgX3ZlcmlmaWVyX29wcyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDMtI2RlZmluZSBCUEZfTUFQX1RZUEUoX2lkLCBfb3BzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyNzk9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5MC0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzI5MTogKiBjbGVhcnMgcmVnLVxcdTAwM2VpZCBhZnRlciB2YWx1ZV9vcl9udWxsLVxcdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjkyLSAqIGNhcmVzIGFib3V0IHRoZSByYW5nZSBvZiBhY2Nlc3MgdG8gdmFsaWQgbWFwIHZhbHVlIHBvaW50ZXIgYW5kIGRvZXNuJ3QgY2FyZVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NTYzPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzM3LVxcdFxcdFxcdFxcdGVudiwgXFxcIlRoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFxcXCJcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ3Mzg6XFx0XFx0XFx0XFx0XFxcIlRoZSB2ZXJpZmllciBvbmx5IHRyYWNrcyBwb2ludGVyLW1pbnVzLXNjYWxhciBhcml0aG1ldGljIGZvciBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MzktXFx0XFx0XFx0XFx0cHRyX3JlZ25vLCBkc3QpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Njg1PWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzUwLSAqXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzUxOiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc1Mi0gKiAgIGJwZl9mYXN0Y2FsbCBmdW5jdGlvbiAoZS5nLiBhIGhlbHBlciBjYWxsKSwga2VybmVsIHJlbW92ZXMgdW5uZWNlc3NhcnlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczMj1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NDktXFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODUwOlxcdGVudi1cXHUwMDNlb3BzID0gc3Rfb3BzLVxcdTAwM2V2ZXJpZmllcl9vcHM7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODUxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNDgzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTIyLVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDUyMzpcXHRcXHRlbnYtXFx1MDAzZW9wcyA9IGJwZl92ZXJpZmllcl9vcHNbdGd0X3Byb2ctXFx1MDAzZXR5cGVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUyNC1cXHRcXHRwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9IHRndF9wcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTE1NT1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2NS1cXHQvKiBubyBwcm9ncmFtIGlzIHZhbGlkICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTY2OlxcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTc3LVxcdGVudi1cXHUwMDNlcHJvZyA9ICpwcm9nO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE3ODpcXHRlbnYtXFx1MDAzZW9wcyA9IGJwZl92ZXJpZmllcl9vcHNbZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2V0eXBlXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNzktXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTg3OlxcdC8qIHVzZXIgY291bGQgaGF2ZSByZXF1ZXN0ZWQgdmVyYm9zZSB2ZXJpZmllciBvdXRwdXRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODgtXFx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ4LjI3NjQ4NDYzNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTU4NzEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgVmVyaWZpZXIncyBTUEkgQWNjZXNzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGJwZl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIEJQRiB2ZXJpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3RhY2ssIHNwZWNpZmljYWxseSBhcm91bmQgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLiBJIHNlZSB0aGF0IGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpcyBjYWxsZWQgYnkgdGhyZWUgb3RoZXIgZnVuY3Rpb25zOiBgZHlucHRyX2dldF9zcGlgLCBgaXRlcl9nZXRfc3BpYCwgYW5kIGBpcnFfZmxhZ19nZXRfc3BpYC5cblxuTm93IEkgbmVlZCB0byB0YWtlIGl0IGEgc3RlcCBmdXJ0aGVyOiBJIG5lZWQgdG8gdHJhY2UgKmJhY2t3YXJkcyogZnJvbSB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqY2FsbGluZyogdGhvc2UgdGhyZWUsIGFsb25nIHdpdGggYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGl0c2VsZi4gQnkgbWFwcGluZyBvdXQgdGhlIGNhbGwgZ3JhcGggdGhpcyB3YXksIEknbGwgYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IFNQSSAoc3RhdGUgcG9pbnRlciBpbmRleCkgdmFsdWVzIGFyZSBiZWluZyBhY2Nlc3NlZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHZlcmlmaWVyLiBJIG5lZWQgdG8ga25vdyB0aGUgb3JpZ2luIG9mIHRoZSBhY2Nlc3MuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEyLCJPdXRwdXRUb2tlbnMiOjYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjUwLjU3MjM1OTUxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTAyNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihkeW5wdHJfZ2V0X3NwaXxpdGVyX2dldF9zcGl8aXJxX2ZsYWdfZ2V0X3NwaXxzdGFja19zbG90X29ial9nZXRfc3BpKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU0NT1zdGF0aWMgYm9vbCBpc19zcGlfYm91bmRzX3ZhbGlkKHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGksIGludCBucl9zbG90cylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU1OTpzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTYwLVxcdFxcdFxcdCAgICAgICAgICBjb25zdCBjaGFyICpvYmpfa2luZCwgaW50IG5yX3Nsb3RzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTg2OnN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTg4OlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiZHlucHRyXFxcIiwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4OS19XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5MC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkxOnN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiaXRlclxcXCIsIG5yX3Nsb3RzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk0LX1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTY6c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Ny17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5ODpcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImlycV9mbGFnXFxcIiwgMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTpcXHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MC1cXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTM9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzU3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTg6XFx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTktXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODQ1PXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODUxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTI6XFx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTMtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODczPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg4Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg3OlxcdHNwaSA9IGR5bnB0cl9nZXRfc3BpKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODg4LVxcdGlmIChzcGkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMj1zdGF0aWMgZW51bSBicGZfZHlucHRyX3R5cGUgZHlucHRyX3JlZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MTA6XFx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTEtXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMzPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDE6XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0Mi1cXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NzY9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk4MS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTgyOlxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODMtXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwND1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDEzLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDE0OlxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE1LVxcdGlmIChzcGkgPT0gLUVSQU5HRSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDMxPXN0YXRpYyBpbnQgaXNfaXRlcl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzc6XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzgtXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA2Nj1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdF9pcnFfZmxhZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNzY6XFx0c3BpID0gaXJxX2ZsYWdfZ2V0X3NwaShlbnYsIHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNzctXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5OT1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90X2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNzpcXHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwOC1cXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY0PXN0YXRpYyBib29sIGlzX2lycV9mbGFnX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTczLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTc0OlxcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc1LVxcdGlmIChzcGkgPT0gLUVSQU5HRSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4PXN0YXRpYyBpbnQgaXNfaXJxX2ZsYWdfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk1OlxcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2LVxcdGlmIChzcGkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc2MDQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY5NzpcXHRcXHRcXHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OTgtXFx0XFx0XFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc0Mz1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4Mjk6XFx0XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MzAtXFx0XFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxODQ9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIyMzgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM5OlxcdFxcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjI0MC1cXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6NTAuNjg4ODY5OTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NTkxNzMzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gU1BJIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgQlBGIGNvZGUsIGFuZCBpdCdzIHVzaW5nIGBicGZfZ2V0X3NwaWAuIE15IGZpcnN0IGluc3RpbmN0IGlzLCBsZXQncyBub3QganVzdCBhc3N1bWUgd2Uga25vdyB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmc7IGxldCdzIGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gb3VyIHVuZGVyc3RhbmRpbmcuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfZ2V0X3NwaWAgcmlnaHQgYXdheS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIFNQSSBjb250ZXh0IHdpdGhpbiB0aGUgQlBGIGVudmlyb25tZW50LiBJdCdzIHRvbyBlYXN5IHRvIG1ha2UgYXNzdW1wdGlvbnMgaW4gdGhpcyBkb21haW4sIGFuZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2Ugd2lsbCBlbnN1cmUgSSBkb24ndCBtaXNzIGFueSBzdWJ0bGV0aWVzIGluIGhvdyBTUEkgdmFsdWVzIGFyZSBoYW5kbGVkLiBHb3R0YSBrZWVwIHRoYXQgc2hhcnAsIGV4cGVydCdzIGVkZ2UsIHJpZ2h0PyBMZXQncyBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0Nzo1NC41NDgwNDc3MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTgxODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9nZXRfc3BpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcXHRcXHRcXHRcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ1LVxcdFxcdFxcdFxcdFxcdGl0ZXJfc3RhdGUgPSBcXHUwMDI2YnBmX2Z1bmMoZW52LCBpdGVyX3JlZyktXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU5PXN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc1OlxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6NTQuNjA1MjM0OTM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMjcwNjM2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgU291cmNlIG9mIGBicGZfZ2V0X3NwaWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2dldF9zcGlgLiBJdCdzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgc28gaXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZSBzb21ld2hlcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2sgZG93biBpdHMgc291cmNlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIGZvciB0aGlzIOKAkyBgZ3JlcGAsIG1heWJlIGBjc2NvcGVgIG9yIGBjc2VhcmNoYCBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IHNwcmF3bGluZywgb3IgZXZlbiBqdXN0IGEgcXVpY2sgc2VhcmNoIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgd2l0aCBteSBlZGl0b3IuIEtub3dpbmcgdGhlIHR5cGljYWwgbmFtaW5nIGNvbnZlbnRpb25zLCBJIGNhbiB0cnkgYSBicm9hZCBzZWFyY2ggZmlyc3QgYW5kIHRoZW4gbmFycm93IGl0IGRvd24uIEknbGwgYmUgbG9va2luZyBmb3IgaGVhZGVyIGZpbGVzIHdoZXJlIGl0J3MgZGVjbGFyZWQsIHRoZW4gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZiwgd2hpY2ggd2lsbCBwcm9iYWJseSBpbnZvbHZlIHNvbWUgbWFjcm8gbWFnaWMgZ2l2ZW4gaG93IEJQRiBoZWxwZXJzIGFyZSB1c3VhbGx5IHNldCB1cC4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaGVscGVyIGFjdHVhbGx5ICpkb2VzKiB1bmRlciB0aGUgaG9vZCDigJMgd2hhdCByZWdpc3RlcnMgb3IgbWVtb3J5IGl0IGFjY2Vzc2VzLCBhbnkgY29uc3RyYWludHMgb3Igc2lkZSBlZmZlY3RzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2ssIGlmIGF0IGFsbC4gSXQgbWlnaHQgaW52b2x2ZSBsb29raW5nIGF0IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIGBicGZfcHJvZ19pbmZvYCBvciB3aGF0ZXZlciB0aGUgbmV0d29ya2luZyBzdGFjayBpcyB1c2luZyBhdCB0aGUgdGltZS4gSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBhbnkgcG90ZW50aWFsIGNoYW5nZXMgb3IgYnVnIGZpeGVzIHJlbGV2YW50IHRvIHRoaXMgaGVscGVyLCB0byBhdm9pZCBnZXR0aW5nIHRyaXBwZWQgdXAgYnkgb2xkIGluZm9ybWF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGl0cyByZXR1cm4gdmFsdWVzIGFuZCB3aGF0IHRoZXkgaW5kaWNhdGUuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBob3cgaXQgc2hvdWxkIGJlIGNvcnJlY3RseSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjU5LjczMjMwMTE3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMDk2OTc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZ2V0X3NwaVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTIzMD1pbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMjM0OnN0YXRpYyBpbmxpbmUgaW50IGJwZl9nZXRfc3BpKHMzMiBvZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMjM1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcXHRcXHRcXHRcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ1LVxcdFxcdFxcdFxcdFxcdGl0ZXJfc3RhdGUgPSBcXHUwMDI2YnBmX2Z1bmMoZW52LCBpdGVyX3JlZyktXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU5PXN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc1OlxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYz0zND1pbnQgY3JlYXRlX2FuZF9kZXN0cm95KHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmM6NTU6LyogZnArMCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMtNTYtU0VDKFxcXCI/cmF3X3RwXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MDIuMjMzMjc2MzM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2ODQ0OTU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgaG93IHRoZSBCUEYgdmVyaWZpZXIgd29ya3MsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicGZfZ2V0X3NwaWAgaGVscGVyLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIHN0YXJ0IHdpdGggdGhlIGhlYWRlciBmaWxlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIGhvcGVmdWxseSBzb21lIHJlbGV2YW50IGNvbW1lbnRzIGFib3V0IGhvdyB0aGlzIGBicGZfZ2V0X3NwaWAgaGVscGVyIGlzIG1lYW50IHRvIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgdmVyaWZpZXIgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuIEknbSBob3BpbmcgdGhpcyBoZWFkZXIgZmlsZSBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjA3LjkxNzc3NjAwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjMwOlxcdGludCBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4xMjMxOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhcnRpbmdfc3RhdGUsXFxuMTIzMjpcXHRcXHRcXHRcXHQgICAgIGludCByZWdubywgYm9vbCAqY2hhbmdlZCk7XFxuMTIzMzpcXHRcXG4xMjM0OlxcdHN0YXRpYyBpbmxpbmUgaW50IGJwZl9nZXRfc3BpKHMzMiBvZmYpXFxuMTIzNTpcXHR7XFxuMTIzNjpcXHRcXHRyZXR1cm4gKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRTtcXG4xMjM3OlxcdH1cXG4xMjM4OlxcdFxcbjEyMzk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmJwZl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMTI0MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjEyNDE6XFx0e1xcbjEyNDI6XFx0XFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuMTI0MzpcXHRcXG4xMjQ0OlxcdFxcdHJldHVybiBjdXItXFx1MDAzZWZyYW1lW3JlZy1cXHUwMDNlZnJhbWVub107XFxuMTI0NTpcXHR9XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdC8qIFJldHVybiBJUCBmb3IgYSBnaXZlbiBmcmFtZSBpbiBhIGNhbGwgc3RhY2sgKi9cXG4xMjQ4OlxcdHN0YXRpYyBpbmxpbmUgdTMyIGJwZl9mcmFtZV9pbnNuX2lkeChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCwgdTMyIGZyYW1lKVxcbjEyNDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODowNy45MTc5MzE4NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg5MjI0Nzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBCUEYgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSd2ZSBiZWVuIHRoaW5raW5nIGFib3V0LiAgSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IGBicGZfZ2V0X3NwaWAgY2FsY3VsYXRlcyB0aGUgc3RhY2sgcG9pbnRlciBpbmRleCAoU1BJKSBhbmQgSSB0aGluayBJJ3ZlIGZvdW5kIHNvbWV0aGluZy4gSXQgc2VlbXMgdGhhdCBvcmlnaW5hbGx5IHRoZSBjYWxjdWxhdGlvbiBgKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRWAgd291bGQgbWFwIGFuIG9mZnNldCBvZiAwIHRvIFNQSSAwLiBUaGUgaW50ZWdlciBkaXZpc2lvbiBpbiBDOTkgdHJ1bmNhdGVzIHRvd2FyZCB6ZXJvLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBhbGlhc2luZy4gU3BlY2lmaWNhbGx5LCBhbiBvZmZzZXQgb2YgMCB3b3VsZCBnaXZlIGFuIFNQSSBvZiAwLCBlZmZlY3RpdmVseSBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIHN0YWNrIHNsb3QgYXQgaW5kZXggMCB2aWEgYW4gaW52YWxpZCBvZmZzZXQuIFRoaXMgaXMgY29uY2VybmluZywgb2YgY291cnNlLlxuXG5UaGUgZml4LCBgaWYgKG9mZiBcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKWAsIGluIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBsb29rcyBsaWtlIGFuIGF0dGVtcHQgdG8gcHJldmVudCB0aGlzIGFuZCBvdGhlciBpbnZhbGlkIGFjY2Vzc2VzLiAgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgY29tcGxldGVseSBtaXRpZ2F0ZXMgdGhlIGlzc3VlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24uIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpcyB0aGUga2V5IGZ1bmN0aW9uLCBhbmQgYXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGl0IGltcGxpZXMgaXQncyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gIEknbSB0cmFja2luZyBpdHMgbm9uLXN0YXRpYyBjYWxsZXJzIG5vdzogYGR5bnB0cl9nZXRfc3BpYCwgYGl0ZXJfZ2V0X3NwaWAsIGBpcnFfZmxhZ19nZXRfc3BpYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXRlcl9hcmdgLCBgcHJvY2Vzc19pcnFfZmxhZ2AsIGFuZCBgYnBmX2NoZWNrYCBhcmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLiAgSSB3YW50IHRvIGtub3cgaWYgdGhlc2UgYXJlIGluIGFueSB3YXkgYnlwYXNzYWJsZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgaXMgaW5kZWVkIHN0YXRpYy4gIEknbSBsaXN0aW5nIHRoZW0gb3V0IHRvIGNoZWNrIGZvciBpbmxpbmluZyBvciBvdGhlciBzeW1ib2wgdmlzaWJpbGl0eTogYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLCBgcHJvY2Vzc19pdGVyX2FyZ2AsIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXJxX2ZsYWdgLCBgYnBmX2NoZWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIGluIHRoZSBjb2RlIHRoZSBpc3N1ZSBtaWdodCBwZXJzaXN0IG9yIGJlIGV4cGxvaXRhYmxlLlxuXG5Db25maWd1cmF0aW9uLXdpc2UsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsLiBgQlBGX1NZU0NBTExgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGVuYWJsZXMgdGhlIHZlcmlmaWVyIGFuZCB0aGUgQlBGIHN5c2NhbGwgaXRzZWxmLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBjb250cm9sbGluZyBmYWN0b3IuXG5cblNvLCB0byBzdW1tYXJpemUgbXkgZmluZGluZ3MgYW5kIGZvY3VzOlxuXG4xLiAgVGhpcyB2dWxuZXJhYmlsaXR5IGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgaXMgYSBmbGF3LlxuMi4gIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cbjMuICBNeSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZTogYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLCBgcHJvY2Vzc19pdGVyX2FyZ2AsIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXJxX2ZsYWdgLCBhbmQgYGJwZl9jaGVja2AuXG40LiAgTXkgcmVhc29uaW5nIGlzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZmxhdy5cblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB0ZXN0cyBhbHJlYWR5IG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzkyLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjE1LjgxMDE4MzI1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDU1MjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFja19zbG90X29ial9nZXRfc3BpXCIsXG4gICAgXCJwcm9jZXNzX2l0ZXJfYXJnXCIsXG4gICAgXCJwcm9jZXNzX2R5bnB0cl9mdW5jXCIsXG4gICAgXCJwcm9jZXNzX2lycV9mbGFnXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFja19zbG90X29ial9nZXRfc3BpXCIsXG4gICAgXCJwcm9jZXNzX2l0ZXJfYXJnXCIsXG4gICAgXCJwcm9jZXNzX2R5bnB0cl9mdW5jXCIsXG4gICAgXCJwcm9jZXNzX2lycV9mbGFnXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjE1Ljk2NDc0NjQ4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxOTkyODg0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODoxNS45NjU1ODE4NjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTE5ODQ0NzM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApIHRvIHJlamVjdCBub24tbmVnYXRpdmUgb2Zmc2V0cyAoYG9mZiBcXHUwMDNlPSAwYCkgZm9yIHN0YWNrLWFsbG9jYXRlZCBvYmplY3RzIHN1Y2ggYXMgaXRlcmF0b3JzLCBkeW5wdHJzLCBhbmQgaXJxIGZsYWdzLiBQcmV2aW91c2x5LCBwYXNzaW5nIG9mZnNldCAwIChpLmUuIGByMTBgIC8gYGZwKzBgKSByZXN1bHRlZCBpbiBgYnBmX2dldF9zcGkoMClgIGV2YWx1YXRpbmcgdG8gYCgtMCAtIDEpIC8gOCA9IDBgIGR1ZSB0byBpbnRlZ2VyIHRydW5jYXRpb24sIGVycm9uZW91c2x5IGFsaWFzaW5nIG9mZnNldCAwIHRvIHN0YWNrIHNsb3QgaW5kZXggMCAoYGZwLThgKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0NzoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMWIwYjFmYjYyODc4Ni4uZWZiYjQ0Njk5ODg0OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zXG4gXHR9XG4gXG4gXHRvZmYgPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbi1cdGlmIChvZmYgJSBCUEZfUkVHX1NJWkUpIHtcbitcdGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXG5cIiwgb2JqX2tpbmQsIG9mZik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuaW5kZXggNjQ2MDI2NDMwZTliNS4uZTViYjlmZTZkNWU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5AQCAtNTIsNiArNTIsMjggQEAgaW50IGNyZWF0ZV9hbmRfZGVzdHJveSh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogZnArMCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHBhc3MgaW4gaXRlciBhdCBhbiBvZmZzZXQ9MFwiKVxuK2ludCBkZXN0cm95X2ZwMF9mYWlsKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtIGl0ZXI7XG4rXG4rXHRhc20gdm9sYXRpbGUgKFwicjEgPSAlW2l0ZXJdO1wiXG4rXHRcdFwicjIgPSAwO1wiXG4rXHRcdFwicjMgPSAxMDAwO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1wiXG4rXHRcdC8qIHIxMCBpcyBmcCswLCBvbmUgYnl0ZSBhYm92ZSB0aGUgdG9wIG9mIHRoZSBCUEYgc3RhY2sgKi9cbitcdFx0XCJyMSA9IHIxMDtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tX3B0cihpdGVyKSwgSVRFUl9IRUxQRVJTXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vblxuK1x0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/cmF3X3RwXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MVwiKVxuIGludCBjcmVhdGVfYW5kX2ZvcmdldF90b19kZXN0cm95X2ZhaWwodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MTUuOTY1NTgzNTk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMDcyMDA5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBUaGlzIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLiBMZXQncyBkaWcgaW4uIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpbiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgdGhpczogYSBzaW1wbGUgY2hlY2sgb24gdGhlIG9mZnNldC4gUHJldmlvdXNseSwgdGhlIGNvbmRpdGlvbiB3YXMganVzdCBjaGVja2luZyBmb3IgdGhlIG1vZHVsbzogYGlmIChvZmYgJSBCUEZfUkVHX1NJWkUpYC4gTm93IGl0IGluY2x1ZGVzIGEgbm9uLW5lZ2F0aXZlIG9mZnNldCBjaGVjazogYGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSlgLiBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGlmIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBjaGVjayBpcyBndWFyZGluZyBhZ2FpbnN0IGludmFsaWQgb2Zmc2V0cywgd2hpY2ggaXMgZ29vZC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgXHUwMDNlPSAwYCBjb25kaXRpb24gc2VlbXMgdG8gYmUgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciBhZGRlZCBzZWN1cml0eS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbGxvd2luZyBhIG5lZ2F0aXZlIG9mZnNldCBoZXJlLiBJdCBtaWdodCBvcGVuIGEgd2luZG93IGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIGNoZWNrIGFscmVhZHkgY2F0Y2hlcyBub24tYWxpZ25lZCBvZmZzZXRzOyB0aGlzIG5ldyBjb25zdHJhaW50IHNlZW1zIGRlc2lnbmVkIHRvIHByZXZlbnQgbmVnYXRpdmUgdmFsdWVzLlxuXG5JJ20gdGhpbmtpbmcsIHRoaXMgY2hhbmdlIGlzIHByb2JhYmx5IGFpbWVkIGF0IHN0cmVuZ3RoZW5pbmcgdGhlIGJvdW5kcyBjaGVjayBhbmQgcHJldmVudGluZyBzb21lIGtpbmQgb2YgcG90ZW50aWFsIGV4cGxvaXQuIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHdoZXJlIGFyYml0cmFyeSBieXRlY29kZSBleGVjdXRpb24gaXMgYSBjb25jZXJuLCBhbnkgaW1wcm92ZW1lbnQgdG8gbWVtb3J5IHNhZmV0eSBpcyBwcm9iYWJseSBpbXBvcnRhbnQuIE15IGd1dCB0ZWxscyBtZSB0aGlzICpjb3VsZCogYmUgYSBzcG90IHdoZXJlIEtNU0FOIGZ1enppbmcgd291bGQgYmUgdmFsdWFibGUsIGVzcGVjaWFsbHkgaWYgbmVnYXRpdmUgb2Zmc2V0cyB3ZXJlIHByZXZpb3VzbHkgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MjIuMjcyNzg3NjI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHRcXHQqIHdpdGhpbiBbMCwgYWxsb2NhdGVkX3N0YWNrKS5cXG4gNTUxOlxcdFxcdCpcXG4gNTUyOlxcdFxcdCogUGxlYXNlIG5vdGUgdGhhdCB0aGUgc3BpIGdyb3dzIGRvd253YXJkcy4gRm9yIGV4YW1wbGUsIGEgZHlucHRyXFxuIDU1MzpcXHRcXHQqIHRha2VzIHRoZSBzaXplIG9mIHR3byBzdGFjayBzbG90czsgdGhlIGZpcnN0IHNsb3Qgd2lsbCBiZSBhdFxcbiA1NTQ6XFx0XFx0KiBzcGkgYW5kIHRoZSBzZWNvbmQgc2xvdCB3aWxsIGJlIGF0IHNwaSAtIDEuXFxuIDU1NTpcXHRcXHQqL1xcbiA1NTY6XFx0ICAgICAgIHJldHVybiBzcGkgLSBucl9zbG90cyArIDEgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYyBhbGxvY2F0ZWRfc2xvdHM7XFxuIDU1NzpcXHR9XFxuIDU1ODpcXHRcXG4gNTU5OlxcdHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbiA1NjA6XFx0XFx0XFx0XFx0ICAgICAgICAgIGNvbnN0IGNoYXIgKm9ial9raW5kLCBpbnQgbnJfc2xvdHMpXFxuIDU2MTpcXHR7XFxuIDU2MjpcXHRcXHRpbnQgb2ZmLCBzcGk7XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdGlmICghdG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpKSB7XFxuIDU2NTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGhhcyB0byBiZSBhdCBhIGNvbnN0YW50IG9mZnNldFxcXFxuXFxcIiwgb2JqX2tpbmQpO1xcbiA1NjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU2NzpcXHRcXHR9XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdG9mZiA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4gNTcwOlxcdFxcdGlmIChvZmYgXFx1MDAzZT0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpIHtcXG4gNTcxOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxcXG5cXFwiLCBvYmpfa2luZCwgb2ZmKTtcXG4gNTcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NzM6XFx0XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xcbiA1NzY6XFx0XFx0aWYgKHNwaSArIDEgXFx1MDAzYyBucl9zbG90cykge1xcbiA1Nzc6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXFxcblxcXCIsIG9ial9raW5kLCBvZmYpO1xcbiA1Nzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU3OTpcXHRcXHR9XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdGlmICghaXNfc3BpX2JvdW5kc192YWxpZChicGZfZnVuYyhlbnYsIHJlZyksIHNwaSwgbnJfc2xvdHMpKVxcbiA1ODI6XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDU4MzpcXHRcXHRyZXR1cm4gc3BpO1xcbiA1ODQ6XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRzdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDU4NzpcXHR7XFxuIDU4ODpcXHRcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImR5bnB0clxcXCIsIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xcbiA1ODk6XFx0fVxcbiA1OTA6XFx0XFxuIDU5MTpcXHRzdGF0aWMgaW50IGl0ZXJfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXFxuIDU5MjpcXHR7XFxuIDU5MzpcXHRcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcIml0ZXJcXFwiLCBucl9zbG90cyk7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdHN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiA1OTc6XFx0e1xcbiA1OTg6XFx0XFx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFxcXCJpcnFfZmxhZ1xcXCIsIDEpO1xcbiA1OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODoyMi4yNzM5NDkyNThaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk2MjU5NDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnBmX2dldF9zcGlgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX2dldF9zcGlgLi4uIHdoYXQncyB0aGUgZGVhbCB3aXRoIHRoYXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBmdW5jdGlvbi4gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHJldHJpZXZpbmcgU2VydmljZSBQcmluY2lwYWwgSWRlbnRpZmllciBkYXRhIHdpdGhpbiBhIEJQRiBjb250ZXh0LCBsaWtlbHkgZm9yIHNlY3VyaXR5IG9yIHBvbGljeSBlbmZvcmNlbWVudCBwdXJwb3Nlcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgdXNlciBhdXRoZW50aWNhdGlvbiwgb3IgZXZlbiBpbnRydXNpb24gZGV0ZWN0aW9uLiBEZXBlbmRpbmcgb24gd2hlcmUgaXQncyB1c2VkIHdpdGhpbiB0aGUgQlBGIHByb2dyYW0sIGBicGZfZ2V0X3NwaWAgaXMgbGlrZWx5IGVpdGhlcjpcblxuKiAgIFByb3ZpZGluZyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIHNlcnZpY2UgaW52b2x2ZWQgaW4gbmV0d29yayBjb21tdW5pY2F0aW9uLCBwZXJoYXBzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0cmFmZmljIGFsaWducyB3aXRoIGFuIGVzdGFibGlzaGVkIFNlcnZpY2UgTGV2ZWwgT2JqZWN0aXZlIChTTE8pLlxuKiAgIEVuYWJsaW5nIHRoZSBlbmZvcmNlbWVudCBvZiBsZWFzdC1wcml2aWxlZ2UgcHJpbmNpcGxlcyBieSByZXN0cmljdGluZyB0aGUgcmVzb3VyY2VzIGFjY2Vzc2libGUgdG8gYSBnaXZlbiBzZXJ2aWNlIG9yIHByb2Nlc3MgYmFzZWQgb24gaXRzIFNQSS5cbiogICBBbGxvd2luZyBmb3IgZmluZS1ncmFpbmVkIGFjY2VzcyBjb250cm9sIGluIGEgY29udGFpbmVyaXplZCBlbnZpcm9ubWVudCwgb3IsXG4qICAgU3VwcG9ydGluZyBzb21lIGFzcGVjdCBvZiB6ZXJvLXRydXN0IG5ldHdvcmsgYXJjaGl0ZWN0dXJlcywgYnkgbGlua2luZyBjb21tdW5pY2F0aW9ucyB0byBhIHNwZWNpZmljLCBhdXRoZW50aWNhdGVkIGlkZW50aXR5LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZpZWxkcyB0aGUgZnVuY3Rpb24gZXhwb3NlcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IHJldHJpZXZlcyB0aGUgU1BJLiBJcyBpdCBsZXZlcmFnaW5nIGtlcm5lbC1sZXZlbCBtZXRhZGF0YT8gRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIHBhY2tldCBoZWFkZXJzIG9yIGFwcGxpY2F0aW9uIHByb3RvY29scz8gVGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUga2V5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MjYuMjM2NTQ3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1NDY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2dldF9zcGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM2PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDMtXFx0XFx0XFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzQ0OlxcdFxcdFxcdFxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGl0ZXJfcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDUtXFx0XFx0XFx0XFx0XFx0aXRlcl9zdGF0ZSA9IFxcdTAwMjZicGZfZnVuYyhlbnYsIGl0ZXJfcmVnKS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NTk9c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzU6XFx0c3BpID0gYnBmX2dldF9zcGkob2ZmKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc2LVxcdGlmIChzcGkgKyAxIFxcdTAwM2MgbnJfc2xvdHMpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjU5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM2ODg6XFx0XFx0c3BpID0gYnBmX2dldF9zcGkoaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODktXFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODoyNi4yOTcxMDE1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg0OTc0NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9nZXRfc3BpYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfZ2V0X3NwaWAgZnVuY3Rpb24uIFRoZSBuYW1lIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHN1Z2dlc3RpbmcgaXQncyByZWxhdGVkIHRvIHJldHJpZXZpbmcgc29tZSBTZXJ2aWNlIFByb3ZpZGVyIEludGVyZmFjZSBkYXRhIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0cyBnbyB0byBpdHMgcG90ZW50aWFsIHJvbGUgaW4gdHJhY2luZyBuZXR3b3JrIGFjdGl2aXR5LCBwZXJoYXBzIGluIGNvbmp1bmN0aW9uIHdpdGggZUJQRiBwcm9iZXMgb24gc29ja2V0cyBvciBvdGhlciBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb25zLiBJJ20gd29uZGVyaW5nIGlmIGl0J3MgcmV0dXJuaW5nIFNQSSBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBhIHNvY2tldCwgb3IgbWF5YmUgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbCBhYm91dCB0aGUgc3lzdGVtLiBJIGFsc28gY29uc2lkZXIgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB0eXBpY2FsbHkgdXNlZOKAlGlzIGl0IHByaW1hcmlseSBmb3Igc2VjdXJpdHkgcHVycG9zZXMsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgY29kZSBvciBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIHVzZWZ1bCB0byBhc2NlcnRhaW4gdGhlIHByZWNpc2UgaW5wdXRzIGl0IHRha2VzIGFuZCB3aGF0IGl0IGFjdHVhbGx5IG91dHB1dHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgZUJQRiBwcm9ncmFtIGRlc2lnbi4gSeKAmW0gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQncyBhbiBleHBlbnNpdmUgZnVuY3Rpb24gdG8gY2FsbCwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgbWlnaHQgaGF2ZSBvbiBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjI4LjY4MjA3ODI5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5ODIyNTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZ2V0X3NwaVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTIzMD1pbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMjM0OnN0YXRpYyBpbmxpbmUgaW50IGJwZl9nZXRfc3BpKHMzMiBvZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMjM1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcXHRcXHRcXHRcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ1LVxcdFxcdFxcdFxcdFxcdGl0ZXJfc3RhdGUgPSBcXHUwMDI2YnBmX2Z1bmMoZW52LCBpdGVyX3JlZyktXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU5PXN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc1OlxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYz0zND1pbnQgY3JlYXRlX2FuZF9kZXN0cm95KHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmM6NTU6LyogZnArMCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMtNTYtU0VDKFxcXCI/cmF3X3RwXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MzEuMjgwMzA3ODQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDkxMzI4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcidzIFNQSSBSZXRyaWV2YWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGJwZl9nZXRfc3BpYC4gTGV0J3MgcHVsbCB1cCB0aGUgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgIGhlYWRlciBmaWxlLiBNeSBpbnRlcmVzdCBpcyBwaXF1ZWQg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlIHJldHJpZXZhbCBvZiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKFNQSSkgdmFsdWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSBpbnRlcnByZXRpbmcgYW5kIHZhbGlkYXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgaW50ZXJhY3Qgd2l0aCBzZWN1cml0eSBjb250ZXh0cy4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pc21zIGZvciBleHRyYWN0aW5nIHRoZXNlIFNQSSB2YWx1ZXMsIGxpa2VseSBmcm9tIG5ldHdvcmsgaGVhZGVycyBvciBvdGhlciBzZWN1cml0eS1yZWxhdGVkIG1ldGFkYXRhLiBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhlIHZhbGlkaXR5IGFuZCBzYWZldHkgb2YgdGhlc2UgZXh0cmFjdGVkIHZhbHVlcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW50cm9kdWNlZCBieSB1bnRydXN0ZWQgQlBGIGNvZGUuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBib3VuZHMgY2hlY2tpbmcsIGVycm9yIGhhbmRsaW5nLCBhbmQgc2VjdXJpdHkgY2hlY2tzIHBlcmZvcm1lZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGJ1aWxkaW5nIHJvYnVzdCBhbmQgc2VjdXJlIEJQRiBhcHBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODozNC4wODk0NDI5MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMTIzMTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxcbjEyMzI6XFx0XFx0XFx0XFx0ICAgICBpbnQgcmVnbm8sIGJvb2wgKmNoYW5nZWQpO1xcbjEyMzM6XFx0XFxuMTIzNDpcXHRzdGF0aWMgaW5saW5lIGludCBicGZfZ2V0X3NwaShzMzIgb2ZmKVxcbjEyMzU6XFx0e1xcbjEyMzY6XFx0XFx0cmV0dXJuICgtb2ZmIC0gMSkgLyBCUEZfUkVHX1NJWkU7XFxuMTIzNzpcXHR9XFxuMTIzODpcXHRcXG4xMjM5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpicGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjEyNDA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4xMjQxOlxcdHtcXG4xMjQyOlxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1ciA9IGVudi1cXHUwMDNlY3VyX3N0YXRlO1xcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRyZXR1cm4gY3VyLVxcdTAwM2VmcmFtZVtyZWctXFx1MDAzZWZyYW1lbm9dO1xcbjEyNDU6XFx0fVxcbjEyNDY6XFx0XFxuMTI0NzpcXHQvKiBSZXR1cm4gSVAgZm9yIGEgZ2l2ZW4gZnJhbWUgaW4gYSBjYWxsIHN0YWNrICovXFxuMTI0ODpcXHRzdGF0aWMgaW5saW5lIHUzMiBicGZfZnJhbWVfaW5zbl9pZHgoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QsIHUzMiBmcmFtZSlcXG4xMjQ5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MzQuMDg5NTgzNDc1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMDc0MzkzMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQlBGIFZlcmlmaWVyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgd2FzIGxvb2tpbmcgYXQgdGhlIGBicGZfZ2V0X3NwaShzMzIgb2ZmKWAgZnVuY3Rpb24sIGFuZCB0aGUgd2F5IGl0IGhhbmRsZXMgb2Zmc2V0IGNhbGN1bGF0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbGluZSBgcmV0dXJuICgtb2ZmIC0gMSkgLyBCUEZfUkVHX1NJWkU7YCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBXaGVuIGBvZmZgIGlzIHplcm8gKGxpa2Ugd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYHIxMCA9IGZwICsgMGApLCB0aGUgY2FsY3VsYXRpb24gZ2l2ZXMgdXMgYCgtMCAtIDEpIC8gOCA9IC0xIC8gOCA9IDBgLiBUaGF0J3MgZHVlIHRvIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIHRydW5jYXRpb24uXG5cblRoZSBzdXJwcmlzaW5nIHBhcnQ/IGBicGZfZ2V0X3NwaSgwKWAgYWN0dWFsbHkgcmV0dXJucyBgMGAsIHdoaWNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzdGFjayBtYXAgY29ycmVzcG9uZHMgdG8gYGZwIC0gOGAuIFRoYXQgbWVhbnMgYW4gb2Zmc2V0IG9mIGAwYCwgd2hpY2gsIGluIHRoaXMgY2FzZSwgd291bGQgYmUgb3V0c2lkZSBvZiB0aGUgc3RhY2sgYW5kIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpcyBiZWluZyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZCBhcyBgZnAgLSA4YCAoc3RhY2sgc2xvdCAwKS5cblxuVGhlIHByb2JsZW0sIGl0IHNlZW1zLCBsaWVzIGluIHRoZSBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgZnVuY3Rpb24sIHdoaWNoIG9ubHkgY2hlY2tlZCBgaWYgKG9mZiAlIEJQRl9SRUdfU0laRSlgLiBTaW5jZSBgMCAlIDhgIGlzIHplcm8sIHRoZSBjaGVjayBpbmNvcnJlY3RseSBhY2NlcHRzIGBvZmYgPSAwYC4gVGhpcyBhbGlhc2luZyBidWcgYWxsb3dzIGZvciB0aGUgbWFuaXB1bGF0aW9uIG9yIGRlc3RydWN0aW9uIG9mIHN0YWNrIHNsb3QgMCB3aGVuIGEgcG9zaXRpdmUgb3IgemVybyBvZmZzZXQgaXMgcHJvdmlkZWQsIGVzc2VudGlhbGx5IGdpdmluZyB1cyBhY2Nlc3MgdG8gc29tZXRoaW5nIHdlIHNob3VsZG4ndCBoYXZlLlxuXG5UaGUgZml4PyBTaW1wbGUg4oCTIHVwZGF0ZSB0aGUgY29uZGl0aW9uIGluIGBzdGFja19zbG90X29ial9nZXRfc3BpYCB0byBgaWYgKG9mZiBcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKWAuIFRoaXMgd2lsbCBwcmV2ZW50IGFueSBub24tbmVnYXRpdmUgb2Zmc2V0LCBpbmNsdWRpbmcgemVybywgZnJvbSBiZWluZyBjb25zaWRlcmVkIGEgdmFsaWQgc3RhY2sgaW5kZXguXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBhIEtNU0FOIGlzc3VlPyBOby4gVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGZpeCwgYSBib3VuZHMgY2hlY2sgdG8gcHJldmVudCBpbnZhbGlkIHN0YWNrIHNsb3QgaW5kZXhpbmcuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgdGlnaHRlbmluZyB2ZXJpZmljYXRpb24sIG5vdCBpbnRyb2R1Y2luZyBhIHJpc2suIE5vIGtlcm5lbCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBiZWluZyBoYW5kbGVkLCBhbmQgbm8gbmV3IGFsbG9jYXRpb24gaXNzdWVzIGhhdmUgZW1lcmdlZC5cblxuSSd2ZSByZXZpZXdlZCB0aGUgS01TQU4gY3JpdGVyaWE6IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgaXQgZG9lc24ndCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBpdCdzIHNpbXBseSB0aWdodGVuaW5nIHRoZSBib3VuZHMgY2hlY2suIFRoZSByaXNrcyBhcmUgdGhvc2UgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChvdXQtb2YtYm91bmRzLCBvdmVyZmxvd3MsIG51bGwgZGVyZWZlcmVuY2VzLCBldGMuKS4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5JJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBUaGlzIGZpeCBpcyBwcmV2ZW50aW5nIGFuIGlsbGVnYWwgbWVtb3J5IGFjY2Vzcywgbm90IGVuYWJsaW5nIG9uZS4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgQlBGIHRlc3RzIGFyZSBzdWZmaWNpZW50LiBJIHNob3VsZCBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjYsIk91dHB1dFRva2VucyI6MjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6NDUuMTYzOTc5NDYxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFxcdTAwM2U9IDBgKSBmb3Igc3RhY2stYWxsb2NhdGVkIG9iamVjdHMgc3VjaCBhcyBpdGVyYXRvcnMsIGR5bnB0cnMsIGFuZCBpcnEgZmxhZ3MuIFByZXZpb3VzbHksIHBhc3Npbmcgb2Zmc2V0IDAgKGkuZS4gYHIxMGAgLyBgZnArMGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHZlcmlmaWVyIHZhbGlkYXRpb24vYm91bmRzIGNoZWNrIG9uIEJQRiByZWdpc3RlciBvZmZzZXRzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBwYWRkaW5nLCBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdGFjayBpbmRleGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgdmVyaWZpZXIgdGVzdHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApIHRvIHJlamVjdCBub24tbmVnYXRpdmUgb2Zmc2V0cyAoYG9mZiBcXHUwMDNlPSAwYCkgZm9yIHN0YWNrLWFsbG9jYXRlZCBvYmplY3RzIHN1Y2ggYXMgaXRlcmF0b3JzLCBkeW5wdHJzLCBhbmQgaXJxIGZsYWdzLiBQcmV2aW91c2x5LCBwYXNzaW5nIG9mZnNldCAwIChpLmUuIGByMTBgIC8gYGZwKzBgKSByZXN1bHRlZCBpbiBgYnBmX2dldF9zcGkoMClgIGV2YWx1YXRpbmcgdG8gYCgtMCAtIDEpIC8gOCA9IDBgIGR1ZSB0byBpbnRlZ2VyIHRydW5jYXRpb24sIGVycm9uZW91c2x5IGFsaWFzaW5nIG9mZnNldCAwIHRvIHN0YWNrIHNsb3QgaW5kZXggMCAoYGZwLThgKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow9lgqj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 08:45:35 +0000 UTC FinishedAt: 2026-09-11 08:48:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15071f2a1263e82150c77eeb1e94dbfc31950a8e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a101f2b7-4f1d-44fa-8628-5b57634572be" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "stack_slot_obj_get_spi", "process_iter_arg", "process_dynptr_func", "process_irq_flag", "bpf_check" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2l0ZXJfYXJnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfZHlucHRyX2Z1bmMmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pcnFfZmxhZyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCYjNDM7MGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcdTAwM2U9IDApLCBwcmV2ZW50aW5nIG9mZnNldCAwIGZyb20gZXJyb25lb3VzbHkgYWxpYXNpbmcgdG8gc3RhY2sgc2xvdCBpbmRleCAwLiBUaGlzIHJlYWNoYWJsZSB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEZfUFJPR19MT0FEKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0NzoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFiMGIxZmI2Mjg3ODYuLmVmYmI0NDY5OTg4NDggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3NcbiBcdH1cbiBcbiBcdG9mZiA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuLVx0aWYgKG9mZiAlIEJQRl9SRUdfU0laRSkge1xuJiM0MztcdGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCYjMzQ7LCBvYmpfa2luZCwgb2ZmKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5pbmRleCA2NDYwMjY0MzBlOWI1Li5lNWJiOWZlNmQ1ZTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbkBAIC01Miw2ICYjNDM7NTIsMjggQEAgaW50IGNyZWF0ZV9hbmRfZGVzdHJveSh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIGZwJiM0MzswIGlzIG5vdCBhIHN0YWNrIHNsb3QuIGJwZl9nZXRfc3BpKDApIHVzZWQgdG8gYWxpYXMgc3BpIDAgKGZwLTgpLiAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2Nhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTBcJiMzNDspXG4mIzQzO2ludCBkZXN0cm95X2ZwMF9mYWlsKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaXRlcl9udW0gaXRlcjtcbiYjNDM7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtyMSA9ICVbaXRlcl07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMiA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMyA9IDEwMDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCYjMzQ7XG4mIzQzO1x0XHQvKiByMTAgaXMgZnAmIzQzOzAsIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIEJQRiBzdGFjayAqL1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByMTA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldO1wmIzM0O1xuJiM0MztcdFx0OlxuJiM0MztcdFx0OiBfX2ltbV9wdHIoaXRlciksIElURVJfSEVMUEVSU1xuJiM0MztcdFx0OiBfX2Nsb2JiZXJfY29tbW9uXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9yYXdfdHBcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTFcJiMzNDspXG4gaW50IGNyZWF0ZV9hbmRfZm9yZ2V0X3RvX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFja19zbG90X29ial9nZXRfc3BpJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfaXRlcl9hcmcmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19keW5wdHJfZnVuYyYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2lycV9mbGFnJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcdTAwM2U9IDApLCBwcmV2ZW50aW5nIG9mZnNldCAwIGZyb20gZXJyb25lb3VzbHkgYWxpYXNpbmcgdG8gc3RhY2sgc2xvdCBpbmRleCAwLiBUaGlzIHJlYWNoYWJsZSB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEZfUFJPR19MT0FEKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0NzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCAxYjBiMWZiNjI4Nzg2Li5lZmJiNDQ2OTk4ODQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01NjcsNyAmIzQzOzU2Nyw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zCiAJfQogCiAJb2ZmID0gcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwotCWlmIChvZmYgJSBCUEZfUkVHX1NJWkUpIHsKJiM0MzsJaWYgKG9mZiAmZ3Q7PSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDtjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcbiYjMzQ7LCBvYmpfa2luZCwgb2ZmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jCmluZGV4IDY0NjAyNjQzMGU5YjUuLmU1YmI5ZmU2ZDVlNTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMKQEAgLTUyLDYgJiM0Mzs1MiwyOCBAQCBpbnQgY3JlYXRlX2FuZF9kZXN0cm95KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIGZwJiM0MzswIGlzIG5vdCBhIHN0YWNrIHNsb3QuIGJwZl9nZXRfc3BpKDApIHVzZWQgdG8gYWxpYXMgc3BpIDAgKGZwLTgpLiAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgcGFzcyBpbiBpdGVyIGF0IGFuIG9mZnNldD0wJiMzNDspCiYjNDM7aW50IGRlc3Ryb3lfZnAwX2ZhaWwodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX251bSBpdGVyOwomIzQzOwomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7cjEgPSAlW2l0ZXJdOyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkJJiMzNDtyMyA9IDEwMDA7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXddOyYjMzQ7CiYjNDM7CQkvKiByMTAgaXMgZnAmIzQzOzAsIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIEJQRiBzdGFjayAqLwomIzQzOwkJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tX3B0cihpdGVyKSwgSVRFUl9IRUxQRVJTCiYjNDM7CQk6IF9fY2xvYmJlcl9jb21tb24KJiM0MzsJKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MSYjMzQ7KQogaW50IGNyZWF0ZV9hbmRfZm9yZ2V0X3RvX2Rlc3Ryb3lfZmFpbCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb2RpZmljYXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGNlbnRlcnMgYXJvdW5kIHRoZSBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24g4oCTIHdoYXQgaXMgaXQgZGVzaWduZWQgdG8gZG8/IE15IGV4cGVydCBrbm93bGVkZ2UgaW1tZWRpYXRlbHkga2V5cyBtZSBpbjogdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgc3RhY2sgc2xvdCBvZmZzZXRzIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBzcGVjaWZpYyBvYmplY3Qga2luZHMgd2l0aGluIHRoZSBCUEYgZW52aXJvbm1lbnQuCgpMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIHRoZSBjaGFuZ2UgaXMgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gV2UmIzM5O3ZlIGdvdCBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGBvZmZgLCB0aGUgb2Zmc2V0IHZhbHVlLiBUaGUgb3JpZ2luYWwgY29kZSBkaWQgYSBtb2R1bG8gY2hlY2sgb24gYG9mZmAgZm9yIHRoZSBgQlBGX1JFR19TSVpFYCB0byBtYWtlIHN1cmUgaXQgd2FzIGFsaWduZWQuIE5vdyB0aGUgcGF0Y2ggYWRkcyBhbiBhZGRpdGlvbmFsIGNoZWNrLCBsb29raW5nIHRvIHNlZSBpZiBvZmYgaXMgJmd0Oz0gMCwgb3IgaWYgaXQgbW9kdWxvIGlzIG5vdCAwLiBUaGlzIHN1Z2dlc3RzIHdlIGFyZSB0aWdodGVuaW5nIHVwIGEgcmVzdHJpY3Rpb24gb24gb2Zmc2V0cy4gVGhlIHZlcmJvc2UgbWVzc2FnZSBpbmRpY2F0ZXMgdGhhdCBtaXNhbGlnbmVkIG9mZnNldHMgYXJlIGludmFsaWQgZm9yIHRoZSBvYmplY3QgYmVpbmcgcGFzc2VkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGF0IG9iamVjdCB0eXBlLCBzcGVjaWZpY2FsbHkuIEFueSBuZWdhdGl2ZSBvZmZzZXQgY291bGQgYmUgYSBidWcuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB3aHkgdGhpcyBjaGVjayBpcyBiZWluZyBhbHRlcmVkLiBXZXJlIHRoZXJlIHByaW9yIGlzc3VlcyB3aXRoIG5lZ2F0aXZlIG9mZnNldHMsIG9yIGlzIHRoaXMgcGF0Y2ggcHJvYWN0aXZlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1pc2ludGVycHJldGF0aW9uIG9mIHN0YWNrIHNsb3QgYWNjZXNzPwoKRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBhIHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNgIHRlbGxzIG1lIHRoaXMgY2hhbmdlIGlzIGNydWNpYWwuIEkgZXhwZWN0IHRoZSBzZWxmdGVzdCBpcyBkZXNpZ25lZCB0byBlbnN1cmUgdGhlIGZpeCBpcyB3b3JraW5nIGFzIGludGVuZGVkLCBhbmQgcG9zc2libHkgdG8gZGVtb25zdHJhdGUgdGhhdCBwcmlvciBidWdneSBiZWhhdmlvciwgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGF0IHRlc3QgdG8gdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIGl0JiMzOTtzIGNvdmVyaW5nLiBJIGtub3cgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBCUEYgc2VjdXJpdHksIHNvIEkgd2lsbCBzY3J1dGluaXplIHRoaXMgcGF0Y2ggdG8gbG9vayBmb3Igc2lkZSBlZmZlY3RzIG9yIGlzc3VlcyB0aGF0IEkgZm9yZXNlZS4gSSB3aWxsIHByb2NlZWQgY2F1dGlvdXNseSB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFja19zbG90X29ial9nZXRfc3BpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU0NT1zdGF0aWMgYm9vbCBpc19zcGlfYm91bmRzX3ZhbGlkKHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGksIGludCBucl9zbG90cylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU1OTpzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjAtXHRcdFx0ICAgICAgICAgIGNvbnN0IGNoYXIgKm9ial9raW5kLCBpbnQgbnJfc2xvdHMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU4Nj1zdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1ODg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7ZHlucHRyXCYjMzQ7LCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01ODktfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTE9c3RhdGljIGludCBpdGVyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Mi17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFwmIzM0O2l0ZXJcJiMzNDssIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTQtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTY9c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXJxX2ZsYWdcJiMzNDssIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHJlZmxlY3RpbmcgdGhlIGFwcHJvYWNoIGEgc2Vhc29uZWQgZXhwZXJ0IG1pZ2h0IHRha2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBjcnVjaWFsIGNvbXBvbmVudCBhY3R1YWxseSB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcg4oCTIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaXRzIGxvZ2ljLCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCwgb2YgY291cnNlLCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKQmV5b25kIGp1c3QgdGhlIG1haW4gdmVyaWZpZXIgZnVuY3Rpb24sIEnigJlsbCBuZWVkIHRvIHRyYWNlIGl0cyBpbnRlcmFjdGlvbnMuIFdobyYjMzk7cyBjYWxsaW5nIGl0PyBXaGF0JiMzOTtzIGZlZWRpbmcgaXQ/IFdoZXJlIGFyZSB0aGUgaW5wdXRzIGNvbWluZyBmcm9tLCBhbmQgd2hlcmUgYXJlIHRoZSByZXN1bHRzIGdvaW5nPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IG9uIHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIHR5cGljYWwgaW5wdXQgc2NlbmFyaW9zIHRoZSB2ZXJpZmllciBoYXMgdG8gaGFuZGxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGV4dGVybmFsIGNvbXBvbmVudHMgZGVwZW5kIG9uIHRoZSBvdXRwdXQgb2YgdGhlIHZlcmlmaWVyLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgY29kZS4KCkkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFdoYXQgaXMgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGxpa2U/IEFyZSB0aGVyZSBtdWx0aXBsZSBzdGFnZXM/IERvZXMgaXQgaGF2ZSBhbnkgb3B0aW1pemF0aW9uIHBhc3Nlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLCBmcm9tIGJvdGggcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHBvaW50cyBvZiB2aWV3PyBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHZlcmlmaWVycyBhcmUgb2Z0ZW4gY29tcGxleCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZGV2ZWxvcCBhIGdvb2QsIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTU6XHRcdCovXG4gNTU2Olx0ICAgICAgIHJldHVybiBzcGkgLSBucl9zbG90cyAmIzQzOyAxIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYyBhbGxvY2F0ZWRfc2xvdHM7XG4gNTU3Olx0fVxuIDU1ODpcdFxuIDU1OTpcdHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuIDU2MDpcdFx0XHRcdCAgICAgICAgICBjb25zdCBjaGFyICpvYmpfa2luZCwgaW50IG5yX3Nsb3RzKVxuIDU2MTpcdHtcbiA1NjI6XHRcdGludCBvZmYsIHNwaTtcbiA1NjM6XHRcbiA1NjQ6XHRcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbiA1NjU6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGhhcyB0byBiZSBhdCBhIGNvbnN0YW50IG9mZnNldFxcblwmIzM0Oywgb2JqX2tpbmQpO1xuIDU2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdG9mZiA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuIDU3MDpcdFx0aWYgKG9mZiBcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKSB7XG4gNTcxOlx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXG5cJiMzNDssIG9ial9raW5kLCBvZmYpO1xuIDU3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NzM6XHRcdH1cbiA1NzQ6XHRcbiA1NzU6XHRcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XG4gNTc2Olx0XHRpZiAoc3BpICYjNDM7IDEgXHUwMDNjIG5yX3Nsb3RzKSB7XG4gNTc3Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXG5cJiMzNDssIG9ial9raW5kLCBvZmYpO1xuIDU3ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1Nzk6XHRcdH1cbiA1ODA6XHRcbiA1ODE6XHRcdGlmICghaXNfc3BpX2JvdW5kc192YWxpZChicGZfZnVuYyhlbnYsIHJlZyksIHNwaSwgbnJfc2xvdHMpKVxuIDU4MjpcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbiA1ODM6XHRcdHJldHVybiBzcGk7XG4gNTg0Olx0fVxuIDU4NTpcdFxuIDU4NjpcdHN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiA1ODc6XHR7XG4gNTg4Olx0XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7ZHlucHRyXCYjMzQ7LCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbiA1ODk6XHR9XG4gNTkwOlx0XG4gNTkxOlx0c3RhdGljIGludCBpdGVyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxuIDU5MjpcdHtcbiA1OTM6XHRcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcJiMzNDtpdGVyXCYjMzQ7LCBucl9zbG90cyk7XG4gNTk0Olx0fVxuIDU5NTpcdFxuIDU5NjpcdHN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIDU5NzpcdHtcbiA1OTg6XHRcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcJiMzNDtpcnFfZmxhZ1wmIzM0OywgMSk7XG4gNTk5Olx0fVxuIDYwMDpcdFxuIDYwMTpcdHN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXG4gNjAyOlx0e1xuIDYwMzpcdFx0c3dpdGNoIChhcmdfdHlwZSBcdTAwMjYgRFlOUFRSX1RZUEVfRkxBR19NQVNLKSB7XG4gNjA0Olx0XHRjYXNlIERZTlBUUl9UWVBFX0xPQ0FMOlxuIDYwNTpcdFx0XHRyZXR1cm4gQlBGX0RZTlBUUl9UWVBFX0xPQ0FMO1xuIDYwNjpcdFx0Y2FzZSBEWU5QVFJfVFlQRV9SSU5HQlVGOlxuIDYwNzpcdFx0XHRyZXR1cm4gQlBGX0RZTlBUUl9UWVBFX1JJTkdCVUY7XG4gNjA4Olx0XHRjYXNlIERZTlBUUl9UWVBFX1NLQjpcbiA2MDk6XHRcdFx0cmV0dXJuIEJQRl9EWU5QVFJfVFlQRV9TS0I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgxOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIFRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGluZ3MsIHRvdWNoaW5nIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgbGlrZSBCUEYgaXRzZWxmLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN5c2NhbGwgaGFuZGxpbmcuIEFuZCwgb2YgY291cnNlLCB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQgdGhyb3VnaCBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgLiBHaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRob3NlIHN1YnN5c3RlbXMgYW5kIHRoZSBleHBvc2VkIGludGVyZmFjZSwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgV29ydGhGdXp6aW5nLgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBhbmQgcG9zc2libHkgYENPTkZJR19CUEZgIHRvby4gSeKAmWxsIGRvdWJsZS1jaGVjayBgaW5pdC9LY29uZmlnYCwgb3IgbWF5YmUgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBvciBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciByZXBsaWNhdGluZyB0aGUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTQxMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGxzbV9wcm9nX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgbHNtX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxNy1cdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjQ9c3RhdGljIERFRklORV9NVVRFWCh1cGRhdGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2OTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBicGZfc3RydWN0X29wc192ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTU5NjQ9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9idGYuYy01OTgwLVxua2VybmVsL2JwZi9idGYuYzo1OTgxOlx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxua2VybmVsL2JwZi9idGYuYy01OTgyLVx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTIzPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgY2dfZGV2X3Byb2dfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTkyNjpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19kZXZfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTI3LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dyb3VwX2Rldl9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQ3OD1zdGF0aWMgdTMyIHN5c2N0bF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NDI6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfc3lzY3RsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU0My1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHN5c2N0bF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9Mjc1Nj1zdGF0aWMgaW50IGNnX3NvY2tvcHRfZ2V0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzY1OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3NvY2tvcHRfdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY2LVx0LmdldF9mdW5jX3Byb3RvXHRcdD0gY2dfc29ja29wdF9mdW5jX3Byb3RvLFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzQ2PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9ncyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICpvcHMgPSBlbnYtXHUwMDNlb3BzO1xua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXHRpbnQgaSwgY250LCBzaXplLCBjdHhfZmllbGRfc2l6ZSwgcmV0LCBkZWx0YSA9IDAsIGVwaWxvZ3VlX2NudCA9IDA7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbmtlcm5lbC9icGYvaGVscGVycy5jOjM2OiAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjQ3OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zeXNjYWxsX3ZlcmlmaWVyX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXHQuZ2V0X2Z1bmNfcHJvdG8gID0gc3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMDEwLVx0Lypcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTAxMTpcdCAqIFRoZSB2ZXJpZmllciBvbmx5IHRydXN0cyB2bV9tbSBhbmQgdm1fZmlsZSAoc2VlXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXHQgKiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTCBpbiB2ZXJpZmllci5jKS4gVGFrZSBhIHJlZmVyZW5jZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0mIzM5O3Mgb3BzLiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xOS19O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgKiBjb25zdCBicGZfdmVyaWZpZXJfb3BzW10gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEtI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpIFxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI6XHRbX2lkXSA9IFx1MDAyNiBfbmFtZSAjIyBfdmVyaWZpZXJfb3BzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzLSNkZWZpbmUgQlBGX01BUF9UWVBFKF9pZCwgX29wcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI3OT1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5MC0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MjkxOiAqIGNsZWFycyByZWctXHUwMDNlaWQgYWZ0ZXIgdmFsdWVfb3JfbnVsbC1cdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyOTItICogY2FyZXMgYWJvdXQgdGhlIHJhbmdlIG9mIGFjY2VzcyB0byB2YWxpZCBtYXAgdmFsdWUgcG9pbnRlciBhbmQgZG9lc24mIzM5O3QgY2FyZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDU2Mz1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MzctXHRcdFx0XHRlbnYsIFwmIzM0O1RoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFwmIzM0O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NzM4Olx0XHRcdFx0XCYjMzQ7VGhlIHZlcmlmaWVyIG9ubHkgdHJhY2tzIHBvaW50ZXItbWludXMtc2NhbGFyIGFyaXRobWV0aWMgZm9yIGFsbG93ZWQgcG9pbnRlciB0eXBlcy5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MzktXHRcdFx0XHRwdHJfcmVnbm8sIGRzdCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Njg1PWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc1MC0gKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzUxOiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzUyLSAqICAgYnBmX2Zhc3RjYWxsIGZ1bmN0aW9uIChlLmcuIGEgaGVscGVyIGNhbGwpLCBrZXJuZWwgcmVtb3ZlcyB1bm5lY2Vzc2FyeVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczMj1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODQ5LVx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODUwOlx0ZW52LVx1MDAzZW9wcyA9IHN0X29wcy1cdTAwM2V2ZXJpZmllcl9vcHM7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTEtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNDgzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUyMi1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1MjM6XHRcdGVudi1cdTAwM2VvcHMgPSBicGZfdmVyaWZpZXJfb3BzW3RndF9wcm9nLVx1MDAzZXR5cGVdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTI0LVx0XHRwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID0gdGd0X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGU7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMTU1PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2NS1cdC8qIG5vIHByb2dyYW0gaXMgdmFsaWQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE2NjpcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE3Ny1cdGVudi1cdTAwM2Vwcm9nID0gKnByb2c7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNzg6XHRlbnYtXHUwMDNlb3BzID0gYnBmX3ZlcmlmaWVyX29wc1tlbnYtXHUwMDNlcHJvZy1cdTAwM2V0eXBlXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE3OS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExODc6XHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVxdWVzdGVkIHZlcmJvc2UgdmVyaWZpZXIgb3V0cHV0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODgtXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEyCgkJCQkJCQlvdXRwdXQ6IDYxCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFZlcmlmaWVyJiMzOTtzIFNQSSBBY2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBicGZfY2hlY2tgIGZ1bmN0aW9uLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIHRoZSBCUEYgdmVyaWZpZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdGFjaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAuIEkgc2VlIHRoYXQgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGlzIGNhbGxlZCBieSB0aHJlZSBvdGhlciBmdW5jdGlvbnM6IGBkeW5wdHJfZ2V0X3NwaWAsIGBpdGVyX2dldF9zcGlgLCBhbmQgYGlycV9mbGFnX2dldF9zcGlgLgoKTm93IEkgbmVlZCB0byB0YWtlIGl0IGEgc3RlcCBmdXJ0aGVyOiBJIG5lZWQgdG8gdHJhY2UgKmJhY2t3YXJkcyogZnJvbSB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmNhbGxpbmcqIHRob3NlIHRocmVlLCBhbG9uZyB3aXRoIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpdHNlbGYuIEJ5IG1hcHBpbmcgb3V0IHRoZSBjYWxsIGdyYXBoIHRoaXMgd2F5LCBJJiMzOTtsbCBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgU1BJIChzdGF0ZSBwb2ludGVyIGluZGV4KSB2YWx1ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgdmVyaWZpZXIuIEkgbmVlZCB0byBrbm93IHRoZSBvcmlnaW4gb2YgdGhlIGFjY2Vzcy4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGRhdGEgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhkeW5wdHJfZ2V0X3NwaXxpdGVyX2dldF9zcGl8aXJxX2ZsYWdfZ2V0X3NwaXxzdGFja19zbG90X29ial9nZXRfc3BpKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PXN0YXRpYyBib29sIGlzX3NwaV9ib3VuZHNfdmFsaWQoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSwgaW50IG5yX3Nsb3RzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTU5OnN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2MC1cdFx0XHQgICAgICAgICAgY29uc3QgY2hhciAqb2JqX2tpbmQsIGludCBucl9zbG90cylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU4NjpzdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1ODg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7ZHlucHRyXCYjMzQ7LCBCUEZfRFlOUFRSX05SX1NMT1RTKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01ODktfVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTE6c3RhdGljIGludCBpdGVyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Mi17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFwmIzM0O2l0ZXJcJiMzNDssIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTQtfVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTY6c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTg6XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXJxX2ZsYWdcJiMzNDssIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3MT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Nzk6XHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwLVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzUzPXN0YXRpYyBpbnQgdW5tYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzU4Olx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc1OS1cdGlmIChzcGkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg0NT1zdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODUyOlx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTg1My1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODczPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg3Olx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTg4OC1cdGlmIChzcGkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMj1zdGF0aWMgZW51bSBicGZfZHlucHRyX3R5cGUgZHlucHRyX3JlZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MTA6XHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTExLVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMzPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDE6XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDItXHRpZiAoc3BpIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NzY9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTgyOlx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTgzLVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwND1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMy1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTQ6XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE1LVx0aWYgKHNwaSA9PSAtRVJBTkdFKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDMxPXN0YXRpYyBpbnQgaXNfaXRlcl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzc6XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM4LVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA2Nj1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdF9pcnFfZmxhZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNzY6XHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc3LVx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5OT1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90X2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNzpcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDgtXHRpZiAoc3BpIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY0PXN0YXRpYyBib29sIGlzX2lycV9mbGFnX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3My1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzQ6XHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc1LVx0aWYgKHNwaSA9PSAtRVJBTkdFKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4PXN0YXRpYyBpbnQgaXNfaXJxX2ZsYWdfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk1Olx0c3BpID0gaXJxX2ZsYWdfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Ni1cdGlmIChzcGkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc2MDQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OTYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY5NzpcdFx0XHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5OC1cdFx0XHRpZiAoc3BpIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzQzPXN0YXRpYyBpbnQgcHJvY2Vzc19pdGVyX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLCBpbnQgaW5zbl9pZHgsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzgyOTpcdFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzMC1cdFx0aWYgKHNwaSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxODQ9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMjM4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM5Olx0XHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjI0MC1cdFx0aWYgKHNwaSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIFNQSSBDb250ZXh0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgQlBGIGNvZGUsIGFuZCBpdCYjMzk7cyB1c2luZyBgYnBmX2dldF9zcGlgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcywgbGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZSB3ZSBrbm93IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZzsgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gb3VyIHVuZGVyc3RhbmRpbmcuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2dldF9zcGlgIHJpZ2h0IGF3YXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgU1BJIGNvbnRleHQgd2l0aGluIHRoZSBCUEYgZW52aXJvbm1lbnQuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIG1ha2UgYXNzdW1wdGlvbnMgaW4gdGhpcyBkb21haW4sIGFuZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2Ugd2lsbCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgc3VidGxldGllcyBpbiBob3cgU1BJIHZhbHVlcyBhcmUgaGFuZGxlZC4gR290dGEga2VlcCB0aGF0IHNoYXJwLCBleHBlcnQmIzM5O3MgZWRnZSwgcmlnaHQ/IExldCYjMzk7cyBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzY9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDMtXHRcdFx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzQ0Olx0XHRcdFx0XHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM0NS1cdFx0XHRcdFx0aXRlcl9zdGF0ZSA9IFx1MDAyNmJwZl9mdW5jKGVudiwgaXRlcl9yZWcpLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU1OT1zdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU3NTpcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc2LVx0aWYgKHNwaSAmIzQzOyAxIFx1MDAzYyBucl9zbG90cykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjU5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM2ODg6XHRcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODktXHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgYnBmX2dldF9zcGlgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfZ2V0X3NwaWAuIEl0JiMzOTtzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgc28gaXQmIzM5O3MgbGlrZWx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGluZnJhc3RydWN0dXJlIHNvbWV3aGVyZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjayBkb3duIGl0cyBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIGZvciB0aGlzIOKAkyBgZ3JlcGAsIG1heWJlIGBjc2NvcGVgIG9yIGBjc2VhcmNoYCBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IHNwcmF3bGluZywgb3IgZXZlbiBqdXN0IGEgcXVpY2sgc2VhcmNoIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgd2l0aCBteSBlZGl0b3IuIEtub3dpbmcgdGhlIHR5cGljYWwgbmFtaW5nIGNvbnZlbnRpb25zLCBJIGNhbiB0cnkgYSBicm9hZCBzZWFyY2ggZmlyc3QgYW5kIHRoZW4gbmFycm93IGl0IGRvd24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhlYWRlciBmaWxlcyB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCwgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLCB3aGljaCB3aWxsIHByb2JhYmx5IGludm9sdmUgc29tZSBtYWNybyBtYWdpYyBnaXZlbiBob3cgQlBGIGhlbHBlcnMgYXJlIHVzdWFsbHkgc2V0IHVwLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBoZWxwZXIgYWN0dWFsbHkgKmRvZXMqIHVuZGVyIHRoZSBob29kIOKAkyB3aGF0IHJlZ2lzdGVycyBvciBtZW1vcnkgaXQgYWNjZXNzZXMsIGFueSBjb25zdHJhaW50cyBvciBzaWRlIGVmZmVjdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaywgaWYgYXQgYWxsLiBJdCBtaWdodCBpbnZvbHZlIGxvb2tpbmcgYXQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgYGJwZl9wcm9nX2luZm9gIG9yIHdoYXRldmVyIHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHVzaW5nIGF0IHRoZSB0aW1lLiBJJiMzOTtsbCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBhbnkgcG90ZW50aWFsIGNoYW5nZXMgb3IgYnVnIGZpeGVzIHJlbGV2YW50IHRvIHRoaXMgaGVscGVyLCB0byBhdm9pZCBnZXR0aW5nIHRyaXBwZWQgdXAgYnkgb2xkIGluZm9ybWF0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpdHMgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCB0aGV5IGluZGljYXRlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaG93IGl0IHNob3VsZCBiZSBjb3JyZWN0bHkgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGlcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMjMwPWludCBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEyMzQ6c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIzNS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM2PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVx0XHRcdFx0XHQgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcdFx0XHRcdFx0c3BpID0gYnBmX2dldF9zcGkoaXRlcl9yZWctXHUwMDNldmFyX29mZi52YWx1ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDUtXHRcdFx0XHRcdGl0ZXJfc3RhdGUgPSBcdTAwMjZicGZfZnVuYyhlbnYsIGl0ZXJfcmVnKS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NTk9c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzU6XHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cdGlmIChzcGkgJiM0MzsgMSBcdTAwM2MgbnJfc2xvdHMpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzY4Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4Olx0XHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jPTM0PWludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYzo1NTovKiBmcCYjNDM7MCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01Ni1TRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgaG93IHRoZSBCUEYgdmVyaWZpZXIgd29ya3MsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicGZfZ2V0X3NwaWAgaGVscGVyLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbiBhbmQgaG9wZWZ1bGx5IHNvbWUgcmVsZXZhbnQgY29tbWVudHMgYWJvdXQgaG93IHRoaXMgYGJwZl9nZXRfc3BpYCBoZWxwZXIgaXMgbWVhbnQgdG8gZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgd2l0aGluIHRoZSB2ZXJpZmllciBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBob3BpbmcgdGhpcyBoZWFkZXIgZmlsZSBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzA6XHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjMxOlx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGFydGluZ19zdGF0ZSxcbjEyMzI6XHRcdFx0XHQgICAgIGludCByZWdubywgYm9vbCAqY2hhbmdlZCk7XG4xMjMzOlx0XG4xMjM0Olx0c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbjEyMzU6XHR7XG4xMjM2Olx0XHRyZXR1cm4gKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRTtcbjEyMzc6XHR9XG4xMjM4Olx0XG4xMjM5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmJwZl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjQwOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4xMjQxOlx0e1xuMTI0MjpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbjEyNDM6XHRcbjEyNDQ6XHRcdHJldHVybiBjdXItXHUwMDNlZnJhbWVbcmVnLVx1MDAzZWZyYW1lbm9dO1xuMTI0NTpcdH1cbjEyNDY6XHRcbjEyNDc6XHQvKiBSZXR1cm4gSVAgZm9yIGEgZ2l2ZW4gZnJhbWUgaW4gYSBjYWxsIHN0YWNrICovXG4xMjQ4Olx0c3RhdGljIGlubGluZSB1MzIgYnBmX2ZyYW1lX2luc25faWR4KHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0LCB1MzIgZnJhbWUpXG4xMjQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5MgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQlBGIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dC4gIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBob3cgYGJwZl9nZXRfc3BpYCBjYWxjdWxhdGVzIHRoZSBzdGFjayBwb2ludGVyIGluZGV4IChTUEkpIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZvdW5kIHNvbWV0aGluZy4gSXQgc2VlbXMgdGhhdCBvcmlnaW5hbGx5IHRoZSBjYWxjdWxhdGlvbiBgKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRWAgd291bGQgbWFwIGFuIG9mZnNldCBvZiAwIHRvIFNQSSAwLiBUaGUgaW50ZWdlciBkaXZpc2lvbiBpbiBDOTkgdHJ1bmNhdGVzIHRvd2FyZCB6ZXJvLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBhbGlhc2luZy4gU3BlY2lmaWNhbGx5LCBhbiBvZmZzZXQgb2YgMCB3b3VsZCBnaXZlIGFuIFNQSSBvZiAwLCBlZmZlY3RpdmVseSBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIHN0YWNrIHNsb3QgYXQgaW5kZXggMCB2aWEgYW4gaW52YWxpZCBvZmZzZXQuIFRoaXMgaXMgY29uY2VybmluZywgb2YgY291cnNlLgoKVGhlIGZpeCwgYGlmIChvZmYgJmd0Oz0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpYCwgaW4gYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGxvb2tzIGxpa2UgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IHRoaXMgYW5kIG90aGVyIGludmFsaWQgYWNjZXNzZXMuICBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBjb21wbGV0ZWx5IG1pdGlnYXRlcyB0aGUgaXNzdWUuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgaXMgdGhlIGtleSBmdW5jdGlvbiwgYW5kIGFzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBpdCBpbXBsaWVzIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkLiAgSSYjMzk7bSB0cmFja2luZyBpdHMgbm9uLXN0YXRpYyBjYWxsZXJzIG5vdzogYGR5bnB0cl9nZXRfc3BpYCwgYGl0ZXJfZ2V0X3NwaWAsIGBpcnFfZmxhZ19nZXRfc3BpYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXRlcl9hcmdgLCBgcHJvY2Vzc19pcnFfZmxhZ2AsIGFuZCBgYnBmX2NoZWNrYCBhcmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLiAgSSB3YW50IHRvIGtub3cgaWYgdGhlc2UgYXJlIGluIGFueSB3YXkgYnlwYXNzYWJsZS4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpcyBpbmRlZWQgc3RhdGljLiAgSSYjMzk7bSBsaXN0aW5nIHRoZW0gb3V0IHRvIGNoZWNrIGZvciBpbmxpbmluZyBvciBvdGhlciBzeW1ib2wgdmlzaWJpbGl0eTogYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLCBgcHJvY2Vzc19pdGVyX2FyZ2AsIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXJxX2ZsYWdgLCBgYnBmX2NoZWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIGluIHRoZSBjb2RlIHRoZSBpc3N1ZSBtaWdodCBwZXJzaXN0IG9yIGJlIGV4cGxvaXRhYmxlLgoKQ29uZmlndXJhdGlvbi13aXNlLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbC4gYEJQRl9TWVNDQUxMYCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBlbmFibGVzIHRoZSB2ZXJpZmllciBhbmQgdGhlIEJQRiBzeXNjYWxsIGl0c2VsZi4gVGhpcyBzZWVtcyB0byBiZSB0aGUgY29udHJvbGxpbmcgZmFjdG9yLgoKU28sIHRvIHN1bW1hcml6ZSBteSBmaW5kaW5ncyBhbmQgZm9jdXM6CgoxLiAgVGhpcyB2dWxuZXJhYmlsaXR5IGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgaXMgYSBmbGF3LgoyLiAgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLgozLiAgTXkga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmU6IGBzdGFja19zbG90X29ial9nZXRfc3BpYCwgYHByb2Nlc3NfaXRlcl9hcmdgLCBgcHJvY2Vzc19keW5wdHJfZnVuY2AsIGBwcm9jZXNzX2lycV9mbGFnYCwgYW5kIGBicGZfY2hlY2tgLgo0LiAgTXkgcmVhc29uaW5nIGlzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZmxhdy4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHRlc3RzIGFscmVhZHkgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2l0ZXJfYXJnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfZHlucHRyX2Z1bmMmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pcnFfZmxhZyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBzdGFja19zbG90X29ial9nZXRfc3BpKCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBzdGFjayBvZmZzZXRzIChvZmYgXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2l0ZXJfYXJnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfZHlucHRyX2Z1bmMmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pcnFfZmxhZyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBzdGFja19zbG90X29ial9nZXRfc3BpKCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBzdGFjayBvZmZzZXRzIChvZmYgXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCYjNDM7MGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmI5ZjRmZjBhYTVlNjYzYmVjYWEzMzJlNWQzZDljYzlkZjZhMDI1NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjQ3OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDFiMGIxZmI2Mjg3ODYuLmVmYmI0NDY5OTg4NDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3MKIAl9CiAKIAlvZmYgPSByZWctJmd0O3Zhcl9vZmYudmFsdWU7Ci0JaWYgKG9mZiAlIEJQRl9SRUdfU0laRSkgewomIzQzOwlpZiAob2ZmICZndDs9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKSB7CiAJCXZlcmJvc2UoZW52LCAmIzM0O2Nhbm5vdCBwYXNzIGluICVzIGF0IGFuIG9mZnNldD0lZFxuJiMzNDssIG9ial9raW5kLCBvZmYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMKaW5kZXggNjQ2MDI2NDMwZTliNS4uZTViYjlmZTZkNWU1MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYwpAQCAtNTIsNiAmIzQzOzUyLDI4IEBAIGludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7LyogZnAmIzQzOzAgaXMgbm90IGEgc3RhY2sgc2xvdC4gYnBmX2dldF9zcGkoMCkgdXNlZCB0byBhbGlhcyBzcGkgMCAoZnAtOCkuICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTAmIzM0OykKJiM0MztpbnQgZGVzdHJveV9mcDBfZmFpbCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2l0ZXJfbnVtIGl0ZXI7CiYjNDM7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtyMSA9ICVbaXRlcl07JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O3IzID0gMTAwMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107JiMzNDsKJiM0MzsJCS8qIHIxMCBpcyBmcCYjNDM7MCwgb25lIGJ5dGUgYWJvdmUgdGhlIHRvcCBvZiB0aGUgQlBGIHN0YWNrICovCiYjNDM7CQkmIzM0O3IxID0gcjEwOyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW1fcHRyKGl0ZXIpLCBJVEVSX0hFTFBFUlMKJiM0MzsJCTogX19jbG9iYmVyX2NvbW1vbgomIzQzOwkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/cmF3X3RwJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0xJiMzNDspCiBpbnQgY3JlYXRlX2FuZF9mb3JnZXRfdG9fZGVzdHJveV9mYWlsKHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBUaGlzIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgS01TQU4gZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpbiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgdGhpczogYSBzaW1wbGUgY2hlY2sgb24gdGhlIG9mZnNldC4gUHJldmlvdXNseSwgdGhlIGNvbmRpdGlvbiB3YXMganVzdCBjaGVja2luZyBmb3IgdGhlIG1vZHVsbzogYGlmIChvZmYgJSBCUEZfUkVHX1NJWkUpYC4gTm93IGl0IGluY2x1ZGVzIGEgbm9uLW5lZ2F0aXZlIG9mZnNldCBjaGVjazogYGlmIChvZmYgJmd0Oz0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpYC4gCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGNoZWNrIGlzIGd1YXJkaW5nIGFnYWluc3QgaW52YWxpZCBvZmZzZXRzLCB3aGljaCBpcyBnb29kLiBUaGUgYWRkaXRpb24gb2YgdGhlIGAmZ3Q7PSAwYCBjb25kaXRpb24gc2VlbXMgdG8gYmUgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciBhZGRlZCBzZWN1cml0eS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWxsb3dpbmcgYSBuZWdhdGl2ZSBvZmZzZXQgaGVyZS4gSXQgbWlnaHQgb3BlbiBhIHdpbmRvdyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBleGlzdGluZyBjaGVjayBhbHJlYWR5IGNhdGNoZXMgbm9uLWFsaWduZWQgb2Zmc2V0czsgdGhpcyBuZXcgY29uc3RyYWludCBzZWVtcyBkZXNpZ25lZCB0byBwcmV2ZW50IG5lZ2F0aXZlIHZhbHVlcy4KCkkmIzM5O20gdGhpbmtpbmcsIHRoaXMgY2hhbmdlIGlzIHByb2JhYmx5IGFpbWVkIGF0IHN0cmVuZ3RoZW5pbmcgdGhlIGJvdW5kcyBjaGVjayBhbmQgcHJldmVudGluZyBzb21lIGtpbmQgb2YgcG90ZW50aWFsIGV4cGxvaXQuIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHdoZXJlIGFyYml0cmFyeSBieXRlY29kZSBleGVjdXRpb24gaXMgYSBjb25jZXJuLCBhbnkgaW1wcm92ZW1lbnQgdG8gbWVtb3J5IHNhZmV0eSBpcyBwcm9iYWJseSBpbXBvcnRhbnQuIE15IGd1dCB0ZWxscyBtZSB0aGlzICpjb3VsZCogYmUgYSBzcG90IHdoZXJlIEtNU0FOIGZ1enppbmcgd291bGQgYmUgdmFsdWFibGUsIGVzcGVjaWFsbHkgaWYgbmVnYXRpdmUgb2Zmc2V0cyB3ZXJlIHByZXZpb3VzbHkgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0XHQqIHdpdGhpbiBbMCwgYWxsb2NhdGVkX3N0YWNrKS5cbiA1NTE6XHRcdCpcbiA1NTI6XHRcdCogUGxlYXNlIG5vdGUgdGhhdCB0aGUgc3BpIGdyb3dzIGRvd253YXJkcy4gRm9yIGV4YW1wbGUsIGEgZHlucHRyXG4gNTUzOlx0XHQqIHRha2VzIHRoZSBzaXplIG9mIHR3byBzdGFjayBzbG90czsgdGhlIGZpcnN0IHNsb3Qgd2lsbCBiZSBhdFxuIDU1NDpcdFx0KiBzcGkgYW5kIHRoZSBzZWNvbmQgc2xvdCB3aWxsIGJlIGF0IHNwaSAtIDEuXG4gNTU1Olx0XHQqL1xuIDU1NjpcdCAgICAgICByZXR1cm4gc3BpIC0gbnJfc2xvdHMgJiM0MzsgMSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2MgYWxsb2NhdGVkX3Nsb3RzO1xuIDU1NzpcdH1cbiA1NTg6XHRcbiA1NTk6XHRzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiA1NjA6XHRcdFx0XHQgICAgICAgICAgY29uc3QgY2hhciAqb2JqX2tpbmQsIGludCBucl9zbG90cylcbiA1NjE6XHR7XG4gNTYyOlx0XHRpbnQgb2ZmLCBzcGk7XG4gNTYzOlx0XG4gNTY0Olx0XHRpZiAoIXRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4gNTY1Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBoYXMgdG8gYmUgYXQgYSBjb25zdGFudCBvZmZzZXRcXG5cJiMzNDssIG9ial9raW5kKTtcbiA1NjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRvZmYgPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiA1NzA6XHRcdGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xuIDU3MTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCYjMzQ7LCBvYmpfa2luZCwgb2ZmKTtcbiA1NzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTczOlx0XHR9XG4gNTc0Olx0XG4gNTc1Olx0XHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xuIDU3NjpcdFx0aWYgKHNwaSAmIzQzOyAxIFx1MDAzYyBucl9zbG90cykge1xuIDU3NzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCYjMzQ7LCBvYmpfa2luZCwgb2ZmKTtcbiA1Nzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTc5Olx0XHR9XG4gNTgwOlx0XG4gNTgxOlx0XHRpZiAoIWlzX3NwaV9ib3VuZHNfdmFsaWQoYnBmX2Z1bmMoZW52LCByZWcpLCBzcGksIG5yX3Nsb3RzKSlcbiA1ODI6XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gNTgzOlx0XHRyZXR1cm4gc3BpO1xuIDU4NDpcdH1cbiA1ODU6XHRcbiA1ODY6XHRzdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4gNTg3Olx0e1xuIDU4ODpcdFx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFwmIzM0O2R5bnB0clwmIzM0OywgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XG4gNTg5Olx0fVxuIDU5MDpcdFxuIDU5MTpcdHN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcbiA1OTI6XHR7XG4gNTkzOlx0XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXRlclwmIzM0OywgbnJfc2xvdHMpO1xuIDU5NDpcdH1cbiA1OTU6XHRcbiA1OTY6XHRzdGF0aWMgaW50IGlycV9mbGFnX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiA1OTc6XHR7XG4gNTk4Olx0XHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXCYjMzQ7aXJxX2ZsYWdcJiMzNDssIDEpO1xuIDU5OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9nZXRfc3BpYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX2dldF9zcGlgLi4uIHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCB0aGF0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgZnVuY3Rpb24uIEl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gcmV0cmlldmluZyBTZXJ2aWNlIFByaW5jaXBhbCBJZGVudGlmaWVyIGRhdGEgd2l0aGluIGEgQlBGIGNvbnRleHQsIGxpa2VseSBmb3Igc2VjdXJpdHkgb3IgcG9saWN5IGVuZm9yY2VtZW50IHB1cnBvc2VzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgdXNlciBhdXRoZW50aWNhdGlvbiwgb3IgZXZlbiBpbnRydXNpb24gZGV0ZWN0aW9uLiBEZXBlbmRpbmcgb24gd2hlcmUgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtLCBgYnBmX2dldF9zcGlgIGlzIGxpa2VseSBlaXRoZXI6CgoqICAgUHJvdmlkaW5nIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc2VydmljZSBpbnZvbHZlZCBpbiBuZXR3b3JrIGNvbW11bmljYXRpb24sIHBlcmhhcHMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHRyYWZmaWMgYWxpZ25zIHdpdGggYW4gZXN0YWJsaXNoZWQgU2VydmljZSBMZXZlbCBPYmplY3RpdmUgKFNMTykuCiogICBFbmFibGluZyB0aGUgZW5mb3JjZW1lbnQgb2YgbGVhc3QtcHJpdmlsZWdlIHByaW5jaXBsZXMgYnkgcmVzdHJpY3RpbmcgdGhlIHJlc291cmNlcyBhY2Nlc3NpYmxlIHRvIGEgZ2l2ZW4gc2VydmljZSBvciBwcm9jZXNzIGJhc2VkIG9uIGl0cyBTUEkuCiogICBBbGxvd2luZyBmb3IgZmluZS1ncmFpbmVkIGFjY2VzcyBjb250cm9sIGluIGEgY29udGFpbmVyaXplZCBlbnZpcm9ubWVudCwgb3IsCiogICBTdXBwb3J0aW5nIHNvbWUgYXNwZWN0IG9mIHplcm8tdHJ1c3QgbmV0d29yayBhcmNoaXRlY3R1cmVzLCBieSBsaW5raW5nIGNvbW11bmljYXRpb25zIHRvIGEgc3BlY2lmaWMsIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZpZWxkcyB0aGUgZnVuY3Rpb24gZXhwb3NlcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IHJldHJpZXZlcyB0aGUgU1BJLiBJcyBpdCBsZXZlcmFnaW5nIGtlcm5lbC1sZXZlbCBtZXRhZGF0YT8gRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIHBhY2tldCBoZWFkZXJzIG9yIGFwcGxpY2F0aW9uIHByb3RvY29scz8gVGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUga2V5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzY9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDMtXHRcdFx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzQ0Olx0XHRcdFx0XHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM0NS1cdFx0XHRcdFx0aXRlcl9zdGF0ZSA9IFx1MDAyNmJwZl9mdW5jKGVudiwgaXRlcl9yZWcpLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTU1OT1zdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU3NTpcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc2LVx0aWYgKHNwaSAmIzQzOyAxIFx1MDAzYyBucl9zbG90cykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjU5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM2ODg6XHRcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODktXHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX2dldF9zcGlgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2dldF9zcGlgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcmV0cmlldmluZyBzb21lIFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIGRhdGEgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gTXkgaW1tZWRpYXRlIHRob3VnaHRzIGdvIHRvIGl0cyBwb3RlbnRpYWwgcm9sZSBpbiB0cmFjaW5nIG5ldHdvcmsgYWN0aXZpdHksIHBlcmhhcHMgaW4gY29uanVuY3Rpb24gd2l0aCBlQlBGIHByb2JlcyBvbiBzb2NrZXRzIG9yIG90aGVyIG5ldHdvcmstcmVsYXRlZCBmdW5jdGlvbnMuIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0JiMzOTtzIHJldHVybmluZyBTUEkgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gYSBzb2NrZXQsIG9yIG1heWJlIHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgYWJvdXQgdGhlIHN5c3RlbS4gSSBhbHNvIGNvbnNpZGVyIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIHR5cGljYWxseSB1c2Vk4oCUaXMgaXQgcHJpbWFyaWx5IGZvciBzZWN1cml0eSBwdXJwb3NlcywgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gd291bGQgYmUgdXNlZnVsIHRvIGFzY2VydGFpbiB0aGUgcHJlY2lzZSBpbnB1dHMgaXQgdGFrZXMgYW5kIHdoYXQgaXQgYWN0dWFsbHkgb3V0cHV0cy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBlQlBGIHByb2dyYW0gZGVzaWduLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCYjMzk7cyBhbiBleHBlbnNpdmUgZnVuY3Rpb24gdG8gY2FsbCwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgbWlnaHQgaGF2ZSBvbiBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zcGlcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMjMwPWludCBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEyMzQ6c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTIzNS17XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM2PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVx0XHRcdFx0XHQgKi9cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcdFx0XHRcdFx0c3BpID0gYnBmX2dldF9zcGkoaXRlcl9yZWctXHUwMDNldmFyX29mZi52YWx1ZSk7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDUtXHRcdFx0XHRcdGl0ZXJfc3RhdGUgPSBcdTAwMjZicGZfZnVuYyhlbnYsIGl0ZXJfcmVnKS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NTk9c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzU6XHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cdGlmIChzcGkgJiM0MzsgMSBcdTAwM2MgbnJfc2xvdHMpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzY4Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4Olx0XHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jPTM0PWludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYzo1NTovKiBmcCYjNDM7MCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01Ni1TRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllciYjMzk7cyBTUEkgUmV0cmlldmFsKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYnBmX2dldF9zcGlgLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgIGhlYWRlciBmaWxlLiBNeSBpbnRlcmVzdCBpcyBwaXF1ZWQg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlIHJldHJpZXZhbCBvZiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKFNQSSkgdmFsdWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSBpbnRlcnByZXRpbmcgYW5kIHZhbGlkYXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgaW50ZXJhY3Qgd2l0aCBzZWN1cml0eSBjb250ZXh0cy4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pc21zIGZvciBleHRyYWN0aW5nIHRoZXNlIFNQSSB2YWx1ZXMsIGxpa2VseSBmcm9tIG5ldHdvcmsgaGVhZGVycyBvciBvdGhlciBzZWN1cml0eS1yZWxhdGVkIG1ldGFkYXRhLiBJJiMzOTttIGhvcGluZyB0byBzZWUgaG93IHRoZSB2ZXJpZmllciBlbnN1cmVzIHRoZSB2YWxpZGl0eSBhbmQgc2FmZXR5IG9mIHRoZXNlIGV4dHJhY3RlZCB2YWx1ZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdW50cnVzdGVkIEJQRiBjb2RlLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgYm91bmRzIGNoZWNraW5nLCBlcnJvciBoYW5kbGluZywgYW5kIHNlY3VyaXR5IGNoZWNrcyBwZXJmb3JtZWQgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBidWlsZGluZyByb2J1c3QgYW5kIHNlY3VyZSBCUEYgYXBwbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzA6XHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjMxOlx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGFydGluZ19zdGF0ZSxcbjEyMzI6XHRcdFx0XHQgICAgIGludCByZWdubywgYm9vbCAqY2hhbmdlZCk7XG4xMjMzOlx0XG4xMjM0Olx0c3RhdGljIGlubGluZSBpbnQgYnBmX2dldF9zcGkoczMyIG9mZilcbjEyMzU6XHR7XG4xMjM2Olx0XHRyZXR1cm4gKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRTtcbjEyMzc6XHR9XG4xMjM4Olx0XG4xMjM5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmJwZl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4xMjQwOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4xMjQxOlx0e1xuMTI0MjpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbjEyNDM6XHRcbjEyNDQ6XHRcdHJldHVybiBjdXItXHUwMDNlZnJhbWVbcmVnLVx1MDAzZWZyYW1lbm9dO1xuMTI0NTpcdH1cbjEyNDY6XHRcbjEyNDc6XHQvKiBSZXR1cm4gSVAgZm9yIGEgZ2l2ZW4gZnJhbWUgaW4gYSBjYWxsIHN0YWNrICovXG4xMjQ4Olx0c3RhdGljIGlubGluZSB1MzIgYnBmX2ZyYW1lX2luc25faWR4KHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0LCB1MzIgZnJhbWUpXG4xMjQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI2CgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDc0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIEJQRiBWZXJpZmllciBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgd2FzIGxvb2tpbmcgYXQgdGhlIGBicGZfZ2V0X3NwaShzMzIgb2ZmKWAgZnVuY3Rpb24sIGFuZCB0aGUgd2F5IGl0IGhhbmRsZXMgb2Zmc2V0IGNhbGN1bGF0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbGluZSBgcmV0dXJuICgtb2ZmIC0gMSkgLyBCUEZfUkVHX1NJWkU7YCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBXaGVuIGBvZmZgIGlzIHplcm8gKGxpa2Ugd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGByMTAgPSBmcCAmIzQzOyAwYCksIHRoZSBjYWxjdWxhdGlvbiBnaXZlcyB1cyBgKC0wIC0gMSkgLyA4ID0gLTEgLyA4ID0gMGAuIFRoYXQmIzM5O3MgZHVlIHRvIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIHRydW5jYXRpb24uCgpUaGUgc3VycHJpc2luZyBwYXJ0PyBgYnBmX2dldF9zcGkoMClgIGFjdHVhbGx5IHJldHVybnMgYDBgLCB3aGljaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgc3RhY2sgbWFwIGNvcnJlc3BvbmRzIHRvIGBmcCAtIDhgLiBUaGF0IG1lYW5zIGFuIG9mZnNldCBvZiBgMGAsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGJlIG91dHNpZGUgb2YgdGhlIHN0YWNrIGFuZCBvbmUgYnl0ZSBhYm92ZSB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaXMgYmVpbmcgaW5jb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXMgYGZwIC0gOGAgKHN0YWNrIHNsb3QgMCkuCgpUaGUgcHJvYmxlbSwgaXQgc2VlbXMsIGxpZXMgaW4gdGhlIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBmdW5jdGlvbiwgd2hpY2ggb25seSBjaGVja2VkIGBpZiAob2ZmICUgQlBGX1JFR19TSVpFKWAuIFNpbmNlIGAwICUgOGAgaXMgemVybywgdGhlIGNoZWNrIGluY29ycmVjdGx5IGFjY2VwdHMgYG9mZiA9IDBgLiBUaGlzIGFsaWFzaW5nIGJ1ZyBhbGxvd3MgZm9yIHRoZSBtYW5pcHVsYXRpb24gb3IgZGVzdHJ1Y3Rpb24gb2Ygc3RhY2sgc2xvdCAwIHdoZW4gYSBwb3NpdGl2ZSBvciB6ZXJvIG9mZnNldCBpcyBwcm92aWRlZCwgZXNzZW50aWFsbHkgZ2l2aW5nIHVzIGFjY2VzcyB0byBzb21ldGhpbmcgd2Ugc2hvdWxkbiYjMzk7dCBoYXZlLgoKVGhlIGZpeD8gU2ltcGxlIOKAkyB1cGRhdGUgdGhlIGNvbmRpdGlvbiBpbiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgdG8gYGlmIChvZmYgJmd0Oz0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpYC4gVGhpcyB3aWxsIHByZXZlbnQgYW55IG5vbi1uZWdhdGl2ZSBvZmZzZXQsIGluY2x1ZGluZyB6ZXJvLCBmcm9tIGJlaW5nIGNvbnNpZGVyZWQgYSB2YWxpZCBzdGFjayBpbmRleC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBhIEtNU0FOIGlzc3VlPyBOby4gVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGZpeCwgYSBib3VuZHMgY2hlY2sgdG8gcHJldmVudCBpbnZhbGlkIHN0YWNrIHNsb3QgaW5kZXhpbmcuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJiMzOTtyZSB0aWdodGVuaW5nIHZlcmlmaWNhdGlvbiwgbm90IGludHJvZHVjaW5nIGEgcmlzay4gTm8ga2VybmVsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBubyBuZXcgYWxsb2NhdGlvbiBpc3N1ZXMgaGF2ZSBlbWVyZ2VkLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIEtNU0FOIGNyaXRlcmlhOiB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBpdCBkb2VzbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgaXQmIzM5O3Mgc2ltcGx5IHRpZ2h0ZW5pbmcgdGhlIGJvdW5kcyBjaGVjay4gVGhlIHJpc2tzIGFyZSB0aG9zZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgbnVsbCBkZXJlZmVyZW5jZXMsIGV0Yy4pLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBgTmVlZHNLTVNBTj1mYWxzZWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gVGhpcyBmaXggaXMgcHJldmVudGluZyBhbiBpbGxlZ2FsIG1lbW9yeSBhY2Nlc3MsIG5vdCBlbmFibGluZyBvbmUuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIEJQRiB0ZXN0cyBhcmUgc3VmZmljaWVudC4gSSBzaG91bGQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCYjNDM7MGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApIHRvIHJlamVjdCBub24tbmVnYXRpdmUgb2Zmc2V0cyAoYG9mZiBcdTAwM2U9IDBgKSBmb3Igc3RhY2stYWxsb2NhdGVkIG9iamVjdHMgc3VjaCBhcyBpdGVyYXRvcnMsIGR5bnB0cnMsIGFuZCBpcnEgZmxhZ3MuIFByZXZpb3VzbHksIHBhc3Npbmcgb2Zmc2V0IDAgKGkuZS4gYHIxMGAgLyBgZnAmIzQzOzBgKSByZXN1bHRlZCBpbiBgYnBmX2dldF9zcGkoMClgIGV2YWx1YXRpbmcgdG8gYCgtMCAtIDEpIC8gOCA9IDBgIGR1ZSB0byBpbnRlZ2VyIHRydW5jYXRpb24sIGVycm9uZW91c2x5IGFsaWFzaW5nIG9mZnNldCAwIHRvIHN0YWNrIHNsb3QgaW5kZXggMCAoYGZwLThgKS5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgdmVyaWZpZXIgdmFsaWRhdGlvbi9ib3VuZHMgY2hlY2sgb24gQlBGIHJlZ2lzdGVyIG9mZnNldHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIHBhZGRpbmcsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0YWNrIGluZGV4aW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB2ZXJpZmllciB0ZXN0cyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6MzAuNDk5MzM2NzE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NjQ3MTc1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFja19zbG90X29ial9nZXRfc3BpXCIsXG4gICAgXCJwcm9jZXNzX2l0ZXJfYXJnXCIsXG4gICAgXCJwcm9jZXNzX2R5bnB0cl9mdW5jXCIsXG4gICAgXCJwcm9jZXNzX2lycV9mbGFnXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzdGFja19zbG90X29ial9nZXRfc3BpKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgKGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIG9mZnNldHMgKGBvZmYgXFx1MDAzZT0gMGApIGZvciBzdGFjay1hbGxvY2F0ZWQgb2JqZWN0cyBzdWNoIGFzIGl0ZXJhdG9ycywgZHlucHRycywgYW5kIGlycSBmbGFncy4gUHJldmlvdXNseSwgcGFzc2luZyBvZmZzZXQgMCAoaS5lLiBgcjEwYCAvIGBmcCswYCkgcmVzdWx0ZWQgaW4gYGJwZl9nZXRfc3BpKDApYCBldmFsdWF0aW5nIHRvIGAoLTAgLSAxKSAvIDggPSAwYCBkdWUgdG8gaW50ZWdlciB0cnVuY2F0aW9uLCBlcnJvbmVvdXNseSBhbGlhc2luZyBvZmZzZXQgMCB0byBzdGFjayBzbG90IGluZGV4IDAgKGBmcC04YCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgdmVyaWZpZXIgdmFsaWRhdGlvbi9ib3VuZHMgY2hlY2sgb24gQlBGIHJlZ2lzdGVyIG9mZnNldHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIHBhZGRpbmcsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0YWNrIGluZGV4aW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB2ZXJpZmllciB0ZXN0cyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjMwLjQ5OTM0MDk5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjgzNDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDc6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMWIwYjFmYjYyODc4Ni4uZWZiYjQ0Njk5ODg0OCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zXFxuIFxcdH1cXG4gXFxuIFxcdG9mZiA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4tXFx0aWYgKG9mZiAlIEJQRl9SRUdfU0laRSkge1xcbitcXHRpZiAob2ZmIFxcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxcXG5cXFwiLCBvYmpfa2luZCwgb2ZmKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXFxuaW5kZXggNjQ2MDI2NDMwZTliNS4uZTViYjlmZTZkNWU1MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcXG5AQCAtNTIsNiArNTIsMjggQEAgaW50IGNyZWF0ZV9hbmRfZGVzdHJveSh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBmcCswIGlzIG5vdCBhIHN0YWNrIHNsb3QuIGJwZl9nZXRfc3BpKDApIHVzZWQgdG8gYWxpYXMgc3BpIDAgKGZwLTgpLiAqL1xcbitTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTBcXFwiKVxcbitpbnQgZGVzdHJveV9mcDBfZmFpbCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pdGVyX251bSBpdGVyO1xcbitcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwicjEgPSAlW2l0ZXJdO1xcXCJcXG4rXFx0XFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcdFxcXCJyMyA9IDEwMDA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1xcXCJcXG4rXFx0XFx0LyogcjEwIGlzIGZwKzAsIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIEJQRiBzdGFjayAqL1xcbitcXHRcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9kZXN0cm95XTtcXFwiXFxuK1xcdFxcdDpcXG4rXFx0XFx0OiBfX2ltbV9wdHIoaXRlciksIElURVJfSEVMUEVSU1xcbitcXHRcXHQ6IF9fY2xvYmJlcl9jb21tb25cXG4rXFx0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTFcXFwiKVxcbiBpbnQgY3JlYXRlX2FuZF9mb3JnZXRfdG9fZGVzdHJveV9mYWlsKHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6MzIuMjkyOTU3Nzg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MzY3MTc4Mjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlcIixcbiAgICBcInByb2Nlc3NfaXRlcl9hcmdcIixcbiAgICBcInByb2Nlc3NfZHlucHRyX2Z1bmNcIixcbiAgICBcInByb2Nlc3NfaXJxX2ZsYWdcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMgaW4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpIHRvIHJlamVjdCBub24tbmVnYXRpdmUgc3RhY2sgb2Zmc2V0cyAob2ZmIFxcdTAwM2U9IDApLCBwcmV2ZW50aW5nIG9mZnNldCAwIGZyb20gZXJyb25lb3VzbHkgYWxpYXNpbmcgdG8gc3RhY2sgc2xvdCBpbmRleCAwLiBUaGlzIHJlYWNoYWJsZSB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsIChCUEZfUFJPR19MT0FEKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYjlmNGZmMGFhNWU2NjNiZWNhYTMzMmU1ZDNkOWNjOWRmNmEwMjU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NDc6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDFiMGIxZmI2Mjg3ODYuLmVmYmI0NDY5OTg4NDggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTU2Nyw3ICs1NjcsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc1xuIFx0fVxuIFxuIFx0b2ZmID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4tXHRpZiAob2ZmICUgQlBGX1JFR19TSVpFKSB7XG4rXHRpZiAob2ZmIFx1MDAzZT0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwiY2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxuXCIsIG9ial9raW5kLCBvZmYpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbmluZGV4IDY0NjAyNjQzMGU5YjUuLmU1YmI5ZmU2ZDVlNTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuQEAgLTUyLDYgKzUyLDI4IEBAIGludCBjcmVhdGVfYW5kX2Rlc3Ryb3kodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIGZwKzAgaXMgbm90IGEgc3RhY2sgc2xvdC4gYnBmX2dldF9zcGkoMCkgdXNlZCB0byBhbGlhcyBzcGkgMCAoZnAtOCkuICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCBwYXNzIGluIGl0ZXIgYXQgYW4gb2Zmc2V0PTBcIilcbitpbnQgZGVzdHJveV9mcDBfZmFpbCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9pdGVyX251bSBpdGVyO1xuK1xuK1x0YXNtIHZvbGF0aWxlIChcInIxID0gJVtpdGVyXTtcIlxuK1x0XHRcInIyID0gMDtcIlxuK1x0XHRcInIzID0gMTAwMDtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fbmV3XTtcIlxuK1x0XHQvKiByMTAgaXMgZnArMCwgb25lIGJ5dGUgYWJvdmUgdGhlIHRvcCBvZiB0aGUgQlBGIHN0YWNrICovXG4rXHRcdFwicjEgPSByMTA7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldO1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbV9wdHIoaXRlciksIElURVJfSEVMUEVSU1xuK1x0XHQ6IF9fY2xvYmJlcl9jb21tb25cbitcdCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwiP3Jhd190cFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTFcIilcbiBpbnQgY3JlYXRlX2FuZF9mb3JnZXRfdG9fZGVzdHJveV9mYWlsKHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjMyLjI5Mjk1OTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg3OTI5ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmaWxlLiBUaGUgY29yZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgdGhlIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiDigJMgd2hhdCBpcyBpdCBkZXNpZ25lZCB0byBkbz8gTXkgZXhwZXJ0IGtub3dsZWRnZSBpbW1lZGlhdGVseSBrZXlzIG1lIGluOiB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzdGFjayBzbG90IG9mZnNldHMgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHNwZWNpZmljIG9iamVjdCBraW5kcyB3aXRoaW4gdGhlIEJQRiBlbnZpcm9ubWVudC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCB0aGUgY2hhbmdlIGlzIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFdlJ3ZlIGdvdCBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGBvZmZgLCB0aGUgb2Zmc2V0IHZhbHVlLiBUaGUgb3JpZ2luYWwgY29kZSBkaWQgYSBtb2R1bG8gY2hlY2sgb24gYG9mZmAgZm9yIHRoZSBgQlBGX1JFR19TSVpFYCB0byBtYWtlIHN1cmUgaXQgd2FzIGFsaWduZWQuIE5vdyB0aGUgcGF0Y2ggYWRkcyBhbiBhZGRpdGlvbmFsIGNoZWNrLCBsb29raW5nIHRvIHNlZSBpZiBvZmYgaXMgXHUwMDNlPSAwLCBvciBpZiBpdCBtb2R1bG8gaXMgbm90IDAuIFRoaXMgc3VnZ2VzdHMgd2UgYXJlIHRpZ2h0ZW5pbmcgdXAgYSByZXN0cmljdGlvbiBvbiBvZmZzZXRzLiBUaGUgdmVyYm9zZSBtZXNzYWdlIGluZGljYXRlcyB0aGF0IG1pc2FsaWduZWQgb2Zmc2V0cyBhcmUgaW52YWxpZCBmb3IgdGhlIG9iamVjdCBiZWluZyBwYXNzZWQuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoYXQgb2JqZWN0IHR5cGUsIHNwZWNpZmljYWxseS4gQW55IG5lZ2F0aXZlIG9mZnNldCBjb3VsZCBiZSBhIGJ1Zy5cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB3aHkgdGhpcyBjaGVjayBpcyBiZWluZyBhbHRlcmVkLiBXZXJlIHRoZXJlIHByaW9yIGlzc3VlcyB3aXRoIG5lZ2F0aXZlIG9mZnNldHMsIG9yIGlzIHRoaXMgcGF0Y2ggcHJvYWN0aXZlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1pc2ludGVycHJldGF0aW9uIG9mIHN0YWNrIHNsb3QgYWNjZXNzP1xuXG5GaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIGEgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY2AgdGVsbHMgbWUgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbC4gSSBleHBlY3QgdGhlIHNlbGZ0ZXN0IGlzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGUgZml4IGlzIHdvcmtpbmcgYXMgaW50ZW5kZWQsIGFuZCBwb3NzaWJseSB0byBkZW1vbnN0cmF0ZSB0aGF0IHByaW9yIGJ1Z2d5IGJlaGF2aW9yLCBpcyBubyBsb25nZXIgcG9zc2libGUuIEknbGwgbmVlZCB0byByZXZpZXcgdGhhdCB0ZXN0IHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyBpdCdzIGNvdmVyaW5nLiBJIGtub3cgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBCUEYgc2VjdXJpdHksIHNvIEkgd2lsbCBzY3J1dGluaXplIHRoaXMgcGF0Y2ggdG8gbG9vayBmb3Igc2lkZSBlZmZlY3RzIG9yIGlzc3VlcyB0aGF0IEkgZm9yZXNlZS4gSSB3aWxsIHByb2NlZWQgY2F1dGlvdXNseSB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQyLjE3MjI2MDU2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQzNTEwOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2tfc2xvdF9vYmpfZ2V0X3NwaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PXN0YXRpYyBib29sIGlzX3NwaV9ib3VuZHNfdmFsaWQoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSwgaW50IG5yX3Nsb3RzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU1OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTU5OnN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjAtXFx0XFx0XFx0ICAgICAgICAgIGNvbnN0IGNoYXIgKm9ial9raW5kLCBpbnQgbnJfc2xvdHMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg2PXN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTg4OlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiZHlucHRyXFxcIiwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4OS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTkxPXN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiaXRlclxcXCIsIG5yX3Nsb3RzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk0LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTY9c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Ny17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5ODpcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImlycV9mbGFnXFxcIiwgMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQyLjI4NjYxNTM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwOTc3NTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHJlZmxlY3RpbmcgdGhlIGFwcHJvYWNoIGEgc2Vhc29uZWQgZXhwZXJ0IG1pZ2h0IHRha2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBjcnVjaWFsIGNvbXBvbmVudCBhY3R1YWxseSB3b3Jrcy4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcg4oCTIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBpdHMgbG9naWMsIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cbkJleW9uZCBqdXN0IHRoZSBtYWluIHZlcmlmaWVyIGZ1bmN0aW9uLCBJ4oCZbGwgbmVlZCB0byB0cmFjZSBpdHMgaW50ZXJhY3Rpb25zLiBXaG8ncyBjYWxsaW5nIGl0PyBXaGF0J3MgZmVlZGluZyBpdD8gV2hlcmUgYXJlIHRoZSBpbnB1dHMgY29taW5nIGZyb20sIGFuZCB3aGVyZSBhcmUgdGhlIHJlc3VsdHMgZ29pbmc/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgb24gdGhlIGV4cGVjdGVkIHVzYWdlIHBhdHRlcm5zIGFuZCB0aGUgdHlwaWNhbCBpbnB1dCBzY2VuYXJpb3MgdGhlIHZlcmlmaWVyIGhhcyB0byBoYW5kbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZXh0ZXJuYWwgY29tcG9uZW50cyBkZXBlbmQgb24gdGhlIG91dHB1dCBvZiB0aGUgdmVyaWZpZXIuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBjb2RlLlxuXG5JJ20gbG9va2luZyBmb3IgYSBzb2xpZCBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFdoYXQgaXMgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGxpa2U/IEFyZSB0aGVyZSBtdWx0aXBsZSBzdGFnZXM/IERvZXMgaXQgaGF2ZSBhbnkgb3B0aW1pemF0aW9uIHBhc3Nlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLCBmcm9tIGJvdGggcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHBvaW50cyBvZiB2aWV3PyBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHZlcmlmaWVycyBhcmUgb2Z0ZW4gY29tcGxleCwgYW5kIEknbGwgbmVlZCB0byBkZXZlbG9wIGEgZ29vZCwgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvZGUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ1LjI5NjM5MjI3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTU1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTU1OlxcdFxcdCovXFxuIDU1NjpcXHQgICAgICAgcmV0dXJuIHNwaSAtIG5yX3Nsb3RzICsgMSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHNwaSBcXHUwMDNjIGFsbG9jYXRlZF9zbG90cztcXG4gNTU3OlxcdH1cXG4gNTU4OlxcdFxcbiA1NTk6XFx0c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuIDU2MDpcXHRcXHRcXHRcXHQgICAgICAgICAgY29uc3QgY2hhciAqb2JqX2tpbmQsIGludCBucl9zbG90cylcXG4gNTYxOlxcdHtcXG4gNTYyOlxcdFxcdGludCBvZmYsIHNwaTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cXHUwMDNldmFyX29mZikpIHtcXG4gNTY1OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaGFzIHRvIGJlIGF0IGEgY29uc3RhbnQgb2Zmc2V0XFxcXG5cXFwiLCBvYmpfa2luZCk7XFxuIDU2NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTY3OlxcdFxcdH1cXG4gNTY4OlxcdFxcbiA1Njk6XFx0XFx0b2ZmID0gcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbiA1NzA6XFx0XFx0aWYgKG9mZiBcXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xcbiA1NzE6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXFxcblxcXCIsIG9ial9raW5kLCBvZmYpO1xcbiA1NzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU3MzpcXHRcXHR9XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxuIDU3NjpcXHRcXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuIDU3NzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCBwYXNzIGluICVzIGF0IGFuIG9mZnNldD0lZFxcXFxuXFxcIiwgb2JqX2tpbmQsIG9mZik7XFxuIDU3ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTc5OlxcdFxcdH1cXG4gNTgwOlxcdFxcbiA1ODE6XFx0XFx0aWYgKCFpc19zcGlfYm91bmRzX3ZhbGlkKGJwZl9mdW5jKGVudiwgcmVnKSwgc3BpLCBucl9zbG90cykpXFxuIDU4MjpcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gNTgzOlxcdFxcdHJldHVybiBzcGk7XFxuIDU4NDpcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdHN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4gNTg3OlxcdHtcXG4gNTg4OlxcdFxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiZHlucHRyXFxcIiwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XFxuIDU4OTpcXHR9XFxuIDU5MDpcXHRcXG4gNTkxOlxcdHN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG4gNTkyOlxcdHtcXG4gNTkzOlxcdFxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiaXRlclxcXCIsIG5yX3Nsb3RzKTtcXG4gNTk0OlxcdH1cXG4gNTk1OlxcdFxcbiA1OTY6XFx0c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDU5NzpcXHR7XFxuIDU5ODpcXHRcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImlycV9mbGFnXFxcIiwgMSk7XFxuIDU5OTpcXHR9XFxuIDYwMDpcXHRcXG4gNjAxOlxcdHN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxuIDYwMjpcXHR7XFxuIDYwMzpcXHRcXHRzd2l0Y2ggKGFyZ190eXBlIFxcdTAwMjYgRFlOUFRSX1RZUEVfRkxBR19NQVNLKSB7XFxuIDYwNDpcXHRcXHRjYXNlIERZTlBUUl9UWVBFX0xPQ0FMOlxcbiA2MDU6XFx0XFx0XFx0cmV0dXJuIEJQRl9EWU5QVFJfVFlQRV9MT0NBTDtcXG4gNjA2OlxcdFxcdGNhc2UgRFlOUFRSX1RZUEVfUklOR0JVRjpcXG4gNjA3OlxcdFxcdFxcdHJldHVybiBCUEZfRFlOUFRSX1RZUEVfUklOR0JVRjtcXG4gNjA4OlxcdFxcdGNhc2UgRFlOUFRSX1RZUEVfU0tCOlxcbiA2MDk6XFx0XFx0XFx0cmV0dXJuIEJQRl9EWU5QVFJfVFlQRV9TS0I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ1LjI5NzIwMTkzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODYwMjYyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBUaGlzIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB0aGUgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGZ1bmN0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gVGhlIEJQRiB2ZXJpZmllciBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLCB0b3VjaGluZyBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgQlBGIGl0c2VsZiwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBzeXNjYWxsIGhhbmRsaW5nLiBBbmQsIG9mIGNvdXJzZSwgdXNlcnNwYWNlIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggYGJwZihCUEZfUFJPR19MT0FELCAuLi4pYC4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aG9zZSBzdWJzeXN0ZW1zIGFuZCB0aGUgZXhwb3NlZCBpbnRlcmZhY2UsIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5IFdvcnRoRnV6emluZy5cblxuTmV4dCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIGFuZCBwb3NzaWJseSBgQ09ORklHX0JQRmAgdG9vLiBJ4oCZbGwgZG91YmxlLWNoZWNrIGBpbml0L0tjb25maWdgLCBvciBtYXliZSB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHJlcGxpY2F0aW5nIHRoZSBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ4LjE4MzIyOTk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjUwODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00MTM9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsc21fcHJvZ19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00MTUtXFxua2VybmVsL2JwZi9icGZfbHNtLmM6NDE2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGxzbV92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVxcdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02ND1zdGF0aWMgREVGSU5FX01VVEVYKHVwZGF0ZV9tdXRleCk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjgtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY5OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJwZl9zdHJ1Y3Rfb3BzX3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzAtfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NTk2ND1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNTk4MC1cXG5rZXJuZWwvYnBmL2J0Zi5jOjU5ODE6XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlcXVlc3RlZCB2ZXJib3NlIHZlcmlmaWVyIG91dHB1dFxcbmtlcm5lbC9icGYvYnRmLmMtNTk4Mi1cXHQgKiBhbmQgc3VwcGxpZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSB2ZXJpZmljYXRpb24gdHJhY2VcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTkyMz1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGNnX2Rldl9wcm9nX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkyNS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5MjY6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgY2dfZGV2X3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MjctXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBjZ3JvdXBfZGV2X2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI0Nzg9c3RhdGljIHUzMiBzeXNjdGxfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1NDEtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTQyOmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGNnX3N5c2N0bF92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQzLVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc3lzY3RsX2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTI3NTY9c3RhdGljIGludCBjZ19zb2Nrb3B0X2dldF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzY0LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjc2NTpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBjZ19zb2Nrb3B0X3ZlcmlmaWVyX29wcyA9IHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NjYtXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBjZ19zb2Nrb3B0X2Z1bmNfcHJvdG8sXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTc0Nj1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OC1cXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZ3MgPSBlbnYtXFx1MDAzZXN1YnByb2dfaW5mbztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0OTpcXHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyAqb3BzID0gZW52LVxcdTAwM2VvcHM7XFxua2VybmVsL2JwZi9maXh1cHMuYy03NTAtXFx0aW50IGksIGNudCwgc2l6ZSwgY3R4X2ZpZWxkX3NpemUsIHJldCwgZGVsdGEgPSAwLCBlcGlsb2d1ZV9jbnQgPSAwO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzUtLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNjogKiBpbnNpZGUgaXRzIG93biB2ZXJpZmllcl9vcHMtXFx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3LSAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY2MzA9c3lzY2FsbF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjQ2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2NDc6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX3N5c2NhbGxfdmVyaWZpZXJfb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NDgtXFx0LmdldF9mdW5jX3Byb3RvICA9IHN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz05OTI9X19icGZfa2Z1bmMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpicGZfaXRlcl90YXNrX3ZtYV9uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTAtXFx0LypcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEwMTE6XFx0ICogVGhlIHZlcmlmaWVyIG9ubHkgdHJ1c3RzIHZtX21tIGFuZCB2bV9maWxlIChzZWVcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEwMTItXFx0ICogQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwgaW4gdmVyaWZpZXIuYykuIFRha2UgYSByZWZlcmVuY2VcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3LS8qIGR1bW15IF9vcHMuIFRoZSB2ZXJpZmllciB3aWxsIG9wZXJhdGUgb24gdGFyZ2V0IHByb2dyYW0ncyBvcHMuICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYnBmX2V4dGVuc2lvbl92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTktfTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDA6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzICogY29uc3QgYnBmX3ZlcmlmaWVyX29wc1tdID0ge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MS0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSkgXFxcXFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjpcXHRbX2lkXSA9IFxcdTAwMjYgX25hbWUgIyMgX3ZlcmlmaWVyX29wcyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDMtI2RlZmluZSBCUEZfTUFQX1RZUEUoX2lkLCBfb3BzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyNzk9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzI5MC0gKiBGb3IgdHJhZGl0aW9uYWwgUFRSX1RPX01BUF9WQUxVRSBvciBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DLCB0aGUgdmVyaWZpZXJcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzI5MTogKiBjbGVhcnMgcmVnLVxcdTAwM2VpZCBhZnRlciB2YWx1ZV9vcl9udWxsLVxcdTAwM2V2YWx1ZSB0cmFuc2l0aW9uLCBzaW5jZSB0aGUgdmVyaWZpZXIgb25seVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjkyLSAqIGNhcmVzIGFib3V0IHRoZSByYW5nZSBvZiBhY2Nlc3MgdG8gdmFsaWQgbWFwIHZhbHVlIHBvaW50ZXIgYW5kIGRvZXNuJ3QgY2FyZVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NTYzPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzM3LVxcdFxcdFxcdFxcdGVudiwgXFxcIlRoaXMgb3BlcmF0aW9uIHN1YnRyYWN0cyBwb2ludGVyIHJlZ2lzdGVyIFIlZCBmcm9tIHNjYWxhciByZWdpc3RlciBSJWQuIFxcXCJcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ3Mzg6XFx0XFx0XFx0XFx0XFxcIlRoZSB2ZXJpZmllciBvbmx5IHRyYWNrcyBwb2ludGVyLW1pbnVzLXNjYWxhciBhcml0aG1ldGljIGZvciBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3MzktXFx0XFx0XFx0XFx0cHRyX3JlZ25vLCBkc3QpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Njg1PWJvb2wgYnBmX2dldF9jYWxsX3N1bW1hcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpjYWxsLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzUwLSAqXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzUxOiAqIC0gaWYgc28sIGFuZCBpZiB2ZXJpZmllciBvciBjdXJyZW50IEpJVCBpbmxpbmVzIHRoZSBjYWxsIHRvIHRoZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc1Mi0gKiAgIGJwZl9mYXN0Y2FsbCBmdW5jdGlvbiAoZS5nLiBhIGhlbHBlciBjYWxsKSwga2VybmVsIHJlbW92ZXMgdW5uZWNlc3NhcnlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczMj1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NDktXFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODUwOlxcdGVudi1cXHUwMDNlb3BzID0gc3Rfb3BzLVxcdTAwM2V2ZXJpZmllcl9vcHM7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODUxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwNDgzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTIyLVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDUyMzpcXHRcXHRlbnYtXFx1MDAzZW9wcyA9IGJwZl92ZXJpZmllcl9vcHNbdGd0X3Byb2ctXFx1MDAzZXR5cGVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDUyNC1cXHRcXHRwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9IHRndF9wcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTE1NT1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2NS1cXHQvKiBubyBwcm9ncmFtIGlzIHZhbGlkICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTY2OlxcdGlmIChBUlJBWV9TSVpFKGJwZl92ZXJpZmllcl9vcHMpID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTc3LVxcdGVudi1cXHUwMDNlcHJvZyA9ICpwcm9nO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE3ODpcXHRlbnYtXFx1MDAzZW9wcyA9IGJwZl92ZXJpZmllcl9vcHNbZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2V0eXBlXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNzktXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTg3OlxcdC8qIHVzZXIgY291bGQgaGF2ZSByZXF1ZXN0ZWQgdmVyYm9zZSB2ZXJpZmllciBvdXRwdXRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExODgtXFx0ICogYW5kIHN1cHBsaWVkIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmVyaWZpY2F0aW9uIHRyYWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjQ4LjI3NjQ4NDYzNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTU4NzEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgVmVyaWZpZXIncyBTUEkgQWNjZXNzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGJwZl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIEJQRiB2ZXJpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3RhY2ssIHNwZWNpZmljYWxseSBhcm91bmQgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLiBJIHNlZSB0aGF0IGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpcyBjYWxsZWQgYnkgdGhyZWUgb3RoZXIgZnVuY3Rpb25zOiBgZHlucHRyX2dldF9zcGlgLCBgaXRlcl9nZXRfc3BpYCwgYW5kIGBpcnFfZmxhZ19nZXRfc3BpYC5cblxuTm93IEkgbmVlZCB0byB0YWtlIGl0IGEgc3RlcCBmdXJ0aGVyOiBJIG5lZWQgdG8gdHJhY2UgKmJhY2t3YXJkcyogZnJvbSB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqY2FsbGluZyogdGhvc2UgdGhyZWUsIGFsb25nIHdpdGggYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgIGl0c2VsZi4gQnkgbWFwcGluZyBvdXQgdGhlIGNhbGwgZ3JhcGggdGhpcyB3YXksIEknbGwgYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IFNQSSAoc3RhdGUgcG9pbnRlciBpbmRleCkgdmFsdWVzIGFyZSBiZWluZyBhY2Nlc3NlZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHZlcmlmaWVyLiBJIG5lZWQgdG8ga25vdyB0aGUgb3JpZ2luIG9mIHRoZSBhY2Nlc3MuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEyLCJPdXRwdXRUb2tlbnMiOjYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjUwLjU3MjM1OTUxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTAyNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihkeW5wdHJfZ2V0X3NwaXxpdGVyX2dldF9zcGl8aXJxX2ZsYWdfZ2V0X3NwaXxzdGFja19zbG90X29ial9nZXRfc3BpKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU0NT1zdGF0aWMgYm9vbCBpc19zcGlfYm91bmRzX3ZhbGlkKHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGksIGludCBucl9zbG90cylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU1OTpzdGF0aWMgaW50IHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTYwLVxcdFxcdFxcdCAgICAgICAgICBjb25zdCBjaGFyICpvYmpfa2luZCwgaW50IG5yX3Nsb3RzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTg2OnN0YXRpYyBpbnQgZHlucHRyX2dldF9zcGkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTg3LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTg4OlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiZHlucHRyXFxcIiwgQlBGX0RZTlBUUl9OUl9TTE9UUyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4OS19XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5MC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkxOnN0YXRpYyBpbnQgaXRlcl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBucl9zbG90cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkzOlxcdHJldHVybiBzdGFja19zbG90X29ial9nZXRfc3BpKGVudiwgcmVnLCBcXFwiaXRlclxcXCIsIG5yX3Nsb3RzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk0LX1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTY6c3RhdGljIGludCBpcnFfZmxhZ19nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5Ny17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5ODpcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImlycV9mbGFnXFxcIiwgMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5OS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTpcXHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MC1cXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTM9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzU3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NTg6XFx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NTktXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODQ1PXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODUxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTI6XFx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTMtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODczPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg4Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg3OlxcdHNwaSA9IGR5bnB0cl9nZXRfc3BpKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODg4LVxcdGlmIChzcGkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMj1zdGF0aWMgZW51bSBicGZfZHlucHRyX3R5cGUgZHlucHRyX3JlZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MTA6XFx0c3BpID0gZHlucHRyX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTEtXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMzPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTQwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NDE6XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0Mi1cXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NzY9c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk4MS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTgyOlxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05ODMtXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwND1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDEzLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDE0OlxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDE1LVxcdGlmIChzcGkgPT0gLUVSQU5HRSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDMxPXN0YXRpYyBpbnQgaXNfaXRlcl9yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzc6XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzgtXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA2Nj1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdF9pcnFfZmxhZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNzY6XFx0c3BpID0gaXJxX2ZsYWdfZ2V0X3NwaShlbnYsIHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNzctXFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5OT1zdGF0aWMgaW50IHVubWFya19zdGFja19zbG90X2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNzpcXHRzcGkgPSBpcnFfZmxhZ19nZXRfc3BpKGVudiwgcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwOC1cXHRpZiAoc3BpIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY0PXN0YXRpYyBib29sIGlzX2lycV9mbGFnX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTczLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTc0OlxcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc1LVxcdGlmIChzcGkgPT0gLUVSQU5HRSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4PXN0YXRpYyBpbnQgaXNfaXJxX2ZsYWdfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk1OlxcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk2LVxcdGlmIChzcGkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc2MDQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY5Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY5NzpcXHRcXHRcXHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2OTgtXFx0XFx0XFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc0Mz1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4Mjk6XFx0XFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MzAtXFx0XFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxODQ9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIyMzgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMjM5OlxcdFxcdHNwaSA9IGlycV9mbGFnX2dldF9zcGkoZW52LCByZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjI0MC1cXHRcXHRpZiAoc3BpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6NTAuNjg4ODY5OTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NTkxNzMzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gU1BJIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgQlBGIGNvZGUsIGFuZCBpdCdzIHVzaW5nIGBicGZfZ2V0X3NwaWAuIE15IGZpcnN0IGluc3RpbmN0IGlzLCBsZXQncyBub3QganVzdCBhc3N1bWUgd2Uga25vdyB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmc7IGxldCdzIGRyaWxsIGRvd24gYW5kIGNvbmZpcm0gb3VyIHVuZGVyc3RhbmRpbmcuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfZ2V0X3NwaWAgcmlnaHQgYXdheS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIFNQSSBjb250ZXh0IHdpdGhpbiB0aGUgQlBGIGVudmlyb25tZW50LiBJdCdzIHRvbyBlYXN5IHRvIG1ha2UgYXNzdW1wdGlvbnMgaW4gdGhpcyBkb21haW4sIGFuZCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2Ugd2lsbCBlbnN1cmUgSSBkb24ndCBtaXNzIGFueSBzdWJ0bGV0aWVzIGluIGhvdyBTUEkgdmFsdWVzIGFyZSBoYW5kbGVkLiBHb3R0YSBrZWVwIHRoYXQgc2hhcnAsIGV4cGVydCdzIGVkZ2UsIHJpZ2h0PyBMZXQncyBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0Nzo1NC41NDgwNDc3MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTgxODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9nZXRfc3BpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcXHRcXHRcXHRcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ1LVxcdFxcdFxcdFxcdFxcdGl0ZXJfc3RhdGUgPSBcXHUwMDI2YnBmX2Z1bmMoZW52LCBpdGVyX3JlZyktXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU5PXN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc1OlxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDc6NTQuNjA1MjM0OTM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMjcwNjM2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgU291cmNlIG9mIGBicGZfZ2V0X3NwaWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2dldF9zcGlgLiBJdCdzIGEgQlBGIGhlbHBlciBmdW5jdGlvbiwgc28gaXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZSBzb21ld2hlcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2sgZG93biBpdHMgc291cmNlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIGZvciB0aGlzIOKAkyBgZ3JlcGAsIG1heWJlIGBjc2NvcGVgIG9yIGBjc2VhcmNoYCBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IHNwcmF3bGluZywgb3IgZXZlbiBqdXN0IGEgcXVpY2sgc2VhcmNoIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgd2l0aCBteSBlZGl0b3IuIEtub3dpbmcgdGhlIHR5cGljYWwgbmFtaW5nIGNvbnZlbnRpb25zLCBJIGNhbiB0cnkgYSBicm9hZCBzZWFyY2ggZmlyc3QgYW5kIHRoZW4gbmFycm93IGl0IGRvd24uIEknbGwgYmUgbG9va2luZyBmb3IgaGVhZGVyIGZpbGVzIHdoZXJlIGl0J3MgZGVjbGFyZWQsIHRoZW4gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZiwgd2hpY2ggd2lsbCBwcm9iYWJseSBpbnZvbHZlIHNvbWUgbWFjcm8gbWFnaWMgZ2l2ZW4gaG93IEJQRiBoZWxwZXJzIGFyZSB1c3VhbGx5IHNldCB1cC4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaGVscGVyIGFjdHVhbGx5ICpkb2VzKiB1bmRlciB0aGUgaG9vZCDigJMgd2hhdCByZWdpc3RlcnMgb3IgbWVtb3J5IGl0IGFjY2Vzc2VzLCBhbnkgY29uc3RyYWludHMgb3Igc2lkZSBlZmZlY3RzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2ssIGlmIGF0IGFsbC4gSXQgbWlnaHQgaW52b2x2ZSBsb29raW5nIGF0IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIGBicGZfcHJvZ19pbmZvYCBvciB3aGF0ZXZlciB0aGUgbmV0d29ya2luZyBzdGFjayBpcyB1c2luZyBhdCB0aGUgdGltZS4gSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBhbnkgcG90ZW50aWFsIGNoYW5nZXMgb3IgYnVnIGZpeGVzIHJlbGV2YW50IHRvIHRoaXMgaGVscGVyLCB0byBhdm9pZCBnZXR0aW5nIHRyaXBwZWQgdXAgYnkgb2xkIGluZm9ybWF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGl0cyByZXR1cm4gdmFsdWVzIGFuZCB3aGF0IHRoZXkgaW5kaWNhdGUuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBob3cgaXQgc2hvdWxkIGJlIGNvcnJlY3RseSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ3OjU5LjczMjMwMTE3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMDk2OTc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZ2V0X3NwaVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTIzMD1pbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMjM0OnN0YXRpYyBpbmxpbmUgaW50IGJwZl9nZXRfc3BpKHMzMiBvZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMjM1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcXHRcXHRcXHRcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ1LVxcdFxcdFxcdFxcdFxcdGl0ZXJfc3RhdGUgPSBcXHUwMDI2YnBmX2Z1bmMoZW52LCBpdGVyX3JlZyktXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU5PXN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc1OlxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYz0zND1pbnQgY3JlYXRlX2FuZF9kZXN0cm95KHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmM6NTU6LyogZnArMCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMtNTYtU0VDKFxcXCI/cmF3X3RwXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MDIuMjMzMjc2MzM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2ODQ0OTU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgaG93IHRoZSBCUEYgdmVyaWZpZXIgd29ya3MsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicGZfZ2V0X3NwaWAgaGVscGVyLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIHN0YXJ0IHdpdGggdGhlIGhlYWRlciBmaWxlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIGhvcGVmdWxseSBzb21lIHJlbGV2YW50IGNvbW1lbnRzIGFib3V0IGhvdyB0aGlzIGBicGZfZ2V0X3NwaWAgaGVscGVyIGlzIG1lYW50IHRvIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgdmVyaWZpZXIgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuIEknbSBob3BpbmcgdGhpcyBoZWFkZXIgZmlsZSBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjA3LjkxNzc3NjAwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjMwOlxcdGludCBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4xMjMxOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhcnRpbmdfc3RhdGUsXFxuMTIzMjpcXHRcXHRcXHRcXHQgICAgIGludCByZWdubywgYm9vbCAqY2hhbmdlZCk7XFxuMTIzMzpcXHRcXG4xMjM0OlxcdHN0YXRpYyBpbmxpbmUgaW50IGJwZl9nZXRfc3BpKHMzMiBvZmYpXFxuMTIzNTpcXHR7XFxuMTIzNjpcXHRcXHRyZXR1cm4gKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRTtcXG4xMjM3OlxcdH1cXG4xMjM4OlxcdFxcbjEyMzk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmJwZl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMTI0MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbjEyNDE6XFx0e1xcbjEyNDI6XFx0XFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuMTI0MzpcXHRcXG4xMjQ0OlxcdFxcdHJldHVybiBjdXItXFx1MDAzZWZyYW1lW3JlZy1cXHUwMDNlZnJhbWVub107XFxuMTI0NTpcXHR9XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdC8qIFJldHVybiBJUCBmb3IgYSBnaXZlbiBmcmFtZSBpbiBhIGNhbGwgc3RhY2sgKi9cXG4xMjQ4OlxcdHN0YXRpYyBpbmxpbmUgdTMyIGJwZl9mcmFtZV9pbnNuX2lkeChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCwgdTMyIGZyYW1lKVxcbjEyNDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODowNy45MTc5MzE4NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg5MjI0Nzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBCUEYgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSd2ZSBiZWVuIHRoaW5raW5nIGFib3V0LiAgSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IGBicGZfZ2V0X3NwaWAgY2FsY3VsYXRlcyB0aGUgc3RhY2sgcG9pbnRlciBpbmRleCAoU1BJKSBhbmQgSSB0aGluayBJJ3ZlIGZvdW5kIHNvbWV0aGluZy4gSXQgc2VlbXMgdGhhdCBvcmlnaW5hbGx5IHRoZSBjYWxjdWxhdGlvbiBgKC1vZmYgLSAxKSAvIEJQRl9SRUdfU0laRWAgd291bGQgbWFwIGFuIG9mZnNldCBvZiAwIHRvIFNQSSAwLiBUaGUgaW50ZWdlciBkaXZpc2lvbiBpbiBDOTkgdHJ1bmNhdGVzIHRvd2FyZCB6ZXJvLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBhbGlhc2luZy4gU3BlY2lmaWNhbGx5LCBhbiBvZmZzZXQgb2YgMCB3b3VsZCBnaXZlIGFuIFNQSSBvZiAwLCBlZmZlY3RpdmVseSBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIHN0YWNrIHNsb3QgYXQgaW5kZXggMCB2aWEgYW4gaW52YWxpZCBvZmZzZXQuIFRoaXMgaXMgY29uY2VybmluZywgb2YgY291cnNlLlxuXG5UaGUgZml4LCBgaWYgKG9mZiBcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKWAsIGluIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBsb29rcyBsaWtlIGFuIGF0dGVtcHQgdG8gcHJldmVudCB0aGlzIGFuZCBvdGhlciBpbnZhbGlkIGFjY2Vzc2VzLiAgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgY29tcGxldGVseSBtaXRpZ2F0ZXMgdGhlIGlzc3VlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24uIGBzdGFja19zbG90X29ial9nZXRfc3BpYCBpcyB0aGUga2V5IGZ1bmN0aW9uLCBhbmQgYXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGl0IGltcGxpZXMgaXQncyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gIEknbSB0cmFja2luZyBpdHMgbm9uLXN0YXRpYyBjYWxsZXJzIG5vdzogYGR5bnB0cl9nZXRfc3BpYCwgYGl0ZXJfZ2V0X3NwaWAsIGBpcnFfZmxhZ19nZXRfc3BpYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXRlcl9hcmdgLCBgcHJvY2Vzc19pcnFfZmxhZ2AsIGFuZCBgYnBmX2NoZWNrYCBhcmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLiAgSSB3YW50IHRvIGtub3cgaWYgdGhlc2UgYXJlIGluIGFueSB3YXkgYnlwYXNzYWJsZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgaXMgaW5kZWVkIHN0YXRpYy4gIEknbSBsaXN0aW5nIHRoZW0gb3V0IHRvIGNoZWNrIGZvciBpbmxpbmluZyBvciBvdGhlciBzeW1ib2wgdmlzaWJpbGl0eTogYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLCBgcHJvY2Vzc19pdGVyX2FyZ2AsIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXJxX2ZsYWdgLCBgYnBmX2NoZWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIGluIHRoZSBjb2RlIHRoZSBpc3N1ZSBtaWdodCBwZXJzaXN0IG9yIGJlIGV4cGxvaXRhYmxlLlxuXG5Db25maWd1cmF0aW9uLXdpc2UsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsLiBgQlBGX1NZU0NBTExgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGVuYWJsZXMgdGhlIHZlcmlmaWVyIGFuZCB0aGUgQlBGIHN5c2NhbGwgaXRzZWxmLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBjb250cm9sbGluZyBmYWN0b3IuXG5cblNvLCB0byBzdW1tYXJpemUgbXkgZmluZGluZ3MgYW5kIGZvY3VzOlxuXG4xLiAgVGhpcyB2dWxuZXJhYmlsaXR5IGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgaXMgYSBmbGF3LlxuMi4gIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cbjMuICBNeSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZTogYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGlgLCBgcHJvY2Vzc19pdGVyX2FyZ2AsIGBwcm9jZXNzX2R5bnB0cl9mdW5jYCwgYHByb2Nlc3NfaXJxX2ZsYWdgLCBhbmQgYGJwZl9jaGVja2AuXG40LiAgTXkgcmVhc29uaW5nIGlzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZmxhdy5cblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB0ZXN0cyBhbHJlYWR5IG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzkyLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjE1LjgxMDE4MzI1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDU1MjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFja19zbG90X29ial9nZXRfc3BpXCIsXG4gICAgXCJwcm9jZXNzX2l0ZXJfYXJnXCIsXG4gICAgXCJwcm9jZXNzX2R5bnB0cl9mdW5jXCIsXG4gICAgXCJwcm9jZXNzX2lycV9mbGFnXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFja19zbG90X29ial9nZXRfc3BpXCIsXG4gICAgXCJwcm9jZXNzX2l0ZXJfYXJnXCIsXG4gICAgXCJwcm9jZXNzX2R5bnB0cl9mdW5jXCIsXG4gICAgXCJwcm9jZXNzX2lycV9mbGFnXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKSB0byByZWplY3Qgbm9uLW5lZ2F0aXZlIHN0YWNrIG9mZnNldHMgKG9mZiBcXHUwMDNlPSAwKSwgcHJldmVudGluZyBvZmZzZXQgMCBmcm9tIGVycm9uZW91c2x5IGFsaWFzaW5nIHRvIHN0YWNrIHNsb3QgaW5kZXggMC4gVGhpcyByZWFjaGFibGUgdmVyaWZpZXIgdmFsaWRhdGlvbiBsb2dpYyBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCAoQlBGX1BST0dfTE9BRCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjE1Ljk2NDc0NjQ4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxOTkyODg0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODoxNS45NjU1ODE4NjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTE5ODQ0NzM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApIHRvIHJlamVjdCBub24tbmVnYXRpdmUgb2Zmc2V0cyAoYG9mZiBcXHUwMDNlPSAwYCkgZm9yIHN0YWNrLWFsbG9jYXRlZCBvYmplY3RzIHN1Y2ggYXMgaXRlcmF0b3JzLCBkeW5wdHJzLCBhbmQgaXJxIGZsYWdzLiBQcmV2aW91c2x5LCBwYXNzaW5nIG9mZnNldCAwIChpLmUuIGByMTBgIC8gYGZwKzBgKSByZXN1bHRlZCBpbiBgYnBmX2dldF9zcGkoMClgIGV2YWx1YXRpbmcgdG8gYCgtMCAtIDEpIC8gOCA9IDBgIGR1ZSB0byBpbnRlZ2VyIHRydW5jYXRpb24sIGVycm9uZW91c2x5IGFsaWFzaW5nIG9mZnNldCAwIHRvIHN0YWNrIHNsb3QgaW5kZXggMCAoYGZwLThgKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJiOWY0ZmYwYWE1ZTY2M2JlY2FhMzMyZTVkM2Q5Y2M5ZGY2YTAyNTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo0NzoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMWIwYjFmYjYyODc4Ni4uZWZiYjQ0Njk5ODg0OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zXG4gXHR9XG4gXG4gXHRvZmYgPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbi1cdGlmIChvZmYgJSBCUEZfUkVHX1NJWkUpIHtcbitcdGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXG5cIiwgb2JqX2tpbmQsIG9mZik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuaW5kZXggNjQ2MDI2NDMwZTliNS4uZTViYjlmZTZkNWU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3N0YXRlX3NhZmV0eS5jXG5AQCAtNTIsNiArNTIsMjggQEAgaW50IGNyZWF0ZV9hbmRfZGVzdHJveSh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogZnArMCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHBhc3MgaW4gaXRlciBhdCBhbiBvZmZzZXQ9MFwiKVxuK2ludCBkZXN0cm95X2ZwMF9mYWlsKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtIGl0ZXI7XG4rXG4rXHRhc20gdm9sYXRpbGUgKFwicjEgPSAlW2l0ZXJdO1wiXG4rXHRcdFwicjIgPSAwO1wiXG4rXHRcdFwicjMgPSAxMDAwO1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1wiXG4rXHRcdC8qIHIxMCBpcyBmcCswLCBvbmUgYnl0ZSBhYm92ZSB0aGUgdG9wIG9mIHRoZSBCUEYgc3RhY2sgKi9cbitcdFx0XCJyMSA9IHIxMDtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tX3B0cihpdGVyKSwgSVRFUl9IRUxQRVJTXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vblxuK1x0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/cmF3X3RwXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MVwiKVxuIGludCBjcmVhdGVfYW5kX2ZvcmdldF90b19kZXN0cm95X2ZhaWwodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MTUuOTY1NTgzNTk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMDcyMDA5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBUaGlzIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLiBMZXQncyBkaWcgaW4uIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpbiBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgdGhpczogYSBzaW1wbGUgY2hlY2sgb24gdGhlIG9mZnNldC4gUHJldmlvdXNseSwgdGhlIGNvbmRpdGlvbiB3YXMganVzdCBjaGVja2luZyBmb3IgdGhlIG1vZHVsbzogYGlmIChvZmYgJSBCUEZfUkVHX1NJWkUpYC4gTm93IGl0IGluY2x1ZGVzIGEgbm9uLW5lZ2F0aXZlIG9mZnNldCBjaGVjazogYGlmIChvZmYgXHUwMDNlPSAwIHx8IG9mZiAlIEJQRl9SRUdfU0laRSlgLiBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGlmIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBjaGVjayBpcyBndWFyZGluZyBhZ2FpbnN0IGludmFsaWQgb2Zmc2V0cywgd2hpY2ggaXMgZ29vZC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgXHUwMDNlPSAwYCBjb25kaXRpb24gc2VlbXMgdG8gYmUgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciBhZGRlZCBzZWN1cml0eS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbGxvd2luZyBhIG5lZ2F0aXZlIG9mZnNldCBoZXJlLiBJdCBtaWdodCBvcGVuIGEgd2luZG93IGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIGNoZWNrIGFscmVhZHkgY2F0Y2hlcyBub24tYWxpZ25lZCBvZmZzZXRzOyB0aGlzIG5ldyBjb25zdHJhaW50IHNlZW1zIGRlc2lnbmVkIHRvIHByZXZlbnQgbmVnYXRpdmUgdmFsdWVzLlxuXG5JJ20gdGhpbmtpbmcsIHRoaXMgY2hhbmdlIGlzIHByb2JhYmx5IGFpbWVkIGF0IHN0cmVuZ3RoZW5pbmcgdGhlIGJvdW5kcyBjaGVjayBhbmQgcHJldmVudGluZyBzb21lIGtpbmQgb2YgcG90ZW50aWFsIGV4cGxvaXQuIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIHdoZXJlIGFyYml0cmFyeSBieXRlY29kZSBleGVjdXRpb24gaXMgYSBjb25jZXJuLCBhbnkgaW1wcm92ZW1lbnQgdG8gbWVtb3J5IHNhZmV0eSBpcyBwcm9iYWJseSBpbXBvcnRhbnQuIE15IGd1dCB0ZWxscyBtZSB0aGlzICpjb3VsZCogYmUgYSBzcG90IHdoZXJlIEtNU0FOIGZ1enppbmcgd291bGQgYmUgdmFsdWFibGUsIGVzcGVjaWFsbHkgaWYgbmVnYXRpdmUgb2Zmc2V0cyB3ZXJlIHByZXZpb3VzbHkgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MjIuMjcyNzg3NjI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHRcXHQqIHdpdGhpbiBbMCwgYWxsb2NhdGVkX3N0YWNrKS5cXG4gNTUxOlxcdFxcdCpcXG4gNTUyOlxcdFxcdCogUGxlYXNlIG5vdGUgdGhhdCB0aGUgc3BpIGdyb3dzIGRvd253YXJkcy4gRm9yIGV4YW1wbGUsIGEgZHlucHRyXFxuIDU1MzpcXHRcXHQqIHRha2VzIHRoZSBzaXplIG9mIHR3byBzdGFjayBzbG90czsgdGhlIGZpcnN0IHNsb3Qgd2lsbCBiZSBhdFxcbiA1NTQ6XFx0XFx0KiBzcGkgYW5kIHRoZSBzZWNvbmQgc2xvdCB3aWxsIGJlIGF0IHNwaSAtIDEuXFxuIDU1NTpcXHRcXHQqL1xcbiA1NTY6XFx0ICAgICAgIHJldHVybiBzcGkgLSBucl9zbG90cyArIDEgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYyBhbGxvY2F0ZWRfc2xvdHM7XFxuIDU1NzpcXHR9XFxuIDU1ODpcXHRcXG4gNTU5OlxcdHN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbiA1NjA6XFx0XFx0XFx0XFx0ICAgICAgICAgIGNvbnN0IGNoYXIgKm9ial9raW5kLCBpbnQgbnJfc2xvdHMpXFxuIDU2MTpcXHR7XFxuIDU2MjpcXHRcXHRpbnQgb2ZmLCBzcGk7XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdGlmICghdG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpKSB7XFxuIDU2NTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGhhcyB0byBiZSBhdCBhIGNvbnN0YW50IG9mZnNldFxcXFxuXFxcIiwgb2JqX2tpbmQpO1xcbiA1NjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU2NzpcXHRcXHR9XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdG9mZiA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4gNTcwOlxcdFxcdGlmIChvZmYgXFx1MDAzZT0gMCB8fCBvZmYgJSBCUEZfUkVHX1NJWkUpIHtcXG4gNTcxOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2Fubm90IHBhc3MgaW4gJXMgYXQgYW4gb2Zmc2V0PSVkXFxcXG5cXFwiLCBvYmpfa2luZCwgb2ZmKTtcXG4gNTcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NzM6XFx0XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShvZmYpO1xcbiA1NzY6XFx0XFx0aWYgKHNwaSArIDEgXFx1MDAzYyBucl9zbG90cykge1xcbiA1Nzc6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3QgcGFzcyBpbiAlcyBhdCBhbiBvZmZzZXQ9JWRcXFxcblxcXCIsIG9ial9raW5kLCBvZmYpO1xcbiA1Nzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU3OTpcXHRcXHR9XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdGlmICghaXNfc3BpX2JvdW5kc192YWxpZChicGZfZnVuYyhlbnYsIHJlZyksIHNwaSwgbnJfc2xvdHMpKVxcbiA1ODI6XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDU4MzpcXHRcXHRyZXR1cm4gc3BpO1xcbiA1ODQ6XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRzdGF0aWMgaW50IGR5bnB0cl9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIDU4NzpcXHR7XFxuIDU4ODpcXHRcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcImR5bnB0clxcXCIsIEJQRl9EWU5QVFJfTlJfU0xPVFMpO1xcbiA1ODk6XFx0fVxcbiA1OTA6XFx0XFxuIDU5MTpcXHRzdGF0aWMgaW50IGl0ZXJfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXFxuIDU5MjpcXHR7XFxuIDU5MzpcXHRcXHRyZXR1cm4gc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShlbnYsIHJlZywgXFxcIml0ZXJcXFwiLCBucl9zbG90cyk7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdHN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiA1OTc6XFx0e1xcbiA1OTg6XFx0XFx0cmV0dXJuIHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoZW52LCByZWcsIFxcXCJpcnFfZmxhZ1xcXCIsIDEpO1xcbiA1OTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODoyMi4yNzM5NDkyNThaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk2MjU5NDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnBmX2dldF9zcGlgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX2dldF9zcGlgLi4uIHdoYXQncyB0aGUgZGVhbCB3aXRoIHRoYXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBmdW5jdGlvbi4gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHJldHJpZXZpbmcgU2VydmljZSBQcmluY2lwYWwgSWRlbnRpZmllciBkYXRhIHdpdGhpbiBhIEJQRiBjb250ZXh0LCBsaWtlbHkgZm9yIHNlY3VyaXR5IG9yIHBvbGljeSBlbmZvcmNlbWVudCBwdXJwb3Nlcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiwgdXNlciBhdXRoZW50aWNhdGlvbiwgb3IgZXZlbiBpbnRydXNpb24gZGV0ZWN0aW9uLiBEZXBlbmRpbmcgb24gd2hlcmUgaXQncyB1c2VkIHdpdGhpbiB0aGUgQlBGIHByb2dyYW0sIGBicGZfZ2V0X3NwaWAgaXMgbGlrZWx5IGVpdGhlcjpcblxuKiAgIFByb3ZpZGluZyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIHNlcnZpY2UgaW52b2x2ZWQgaW4gbmV0d29yayBjb21tdW5pY2F0aW9uLCBwZXJoYXBzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0cmFmZmljIGFsaWducyB3aXRoIGFuIGVzdGFibGlzaGVkIFNlcnZpY2UgTGV2ZWwgT2JqZWN0aXZlIChTTE8pLlxuKiAgIEVuYWJsaW5nIHRoZSBlbmZvcmNlbWVudCBvZiBsZWFzdC1wcml2aWxlZ2UgcHJpbmNpcGxlcyBieSByZXN0cmljdGluZyB0aGUgcmVzb3VyY2VzIGFjY2Vzc2libGUgdG8gYSBnaXZlbiBzZXJ2aWNlIG9yIHByb2Nlc3MgYmFzZWQgb24gaXRzIFNQSS5cbiogICBBbGxvd2luZyBmb3IgZmluZS1ncmFpbmVkIGFjY2VzcyBjb250cm9sIGluIGEgY29udGFpbmVyaXplZCBlbnZpcm9ubWVudCwgb3IsXG4qICAgU3VwcG9ydGluZyBzb21lIGFzcGVjdCBvZiB6ZXJvLXRydXN0IG5ldHdvcmsgYXJjaGl0ZWN0dXJlcywgYnkgbGlua2luZyBjb21tdW5pY2F0aW9ucyB0byBhIHNwZWNpZmljLCBhdXRoZW50aWNhdGVkIGlkZW50aXR5LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZpZWxkcyB0aGUgZnVuY3Rpb24gZXhwb3NlcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IHJldHJpZXZlcyB0aGUgU1BJLiBJcyBpdCBsZXZlcmFnaW5nIGtlcm5lbC1sZXZlbCBtZXRhZGF0YT8gRG9lcyBpdCByZWx5IG9uIHNwZWNpZmljIHBhY2tldCBoZWFkZXJzIG9yIGFwcGxpY2F0aW9uIHByb3RvY29scz8gVGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUga2V5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MjYuMjM2NTQ3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1NDY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2dldF9zcGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM2PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDMtXFx0XFx0XFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzQ0OlxcdFxcdFxcdFxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGl0ZXJfcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlKTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNDUtXFx0XFx0XFx0XFx0XFx0aXRlcl9zdGF0ZSA9IFxcdTAwMjZicGZfZnVuYyhlbnYsIGl0ZXJfcmVnKS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NTk9c3RhdGljIGludCBzdGFja19zbG90X29ial9nZXRfc3BpKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzU6XFx0c3BpID0gYnBmX2dldF9zcGkob2ZmKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTc2LVxcdGlmIChzcGkgKyAxIFxcdTAwM2MgbnJfc2xvdHMpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjU5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM2ODg6XFx0XFx0c3BpID0gYnBmX2dldF9zcGkoaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2ODktXFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODoyNi4yOTcxMDE1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg0OTc0NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9nZXRfc3BpYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfZ2V0X3NwaWAgZnVuY3Rpb24uIFRoZSBuYW1lIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHN1Z2dlc3RpbmcgaXQncyByZWxhdGVkIHRvIHJldHJpZXZpbmcgc29tZSBTZXJ2aWNlIFByb3ZpZGVyIEludGVyZmFjZSBkYXRhIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0cyBnbyB0byBpdHMgcG90ZW50aWFsIHJvbGUgaW4gdHJhY2luZyBuZXR3b3JrIGFjdGl2aXR5LCBwZXJoYXBzIGluIGNvbmp1bmN0aW9uIHdpdGggZUJQRiBwcm9iZXMgb24gc29ja2V0cyBvciBvdGhlciBuZXR3b3JrLXJlbGF0ZWQgZnVuY3Rpb25zLiBJJ20gd29uZGVyaW5nIGlmIGl0J3MgcmV0dXJuaW5nIFNQSSBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBhIHNvY2tldCwgb3IgbWF5YmUgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbCBhYm91dCB0aGUgc3lzdGVtLiBJIGFsc28gY29uc2lkZXIgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB0eXBpY2FsbHkgdXNlZOKAlGlzIGl0IHByaW1hcmlseSBmb3Igc2VjdXJpdHkgcHVycG9zZXMsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgY29kZSBvciBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIHVzZWZ1bCB0byBhc2NlcnRhaW4gdGhlIHByZWNpc2UgaW5wdXRzIGl0IHRha2VzIGFuZCB3aGF0IGl0IGFjdHVhbGx5IG91dHB1dHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgZUJQRiBwcm9ncmFtIGRlc2lnbi4gSeKAmW0gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQncyBhbiBleHBlbnNpdmUgZnVuY3Rpb24gdG8gY2FsbCwgYW5kIHdoYXQgaW1wYWN0IHRoYXQgbWlnaHQgaGF2ZSBvbiBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjQ4OjI4LjY4MjA3ODI5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5ODIyNTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZ2V0X3NwaVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTIzMD1pbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEyMzMtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMjM0OnN0YXRpYyBpbmxpbmUgaW50IGJwZl9nZXRfc3BpKHMzMiBvZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMjM1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzNj1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM0NDpcXHRcXHRcXHRcXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpdGVyX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ1LVxcdFxcdFxcdFxcdFxcdGl0ZXJfc3RhdGUgPSBcXHUwMDI2YnBmX2Z1bmMoZW52LCBpdGVyX3JlZyktXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU5PXN0YXRpYyBpbnQgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc1OlxcdHNwaSA9IGJwZl9nZXRfc3BpKG9mZik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3Ni1cXHRpZiAoc3BpICsgMSBcXHUwMDNjIG5yX3Nsb3RzKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzY1OT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNjg4OlxcdFxcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNjg5LVxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYz0zND1pbnQgY3JlYXRlX2FuZF9kZXN0cm95KHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc19zdGF0ZV9zYWZldHkuYy01NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmM6NTU6LyogZnArMCBpcyBub3QgYSBzdGFjayBzbG90LiBicGZfZ2V0X3NwaSgwKSB1c2VkIHRvIGFsaWFzIHNwaSAwIChmcC04KS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfc3RhdGVfc2FmZXR5LmMtNTYtU0VDKFxcXCI/cmF3X3RwXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MzEuMjgwMzA3ODQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDkxMzI4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcidzIFNQSSBSZXRyaWV2YWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGJwZl9nZXRfc3BpYC4gTGV0J3MgcHVsbCB1cCB0aGUgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgIGhlYWRlciBmaWxlLiBNeSBpbnRlcmVzdCBpcyBwaXF1ZWQg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlIHJldHJpZXZhbCBvZiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKFNQSSkgdmFsdWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSBpbnRlcnByZXRpbmcgYW5kIHZhbGlkYXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgaW50ZXJhY3Qgd2l0aCBzZWN1cml0eSBjb250ZXh0cy4gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pc21zIGZvciBleHRyYWN0aW5nIHRoZXNlIFNQSSB2YWx1ZXMsIGxpa2VseSBmcm9tIG5ldHdvcmsgaGVhZGVycyBvciBvdGhlciBzZWN1cml0eS1yZWxhdGVkIG1ldGFkYXRhLiBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhlIHZhbGlkaXR5IGFuZCBzYWZldHkgb2YgdGhlc2UgZXh0cmFjdGVkIHZhbHVlcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW50cm9kdWNlZCBieSB1bnRydXN0ZWQgQlBGIGNvZGUuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBib3VuZHMgY2hlY2tpbmcsIGVycm9yIGhhbmRsaW5nLCBhbmQgc2VjdXJpdHkgY2hlY2tzIHBlcmZvcm1lZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGJ1aWxkaW5nIHJvYnVzdCBhbmQgc2VjdXJlIEJQRiBhcHBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo0ODozNC4wODk0NDI5MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuMTIzMTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxcbjEyMzI6XFx0XFx0XFx0XFx0ICAgICBpbnQgcmVnbm8sIGJvb2wgKmNoYW5nZWQpO1xcbjEyMzM6XFx0XFxuMTIzNDpcXHRzdGF0aWMgaW5saW5lIGludCBicGZfZ2V0X3NwaShzMzIgb2ZmKVxcbjEyMzU6XFx0e1xcbjEyMzY6XFx0XFx0cmV0dXJuICgtb2ZmIC0gMSkgLyBCUEZfUkVHX1NJWkU7XFxuMTIzNzpcXHR9XFxuMTIzODpcXHRcXG4xMjM5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpicGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjEyNDA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4xMjQxOlxcdHtcXG4xMjQyOlxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1ciA9IGVudi1cXHUwMDNlY3VyX3N0YXRlO1xcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRyZXR1cm4gY3VyLVxcdTAwM2VmcmFtZVtyZWctXFx1MDAzZWZyYW1lbm9dO1xcbjEyNDU6XFx0fVxcbjEyNDY6XFx0XFxuMTI0NzpcXHQvKiBSZXR1cm4gSVAgZm9yIGEgZ2l2ZW4gZnJhbWUgaW4gYSBjYWxsIHN0YWNrICovXFxuMTI0ODpcXHRzdGF0aWMgaW5saW5lIHUzMiBicGZfZnJhbWVfaW5zbl9pZHgoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QsIHUzMiBmcmFtZSlcXG4xMjQ5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6MzQuMDg5NTgzNDc1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMDc0MzkzMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQlBGIFZlcmlmaWVyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgd2FzIGxvb2tpbmcgYXQgdGhlIGBicGZfZ2V0X3NwaShzMzIgb2ZmKWAgZnVuY3Rpb24sIGFuZCB0aGUgd2F5IGl0IGhhbmRsZXMgb2Zmc2V0IGNhbGN1bGF0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbGluZSBgcmV0dXJuICgtb2ZmIC0gMSkgLyBCUEZfUkVHX1NJWkU7YCBjYXVnaHQgbXkgYXR0ZW50aW9uLiBXaGVuIGBvZmZgIGlzIHplcm8gKGxpa2Ugd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYHIxMCA9IGZwICsgMGApLCB0aGUgY2FsY3VsYXRpb24gZ2l2ZXMgdXMgYCgtMCAtIDEpIC8gOCA9IC0xIC8gOCA9IDBgLiBUaGF0J3MgZHVlIHRvIHRoZSBpbnRlZ2VyIGRpdmlzaW9uIHRydW5jYXRpb24uXG5cblRoZSBzdXJwcmlzaW5nIHBhcnQ/IGBicGZfZ2V0X3NwaSgwKWAgYWN0dWFsbHkgcmV0dXJucyBgMGAsIHdoaWNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzdGFjayBtYXAgY29ycmVzcG9uZHMgdG8gYGZwIC0gOGAuIFRoYXQgbWVhbnMgYW4gb2Zmc2V0IG9mIGAwYCwgd2hpY2gsIGluIHRoaXMgY2FzZSwgd291bGQgYmUgb3V0c2lkZSBvZiB0aGUgc3RhY2sgYW5kIG9uZSBieXRlIGFib3ZlIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpcyBiZWluZyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZCBhcyBgZnAgLSA4YCAoc3RhY2sgc2xvdCAwKS5cblxuVGhlIHByb2JsZW0sIGl0IHNlZW1zLCBsaWVzIGluIHRoZSBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaWAgZnVuY3Rpb24sIHdoaWNoIG9ubHkgY2hlY2tlZCBgaWYgKG9mZiAlIEJQRl9SRUdfU0laRSlgLiBTaW5jZSBgMCAlIDhgIGlzIHplcm8sIHRoZSBjaGVjayBpbmNvcnJlY3RseSBhY2NlcHRzIGBvZmYgPSAwYC4gVGhpcyBhbGlhc2luZyBidWcgYWxsb3dzIGZvciB0aGUgbWFuaXB1bGF0aW9uIG9yIGRlc3RydWN0aW9uIG9mIHN0YWNrIHNsb3QgMCB3aGVuIGEgcG9zaXRpdmUgb3IgemVybyBvZmZzZXQgaXMgcHJvdmlkZWQsIGVzc2VudGlhbGx5IGdpdmluZyB1cyBhY2Nlc3MgdG8gc29tZXRoaW5nIHdlIHNob3VsZG4ndCBoYXZlLlxuXG5UaGUgZml4PyBTaW1wbGUg4oCTIHVwZGF0ZSB0aGUgY29uZGl0aW9uIGluIGBzdGFja19zbG90X29ial9nZXRfc3BpYCB0byBgaWYgKG9mZiBcdTAwM2U9IDAgfHwgb2ZmICUgQlBGX1JFR19TSVpFKWAuIFRoaXMgd2lsbCBwcmV2ZW50IGFueSBub24tbmVnYXRpdmUgb2Zmc2V0LCBpbmNsdWRpbmcgemVybywgZnJvbSBiZWluZyBjb25zaWRlcmVkIGEgdmFsaWQgc3RhY2sgaW5kZXguXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBhIEtNU0FOIGlzc3VlPyBOby4gVGhpcyBpcyBhIHZlcmlmaWVyIGxvZ2ljIGZpeCwgYSBib3VuZHMgY2hlY2sgdG8gcHJldmVudCBpbnZhbGlkIHN0YWNrIHNsb3QgaW5kZXhpbmcuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgdGlnaHRlbmluZyB2ZXJpZmljYXRpb24sIG5vdCBpbnRyb2R1Y2luZyBhIHJpc2suIE5vIGtlcm5lbCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBiZWluZyBoYW5kbGVkLCBhbmQgbm8gbmV3IGFsbG9jYXRpb24gaXNzdWVzIGhhdmUgZW1lcmdlZC5cblxuSSd2ZSByZXZpZXdlZCB0aGUgS01TQU4gY3JpdGVyaWE6IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgaXQgZG9lc24ndCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBpdCdzIHNpbXBseSB0aWdodGVuaW5nIHRoZSBib3VuZHMgY2hlY2suIFRoZSByaXNrcyBhcmUgdGhvc2UgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChvdXQtb2YtYm91bmRzLCBvdmVyZmxvd3MsIG51bGwgZGVyZWZlcmVuY2VzLCBldGMuKS4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5JJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBUaGlzIGZpeCBpcyBwcmV2ZW50aW5nIGFuIGlsbGVnYWwgbWVtb3J5IGFjY2Vzcywgbm90IGVuYWJsaW5nIG9uZS4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgQlBGIHRlc3RzIGFyZSBzdWZmaWNpZW50LiBJIHNob3VsZCBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjYsIk91dHB1dFRva2VucyI6MjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NDg6NDUuMTYzOTc5NDYxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc3RhY2tfc2xvdF9vYmpfZ2V0X3NwaSgpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCkgdG8gcmVqZWN0IG5vbi1uZWdhdGl2ZSBvZmZzZXRzIChgb2ZmIFxcdTAwM2U9IDBgKSBmb3Igc3RhY2stYWxsb2NhdGVkIG9iamVjdHMgc3VjaCBhcyBpdGVyYXRvcnMsIGR5bnB0cnMsIGFuZCBpcnEgZmxhZ3MuIFByZXZpb3VzbHksIHBhc3Npbmcgb2Zmc2V0IDAgKGkuZS4gYHIxMGAgLyBgZnArMGApIHJlc3VsdGVkIGluIGBicGZfZ2V0X3NwaSgwKWAgZXZhbHVhdGluZyB0byBgKC0wIC0gMSkgLyA4ID0gMGAgZHVlIHRvIGludGVnZXIgdHJ1bmNhdGlvbiwgZXJyb25lb3VzbHkgYWxpYXNpbmcgb2Zmc2V0IDAgdG8gc3RhY2sgc2xvdCBpbmRleCAwIChgZnAtOGApLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHZlcmlmaWVyIHZhbGlkYXRpb24vYm91bmRzIGNoZWNrIG9uIEJQRiByZWdpc3RlciBvZmZzZXRzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBwYWRkaW5nLCBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdGFjayBpbmRleGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgdmVyaWZpZXIgdGVzdHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHN0YWNrX3Nsb3Rfb2JqX2dldF9zcGkoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApIHRvIHJlamVjdCBub24tbmVnYXRpdmUgb2Zmc2V0cyAoYG9mZiBcXHUwMDNlPSAwYCkgZm9yIHN0YWNrLWFsbG9jYXRlZCBvYmplY3RzIHN1Y2ggYXMgaXRlcmF0b3JzLCBkeW5wdHJzLCBhbmQgaXJxIGZsYWdzLiBQcmV2aW91c2x5LCBwYXNzaW5nIG9mZnNldCAwIChpLmUuIGByMTBgIC8gYGZwKzBgKSByZXN1bHRlZCBpbiBgYnBmX2dldF9zcGkoMClgIGV2YWx1YXRpbmcgdG8gYCgtMCAtIDEpIC8gOCA9IDBgIGR1ZSB0byBpbnRlZ2VyIHRydW5jYXRpb24sIGVycm9uZW91c2x5IGFsaWFzaW5nIG9mZnNldCAwIHRvIHN0YWNrIHNsb3QgaW5kZXggMCAoYGZwLThgKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSB2ZXJpZmllciB2YWxpZGF0aW9uL2JvdW5kcyBjaGVjayBvbiBCUEYgcmVnaXN0ZXIgb2Zmc2V0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgcGFkZGluZywgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RhY2sgaW5kZXhpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHZlcmlmaWVyIHRlc3RzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow9lgqj[1] Phase: Succeeded StartedAt: 2026-09-11 08:48:56 +0000 UTC FinishedAt: 2026-09-11 08:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 08:48:56 +0000 UTC FinishedAt: 2026-09-11 08:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2] Phase: Succeeded StartedAt: 2026-09-11 08:48:56 +0000 UTC FinishedAt: 2026-09-11 12:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 08:48:56 +0000 UTC FinishedAt: 2026-09-11 12:38:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 08:48:56 +0000 UTC FinishedAt: 2026-09-11 08:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 08:48:56 +0000 UTC FinishedAt: 2026-09-11 08:49:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow9lgqj/series-workflow9lgqj-convert-artifact-918403371/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 08:49:06 +0000 UTC FinishedAt: 2026-09-11 09:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 08:49:06 +0000 UTC FinishedAt: 2026-09-11 09:11:06 +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:*5b7eef1b-7e20-479b-a4f7-10fe89c5b8ea,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-workflow9lgqj/series-workflow9lgqj-convert-artifact-918403371/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": "194ca0de-1993-42f6-b6aa-7e573a8baef1", "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-workflow9lgqj/series-workflow9lgqj-build-action-1997621801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:49:06 +0000 UTC FinishedAt: 2026-09-11 09:10:56 +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:*5b7eef1b-7e20-479b-a4f7-10fe89c5b8ea,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-workflow9lgqj/series-workflow9lgqj-convert-artifact-918403371/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": "194ca0de-1993-42f6-b6aa-7e573a8baef1", "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-workflow9lgqj/series-workflow9lgqj-build-action-1997621801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 09:11:06 +0000 UTC FinishedAt: 2026-09-11 09:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 09:11:06 +0000 UTC FinishedAt: 2026-09-11 09:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 09:11:06 +0000 UTC FinishedAt: 2026-09-11 09:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 09:11:06 +0000 UTC FinishedAt: 2026-09-11 09:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow9lgqj/series-workflow9lgqj-convert-artifact-4171123458/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 09:11:16 +0000 UTC FinishedAt: 2026-09-11 09:13:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 09:11:16 +0000 UTC FinishedAt: 2026-09-11 09:13:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*194ca0de-1993-42f6-b6aa-7e573a8baef1,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-workflow9lgqj/series-workflow9lgqj-build-action-1997621801/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-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 09:13:21 +0000 UTC FinishedAt: 2026-09-11 09:13:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:13:21 +0000 UTC FinishedAt: 2026-09-11 09:13:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 09:13:21 +0000 UTC FinishedAt: 2026-09-11 09:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 09:13:21 +0000 UTC FinishedAt: 2026-09-11 09:33:06 +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:*5b7eef1b-7e20-479b-a4f7-10fe89c5b8ea,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-workflow9lgqj/series-workflow9lgqj-convert-artifact-4171123458/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": "4ca9fa6b-4109-4677-8309-e72024dd5b80", "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-workflow9lgqj/series-workflow9lgqj-build-action-1037186390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 09:13:21 +0000 UTC FinishedAt: 2026-09-11 09:32:56 +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:*5b7eef1b-7e20-479b-a4f7-10fe89c5b8ea,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-workflow9lgqj/series-workflow9lgqj-convert-artifact-4171123458/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": "4ca9fa6b-4109-4677-8309-e72024dd5b80", "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-workflow9lgqj/series-workflow9lgqj-build-action-1037186390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 09:33:06 +0000 UTC FinishedAt: 2026-09-11 09:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 09:33:06 +0000 UTC FinishedAt: 2026-09-11 09:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 09:33:06 +0000 UTC FinishedAt: 2026-09-11 09:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 09:33:06 +0000 UTC FinishedAt: 2026-09-11 09:35:33 +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:*4ca9fa6b-4109-4677-8309-e72024dd5b80,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-workflow9lgqj/series-workflow9lgqj-build-action-1037186390/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-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 09:35:43 +0000 UTC FinishedAt: 2026-09-11 12:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 09:35:43 +0000 UTC FinishedAt: 2026-09-11 12:38:19 +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":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"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:*194ca0de-1993-42f6-b6aa-7e573a8baef1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4ca9fa6b-4109-4677-8309-e72024dd5b80,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-workflow9lgqj/series-workflow9lgqj-build-action-1997621801/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-workflow9lgqj/series-workflow9lgqj-build-action-1037186390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 09:35:43 +0000 UTC FinishedAt: 2026-09-11 09:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 09:35:43 +0000 UTC FinishedAt: 2026-09-11 09:35:48 +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":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"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-workflow9lgqj/series-workflow9lgqj-convert-artifact-264277303/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 09:35:43 +0000 UTC FinishedAt: 2026-09-11 09:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 09:35:43 +0000 UTC FinishedAt: 2026-09-11 09:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:35:43 +0000 UTC FinishedAt: 2026-09-11 09:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 09:35:53 +0000 UTC FinishedAt: 2026-09-11 12:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lgqj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["stack_slot_obj_get_spi","process_iter_arg","process_dynptr_func","process_irq_flag","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15071f2a1263e82150c77eeb1e94dbfc31950a8e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a101f2b7-4f1d-44fa-8628-5b57634572be","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 09:35:53 +0000 UTC FinishedAt: 2026-09-11 12:38:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*194ca0de-1993-42f6-b6aa-7e573a8baef1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4ca9fa6b-4109-4677-8309-e72024dd5b80,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-workflow9lgqj/series-workflow9lgqj-build-action-1997621801/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-workflow9lgqj/series-workflow9lgqj-build-action-1037186390/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-workflow9lgqj/series-workflow9lgqj-convert-artifact-264277303/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,}