Name: series-workflowtj9fp Phase: Succeeded StartedAt: 2026-09-10 20:17:44 +0000 UTC FinishedAt: 2026-09-11 00:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[0] Phase: Succeeded StartedAt: 2026-09-10 20:17:44 +0000 UTC FinishedAt: 2026-09-10 20:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 20:17:44 +0000 UTC FinishedAt: 2026-09-10 20:22:41 +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": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "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": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "d2bf173a-779c-4743-a0e7-262c76ac67f0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_stack_write_fixed_off", "check_stack_write" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cblxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhY2sgd3JpdGUgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBjYWxsaW5nIGNsZWFyX3NjYWxhcl9pZCgpIG9uIG5hcnJvd2luZyBzcGlsbHMgdG8gcHJvcGVybHkgcmVzZXQgYm90aCBpZCBhbmQgZGVsdGEuIFRoaXMgdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0ZWM1OWRhYTUzNjY4Y2IyNGQ3NGFmN2ZiNTE3NzcxOTI3NjdkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLjI3NGNkOGY1OGFkYzAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTM1ODIsNyAmIzQzOzM1ODIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcbiBcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xuIFx0XHRpZiAoIXJlZ192YWx1ZV9maXRzKVxuLVx0XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuaWQgPSAwO1xuJiM0MztcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4gXHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4gXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN0YWNrIHdyaXRlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgY2FsbGluZyBjbGVhcl9zY2FsYXJfaWQoKSBvbiBuYXJyb3dpbmcgc3BpbGxzIHRvIHByb3Blcmx5IHJlc2V0IGJvdGggaWQgYW5kIGRlbHRhLiBUaGlzIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNGVjNTlkYWE1MzY2OGNiMjRkNzRhZjdmYjUxNzc3MTkyNzY3ZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMjA6MjE6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uMjc0Y2Q4ZjU4YWRjMCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMzU4Miw3ICYjNDM7MzU4Miw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpOwogCQkvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgc3BpbGwuICovCiAJCWlmICghcmVnX3ZhbHVlX2ZpdHMpCi0JCQlzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5pZCA9IDA7CiYjNDM7CQkJY2xlYXJfc2NhbGFyX2lkKCZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHIpOwogCX0gZWxzZSBpZiAoIXJlZyAmYW1wOyZhbXA7ICEob2ZmICUgQlBGX1JFR19TSVpFKSAmYW1wOyZhbXA7IGlzX2JwZl9zdF9tZW0oaW5zbikgJmFtcDsmYW1wOwogCQkgICBlbnYtJmd0O2JwZl9jYXBhYmxlKSB7CiAJCXN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gJmFtcDtlbnYtJmd0O2Zha2VfcmVnWzBdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIExvb2tpbmcgYXQgdGhlIGBkaWZmYCwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgc3RhY2sgd3JpdGVzIHdpdGggZml4ZWQgb2Zmc2V0cywgZm9jdXNpbmcgb24gYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAuIEkmIzM5O20gc2VlaW5nIGEgY2hhbmdlIGNvbmNlcm5pbmcgdGhlIGBzcGlsbGVkX3B0cmAgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBzdGFjayBzdGF0ZSwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gKG9yIG1vZGlmaWNhdGlvbikgb2YgYGNsZWFyX3NjYWxhcl9pZGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGluIG1vcmUgY29udGV4dCwgc28gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdldCBteSBiZWFyaW5ncyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24gZG9lcywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSB2ZXJpZmllciBsb2dpYy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBVc2luZyBteSBwcmVmZXJyZWQgdG9vbHMgKHByb2JhYmx5IGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgbGluZSAzNTgyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBwb3RlbnRpYWxseSBhIGBncmVwcGVyYCBjYWxsIHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIG9mIGBjbGVhcl9zY2FsYXJfaWRgKSwgSSYjMzk7bGwgbG9vayB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygc3RhY2sgc3RhdGUgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBgZW52LSZndDticGZfY2FwYWJsZWAgY2hlY2sgaXMgYWxzbyByZWxldmFudC4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gZm9ybSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2h5IHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeS4gSXMgaXQgYSBidWcgZml4PyBBbiBvcHRpbWl6YXRpb24/IERvZXMgaXQgcmVsYXRlIHRvIHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGVzIG9yIGNvbmZpZ3VyYXRpb25zPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSBldmVuIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21taXQgbWVzc2FnZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTcwOlx0XHRpZiAoZXJyKVxuMzU3MTpcdFx0XHRyZXR1cm4gZXJyO1xuMzU3MjpcdFxuMzU3MzpcdFx0Y2hlY2tfZmFzdGNhbGxfc3RhY2tfY29udHJhY3QoZW52LCBzdGF0ZSwgaW5zbl9pZHgsIG9mZik7XG4zNTc0Olx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbjM1NzU6XHRcdGlmIChyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbjM1NzY6XHRcdFx0Ym9vbCByZWdfdmFsdWVfZml0cztcbjM1Nzc6XHRcbjM1Nzg6XHRcdFx0cmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcbjM1Nzk6XHRcdFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xuMzU4MDpcdFx0XHRpZiAocmVnX3ZhbHVlX2ZpdHMpXG4zNTgxOlx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbjM1ODI6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4zNTgzOlx0XHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbjM1ODQ6XHRcdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbjM1ODU6XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4zNTg2Olx0XHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbjM1ODc6XHRcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4zNTg4Olx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuMzU4OTpcdFxuMzU5MDpcdFx0XHRtZW1zZXQodG1wX3JlZywgMCwgc2l6ZW9mKCp0bXBfcmVnKSk7XG4zNTkxOlx0XHRcdF9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuMzU5MjpcdFx0XHR0bXBfcmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4zNTkzOlx0XHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcbjM1OTQ6XHRcdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpKSB7XG4zNTk1Olx0XHRcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cbjM1OTY6XHRcdFx0aWYgKHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XG4zNTk3Olx0XHRcdFx0dmVyYm9zZV9saW5mbyhlbnYsIGluc25faWR4LCBcJiMzNDs7IFwmIzM0Oyk7XG4zNTk4Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ludmFsaWQgc2l6ZSBvZiByZWdpc3RlciBzcGlsbFxcblwmIzM0Oyk7XG4zNTk5Olx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4zNjAwOlx0XHRcdH1cbjM2MDE6XHRcdFx0aWYgKHN0YXRlICE9IGN1ciBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XG4zNjAyOlx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2Nhbm5vdCBzcGlsbCBwb2ludGVycyB0byBzdGFjayBpbnRvIHN0YWNrIGZyYW1lIG9mIHRoZSBjYWxsZXJcXG5cJiMzNDspO1xuMzYwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzYwNDpcdFx0XHR9XG4zNjA1Olx0XHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xuMzYwNjpcdFx0fSBlbHNlIHtcbjM2MDc6XHRcdFx0dTggdHlwZSA9IFNUQUNLX01JU0M7XG4zNjA4Olx0XG4zNjA5Olx0XHRcdGlmIChicGZfaXNfc3BpbGxlZF9yZWcoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZWZpbml0aW9uIG9mIGBjbGVhcl9zY2FsYXJfaWRgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBgY2xlYXJfc2NhbGFyX2lkYCBmdW5jdGlvbiBvciB2YXJpYWJsZS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHB1cnBvc2UgYW5kIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgSUQgb3IgaWRlbnRpZmllciBmb3IgYSBzY2FsYXIgdmFsdWUsIGFuZCB0aGF0ICYjMzQ7Y2xlYXImIzM0OyBpbXBsaWVzIGEgcmVzZXR0aW5nLCBudWxsaW5nLCBvciBpbnZhbGlkYXRpbmcgYWN0aW9uLiBJdOKAmXMgbGlrZWx5IHRpZWQgaW50byBzb21lIGxhcmdlciBkYXRhIHN0cnVjdHVyZSBvciBzeXN0ZW0gd2hlcmUgdGhlc2Ugc2NhbGFyIElEcyBhcmUgc2lnbmlmaWNhbnQuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBzY2FsYXJgIGlzIGJlaW5nIGRlZmluZWQsIHdoaWNoIHN5c3RlbSBpdCBpcyB1c2VkIGluLCBhbmQgd2hpY2ggdmFsdWVzIHRoaXMgSUQgd2lsbCByZWZlcmVuY2UuIElzIGBzY2FsYXJgIGEgcHJpbWl0aXZlIHR5cGUsIGFuIG9iamVjdCwgYSBwYXJ0aWN1bGFyIGNsYXNzIG9yIHN0cnVjdCB3aXRoIHNwZWNpZmljIHByb3BlcnRpZXM/IElzIGl0IHRpZWQgdG8gc29tZSBzcGVjaWZpYyBsaWJyYXJ5IG9yIGRhdGEgc3RvcmFnZSBzeXN0ZW0/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzk7Y2xlYXJpbmcmIzM5OyB0aGlzIElEIGVudGFpbHMuIERvZXMgaXQgbWVyZWx5IHNldCB0aGUgdmFsdWUgdG8gYE5VTExgIG9yIGAtMWA/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgbWVtb3J5IG9yIHJlc291cmNlcz8gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3Igb3RoZXIgc2lkZSBlZmZlY3RzPyBDb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBhY2Nlc3NpbmcgdGhlIHNhbWUgc2NhbGFyIElELgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgZWRnZSBjYXNlcy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBJRCBpcyBhbHJlYWR5IGNsZWFyPyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBkZXRlY3RpbmcgaW52YWxpZCBvciBzdGFsZSBzY2FsYXIgSURzIGFmdGVyIHRoZSBjbGVhcj8gSXMgdGhlcmUgYW55IGNvbmZsaWN0IHdpdGggb3RoZXIgZm9ybXMgb2YgY2xlYXJpbmc/IENhbiB5b3UgY2xlYXIgYSBzY2FsYXIgYW5kIGFzc2lnbiBhIG5ldyB2YWx1ZT8KCkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBzdXJyb3VuZGluZyBjb2RlLCB0byBzYWZlbHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSB0aGlzIGluIG15IHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYXJfc2NhbGFyX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTA9c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDE4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MTk6c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyMC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MjU9c3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzUtXHRpZiAoc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDM2Olx0XHRjbGVhcl9zY2FsYXJfaWQoc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNy1cdC8qXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTY9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU4NC1cdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTg1Olx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTg2LVx0fSBlbHNlIGlmICghcmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4NjE9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE2LVx0XHRcdFx0aWYgKGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2Ugc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkxNzpcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxOC1cdFx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzgxPXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjAtXHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MjE6XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0MDk9c3RhdGljIHZvaWQgc2NhbGFyX2J5dGVfc3dhcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQzNy1cdGlmIChuZWVkX2Jzd2FwIHx8IGluc24tXHUwMDNlaW1tID09IDE2IHx8IGluc24tXHUwMDNlaW1tID09IDMyKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDM4Olx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzktXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1Njk5PXN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDYtY2xlYXJfaWQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NDc6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ4LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg1OS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NjA6XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg2MS1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU4NjY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk0OS1cdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5NTA6XHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NTEtXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NzQtXHRcdFx0XHRcdFx0aWYgKCFpc19zcmNfcmVnX3UzMilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk3NTpcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk3Ni1cdFx0XHRcdFx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODMtXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0Olx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVx0XHRcdFx0XHRcdGNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Nzg2PXN0YXRpYyB2b2lkIF9fY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnJlZ19zZXQsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2Nzk5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwMDpcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQ4PXZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk3MC1cdFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NzE6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NzItXHR9KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM0MTkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3RhdGUgdHJhY2tpbmcsIG9yIHBvdGVudGlhbCBzZWN1cml0eSBjaGVja3MuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBwYXR0ZXJuIG9yIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlci4KClRoYXQgbGluZSBudW1iZXIgaXMgdXN1YWxseSBhIGdvb2QgaW5kaWNhdG9yIG9mIHNvbWUgc3BlY2lmaWMgbG9naWMgLSBQZXJoYXBzIGEgcG90ZW50aWFsIGFyaXRobWV0aWMgZmxhdywgb3IgbWF5YmUgYSBzdGF0ZS1tYWNoaW5lIGlzc3VlLCBvciBldmVuIGEgc3VidGxlIGVycm9yIGNvbmRpdGlvbiB3aGVyZSBhIGNlcnRhaW4ga2luZCBvZiBpbnZhbGlkIEJQRiBwcm9ncmFtIGlzIHBhc3NpbmcgdGhlIGluaXRpYWwgdmVyaWZpY2F0aW9uIHN0ZXBzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuLi4gV2hhdCBhcmUgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucz8gV2hpY2ggdmVyaWZpZXIgc3RhZ2VzIGlzIHRoaXMgbGluZSB3aXRoaW4/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gdGhlIGNvbW1lbnRzIG9yIHZhcmlhYmxlIG5hbWVzIGFyb3VuZCB0aGVyZT8gTGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDE1Olx0XG4zNDE2Olx0XHRyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbjM0MTc6XHR9XG4zNDE4Olx0XG4zNDE5Olx0c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4zNDIwOlx0e1xuMzQyMTpcdFx0cmVnLVx1MDAzZWlkID0gMDtcbjM0MjI6XHRcdHJlZy1cdTAwM2VkZWx0YSA9IDA7XG4zNDIzOlx0fVxuMzQyNDpcdFxuMzQyNTpcdHN0YXRpYyB2b2lkIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMzQyNjpcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZylcbjM0Mjc6XHR7XG4zNDI4Olx0XHRpZiAoc3JjX3JlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcbjM0Mjk6XHRcdFx0cmV0dXJuO1xuMzQzMDpcdFx0LypcbjM0MzE6XHRcdCAqIFRoZSB2ZXJpZmllciBpcyBwcm9jZXNzaW5nIHJYID0gclkgaW5zbiBhbmRcbjM0MzI6XHRcdCAqIHJZLVx1MDAzZWlkIGhhcyBzcGVjaWFsIGxpbmtlZCByZWdpc3RlciBhbHJlYWR5LlxuMzQzMzpcdFx0ICogQ2xlYXJlZCBpdCwgc2luY2UgbXVsdGlwbGUgclggJiM0Mzs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxuMzQzNDpcdFx0ICovXG4zNDM1Olx0XHRpZiAoc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbjM0MzY6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHNyY19yZWcpO1xuMzQzNzpcdFx0LypcbjM0Mzg6XHRcdCAqIEVuc3VyZSB0aGF0IHNyY19yZWcgaGFzIGEgdmFsaWQgSUQgdGhhdCB3aWxsIGJlIGNvcGllZCB0b1xuMzQzOTpcdFx0ICogZHN0X3JlZyBhbmQgdGhlbiB3aWxsIGJlIHVzZWQgYnkgc3luY19saW5rZWRfcmVncygpIHRvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgQlBGIFZlcmlmaWVyIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIEJQRiB2ZXJpZmllciBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBgY2xlYXJfc2NhbGFyX2lkYCBmdW5jdGlvbiBpcyBiZWluZyBlbmhhbmNlZC4gUHJldmlvdXNseSwgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgb25seSB6ZXJvZWQgb3V0IHRoZSBgaWRgIGZpZWxkIG9mIGEgYHNwaWxsZWRfcHRyYCBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrLiBOb3csIHdpdGggdGhpcyBjaGFuZ2UsIHdlJiMzOTtyZSBjYWxsaW5nIGBjbGVhcl9zY2FsYXJfaWRgLCB3aGljaCB6ZXJvcyBib3RoIGBpZGAgKmFuZCogYGRlbHRhYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGEgY2xlYW51cCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgpUaGUgQlBGIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIGtub3cgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgdmlhIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIHN5c2NhbGwg4oCTIHN5emthbGxlciBsb3ZlcyB0byBoYW1tZXIgaXQuIFRoYXQgbWVhbnMgYW55IGNoYW5nZSBoZXJlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdGllcywgc2luY2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIG9mIGV4ZWN1dGFibGUgbG9naWMgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0uIEkgaGF2ZSB0byB2ZXJpZnkgdGhlIHBvc3NpYmxlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCAqY2FuKiB0aGlzIGJlIGV4cGxvaXRlZCBpbiBRRU1VPyBBbmQsIG9mIGNvdXJzZSwgdGhlIGFuc3dlciBpcyB5ZXMsIHZlcnkgZWFzaWx5OiBCUEYgaXMgdXNlci1hY2Nlc3NpYmxlIHZpYSBzeXNjYWxscywgc28gdGhpcyBjb2RlIGlzIGVhc2lseSByZWFjaGFibGUuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGBCUEZfU1lTQ0FMTGAgKGFuZCBgQlBGYCksIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBga2VybmVsL2JwZi92ZXJpZmllci5jYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmaWVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzUxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgYSBCUEYtcmVsYXRlZCBzZXR0aW5nLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5IHdoZXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMuIEkgbmVlZCB0byBiZSBlZmZpY2llbnQgYW5kIHBpbnBvaW50IHRoZSAqZXhhY3QqIGxvY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCB0aGUgdHJpY2tzIGZvciBuYXZpZ2F0aW5nIHRoZSBLY29uZmlnIHN5c3RlbTsgYXJlIHdlIGxvb2tpbmcgYXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzLCBvciBhIGdlbmVyYWwgZmVhdHVyZSBjb25maWc/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBtYXliZSB1c2Ugc29tZSBncmVwLWZ1IHdpdGggYC1yYCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3RhcnRpbmcgYXQgdGhlIHJvb3QsIHRvIGJlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBwYXJzZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMuIEl0IGNvdWxkIGJlIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBiYXNlZCBvbiBvdGhlciBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbnMsIG9yIGV2ZW4gaGFyZHdhcmUgcGxhdGZvcm1zLiBJJiMzOTtsbCBsb29rIGZvciBgZGVwZW5kcyBvbmAgZGlyZWN0aXZlcyB0byB1bmRlcnN0YW5kIHRoZSBhY3RpdmF0aW9uIGxvZ2ljLiBVbHRpbWF0ZWx5LCBrbm93aW5nIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBlbmFibGVkIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgcG9ydGluZywgb3IgcmVjb25maWd1cmluZyBCUEYgc3VwcG9ydC4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMjUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIGZlYXR1cmVzLiBLbm93aW5nIHRoZSBleGFjdCBvcHRpb25zIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB0aGUgY29uZmlndXJhdGlvbiBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzIGFuZCBhcmNoaXRlY3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdHMgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIHZhcmlvdXMgQlBGIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSByaWdodCBiYWxhbmNlIG9mIGZ1bmN0aW9uYWxpdHksIHNlY3VyaXR5LCBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcbiAgMjE6XHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxuICAyMjpcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG4gIDIzOlx0XHRib29sXG4gIDI0Olx0XG4gIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRl9TWVNDQUxMIERlcGVuZGVuY3kqKgoKT2theSwgc28gYEJQRl9TWVNDQUxMYCBkb2VzbiYjMzk7dCBoYXZlIGEgZGlyZWN0IGBkZXBlbmRzIG9uYCwgYnV0IGl0IGRvZXMgKnNlbGVjdCogQlBGLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBGaXJzdCwgbGV0JiMzOTtzIGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgb3IgcGVyaGFwcyByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIGlzIHN0YXRpYyBvciBub3QuCgpBaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uLiBJdCBsaXZlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU28sIGFzIEkmIzM5O2QgZXhwZWN0LCBiZWNhdXNlIHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYSAuYyBmaWxlLCBpdCYjMzk7bGwgc2hvdyB1cCBpbiB0aGUgdm1saW51eCBzeW1ib2wgdGFibGUgKHVubGVzcyB0aGUgY29tcGlsZXIgaW5saW5lcyBpdCwgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kKS4gQWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBzZWFyY2ggZm9yIGl0LCBhbG9uZyB3aXRoIGBjaGVja19tZW1fYWNjZXNzYCBvciBgY2hlY2tfc3RhY2tfd3JpdGVgLgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zNTAxPXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTE1LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM1MTY6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTE3LVx0XHRcdFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJiMzOTtyZSB3cml0aW5nIHRvICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwNzk9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxMzEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDEzMjovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxMzMtICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDE0MT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxNDktXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDE1MDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTUxLVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTIxMD1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTIzOS1cdFx0cG9pbnRlcl9kZXNjID0gXCYjMzQ7c3RhY2sgXCYjMzQ7O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUyNDA6XHRcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNDEtXHRcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMwoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBjb2RlLCBJIHNlZSB0aGF0IGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfd3JpdGVgLCBhbmQgYGNsZWFyX3NjYWxhcl9pZGAgYXJlIGFsbCBuZXN0bGVkIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIEZpcnN0IHRoaW5nLCBJIGNvbmZpcm1lZCB0aGF0IGBicGZfY2hlY2tgIGlzIGluZGVlZCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCByaWdodCBhdCB0aGUgdG9wIG9mIGB2ZXJpZmllci5jYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4KCk15IGdvYWwgbm93IGlzIHRvIGZvY3VzIG9uIHRoZSBrZXkgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBpZGVudGlmeWluZyAgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgYW5kIGBjaGVja19zdGFja193cml0ZWAgYXMgdGhlIHRhcmdldHMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZGVzY3JpcHRpb24sIGVzcGVjaWFsbHkgc2luY2UgdGhlIHBhdGNoIGRlYWxzIHdpdGggY2xlYXJpbmcgc2NhbGFyIElEcyB3aGVuIHN0YWNrIHNwaWxscyBoYXBwZW4uIEkgbm90aWNlZCB0aGF0IGBjbGVhcl9zY2FsYXJfaWRgIGlzIGEgdmVyeSBzbWFsbCBmdW5jdGlvbi4gR2l2ZW4gaXQgaXMgb25seSA0IGxpbmVzLCBpdCBpcyBsaWtlbHkgaW5saW5lZCwgb3IgZWFzaWx5IGNvdWxkIGJlLiBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIG11Y2ggbGFyZ2VyLCB3aXRoIGh1bmRyZWRzIG9mIGxpbmVzLiBJdCBpcyB2ZXJ5IGxpa2VseSAqbm90KiBpbmxpbmVkLgoKVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhci4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpbiBgdmVyaWZpZXIuY2ApLCB1c2luZyBgY2xlYXJfc2NhbGFyX2lkYCB3aGVuIGJyZWFraW5nIHNjYWxhciBJRCByZWxhdGlvbnMgb24gbmFycm93aW5nIHN0YWNrIHNwaWxscywgc28gd2UgcmVzZXQgYm90aCB0aGUgcmVnaXN0ZXImIzM5O3MgSUQgYW5kIGRlbHRhLiBUaGUgYEJQRl9QUk9HX0xPQURgIHN5c2NhbGwgdmlhIGBicGYoKWAgaXMgdGhlIGVudHJ5IHBvaW50LCBzbyBpdCBsb29rcyBsaWtlIHZlcmlmaWNhdGlvbiBsb2dpYyBpcyByZWFjaGFibGUuCgpJIGFsc28gY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3MgaW4gdGhlIHBhdGguIExvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBvbmUgdGhhdCBpcyBlbmFibGluZyBgdmVyaWZpZXIuY2AsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiAgQW5kLCB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlncyBzcGVjaWZpY2FsbHkgZ3VhcmRpbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgd2l0aGluIGB2ZXJpZmllci5jYC4KCkFscmlnaHQsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtjaGVja19zdGFja193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdGFjayB3cml0ZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGNhbGxpbmcgY2xlYXJfc2NhbGFyX2lkKCkgb24gbmFycm93aW5nIHNwaWxscyB0byBwcm9wZXJseSByZXNldCBib3RoIGlkIGFuZCBkZWx0YS4gVGhpcyB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtjaGVja19zdGFja193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdGFjayB3cml0ZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGNhbGxpbmcgY2xlYXJfc2NhbGFyX2lkKCkgb24gbmFycm93aW5nIHNwaWxscyB0byBwcm9wZXJseSByZXNldCBib3RoIGlkIGFuZCBkZWx0YS4gVGhpcyB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cblxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM0ZWM1OWRhYTUzNjY4Y2IyNGQ3NGFmN2ZiNTE3NzcxOTI3NjdkMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li4yNzRjZDhmNThhZGMwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0zNTgyLDcgJiM0MzszNTgyLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJc2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7CiAJCS8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi8KIAkJaWYgKCFyZWdfdmFsdWVfZml0cykKLQkJCXN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDsKJiM0MzsJCQljbGVhcl9zY2FsYXJfaWQoJmFtcDtzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7CiAJfSBlbHNlIGlmICghcmVnICZhbXA7JmFtcDsgIShvZmYgJSBCUEZfUkVHX1NJWkUpICZhbXA7JmFtcDsgaXNfYnBmX3N0X21lbShpbnNuKSAmYW1wOyZhbXA7CiAJCSAgIGVudi0mZ3Q7YnBmX2NhcGFibGUpIHsKIAkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSAmYW1wO2Vudi0mZ3Q7ZmFrZV9yZWdbMF07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOgoKKipBbmFseXppbmcgdGhlIFBhdGNoOiBJbml0aWFsIFRob3VnaHRzKioKCkFscmlnaHQsIGEgbmV3IHBhdGNoLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcyB0aGluZyBzeXN0ZW1hdGljYWxseS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3MgYXNzdW1lIHRoaXMgaXMga2VybmVsLWxldmVsLCBsaWtlbHkgQlBGIHJlbGF0ZWQuJiMzNDsgU28sIHRoZSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTtsbCBiZXQgYSBmZXcgdmlydHVhbCBidWNrcyB0aGF0IHRoZSBoZWFydCBvZiB0aGlzIGNoYW5nZSByZXNpZGVzIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLgoKTXkgaW5pdGlhbCBhY3Rpb24gaXMgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHJlbGV2YW50IGNvbnRlbnQgc3Vycm91bmRpbmcgbGluZSAzNTgyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgb2YgdGhlIHZlcmlmaWNhdGlvbiBsb2dpYyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBJIHdhbnQgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB0aGUgaW1tZWRpYXRlIGNvbnRleHQsIHRvIHN0YXJ0IGZvcm1pbmcgYSBoeXBvdGhlc2lzIGFib3V0IHdoYXQgdGhlIHBhdGNoIGFpbXMgdG8gbW9kaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU3MDpcdFx0aWYgKGVycilcbjM1NzE6XHRcdFx0cmV0dXJuIGVycjtcbjM1NzI6XHRcbjM1NzM6XHRcdGNoZWNrX2Zhc3RjYWxsX3N0YWNrX2NvbnRyYWN0KGVudiwgc3RhdGUsIGluc25faWR4LCBvZmYpO1xuMzU3NDpcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSk7XG4zNTc1Olx0XHRpZiAocmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4zNTc2Olx0XHRcdGJvb2wgcmVnX3ZhbHVlX2ZpdHM7XG4zNTc3Olx0XG4zNTc4Olx0XHRcdHJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzYz0gQklUU19QRVJfQllURSAqIHNpemU7XG4zNTc5Olx0XHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHJlZyBoYWQgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbiBvbiBzcGlsbC4gKi9cbjM1ODA6XHRcdFx0aWYgKHJlZ192YWx1ZV9maXRzKVxuMzU4MTpcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XG4zNTgyOlx0XHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xuMzU4MzpcdFx0XHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgc3BpbGwuICovXG4zNTg0Olx0XHRcdGlmICghcmVnX3ZhbHVlX2ZpdHMpXG4zNTg1Olx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xuMzU4NjpcdFx0fSBlbHNlIGlmICghcmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXHUwMDI2XHUwMDI2XG4zNTg3Olx0XHRcdCAgIGVudi1cdTAwM2VicGZfY2FwYWJsZSkge1xuMzU4ODpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdG1wX3JlZyA9IFx1MDAyNmVudi1cdTAwM2VmYWtlX3JlZ1swXTtcbjM1ODk6XHRcbjM1OTA6XHRcdFx0bWVtc2V0KHRtcF9yZWcsIDAsIHNpemVvZigqdG1wX3JlZykpO1xuMzU5MTpcdFx0XHRfX21hcmtfcmVnX2tub3duKHRtcF9yZWcsIGluc24tXHUwMDNlaW1tKTtcbjM1OTI6XHRcdFx0dG1wX3JlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuMzU5MzpcdFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgdG1wX3JlZywgc2l6ZSk7XG4zNTk0Olx0XHR9IGVsc2UgaWYgKHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKSkge1xuMzU5NTpcdFx0XHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXG4zNTk2Olx0XHRcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xuMzU5NzpcdFx0XHRcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXCYjMzQ7OyBcJiMzNDspO1xuMzU5ODpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtpbnZhbGlkIHNpemUgb2YgcmVnaXN0ZXIgc3BpbGxcXG5cJiMzNDspO1xuMzU5OTpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMzYwMDpcdFx0XHR9XG4zNjAxOlx0XHRcdGlmIChzdGF0ZSAhPSBjdXIgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xuMzYwMjpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3Qgc3BpbGwgcG9pbnRlcnMgdG8gc3RhY2sgaW50byBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyXFxuXCYjMzQ7KTtcbjM2MDM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM2MDQ6XHRcdFx0fVxuMzYwNTpcdFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcbjM2MDY6XHRcdH0gZWxzZSB7XG4zNjA3Olx0XHRcdHU4IHR5cGUgPSBTVEFDS19NSVNDO1xuMzYwODpcdFxuMzYwOTpcdFx0XHRpZiAoYnBmX2lzX3NwaWxsZWRfcmVnKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlLCB0aGlua2luZyBpdCB0aHJvdWdoIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGNsZWFyX3NjYWxhcl9pZGAgUmVwbGFjZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIHN3YXBwZWQgb3V0IGEgZGlyZWN0IHplcm9pbmcgYXNzaWdubWVudDogYHN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtgIHdpdGggYSBjYWxsIHRvIGEgZnVuY3Rpb24sIGBjbGVhcl9zY2FsYXJfaWQoJmFtcDtzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlIGFkZGVkIGZ1bmN0aW9uIGNhbGw/IFdlIHVzdWFsbHkgd2FudCB0byBhdm9pZCB0aGF0IG92ZXJoZWFkIGlmIGEgZGlyZWN0IGFzc2lnbm1lbnQgd29ya3MsIHBhcnRpY3VsYXJseSBpbiBwZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZS4KCk15IGltbWVkaWF0ZSBoeXBvdGhlc2lzIGlzIHRoYXQgYGNsZWFyX3NjYWxhcl9pZGAgaXMgZG9pbmcgbW9yZSB0aGFuIGp1c3Qgc2V0dGluZyB0aGUgYGlkYCBmaWVsZCB0byB6ZXJvLiBQZXJoYXBzIGl0JiMzOTtzIGFsc28gcmVzcG9uc2libGUgZm9yOgoKKiAgICoqSGFuZGxpbmcgRGVwZW5kZW5jaWVzL1NpZGUgRWZmZWN0czoqKiBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIHdpdGhpbiBgc3BpbGxlZF9wdHJgIHRoYXQgbmVlZCB0byBiZSBjbGVhcmVkLCByZS1pbml0aWFsaXplZCwgb3IgaW52YWxpZGF0ZWQgd2hlbiB0aGUgSUQgaXMgcmVzZXQ/IEl0IGNvdWxkIGJlIGVuc3VyaW5nIGNvbnNpc3RlbmN5IG9yIHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24uCiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIElzIHRoaXMgcGFydCBvZiBhIGxhcmdlciBzY2hlbWUgdG8gZnJlZSBvciBtYW5hZ2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBgc3BpbGxlZF9wdHJgPyBNYXliZSBpdCYjMzk7cyByZWxlYXNpbmcgcmVzb3VyY2VzIHRoYXQgd2VyZSB0aWVkIHRvIHRoYXQgSUQuIE9yIHBlcmhhcHMsIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIElEIGZyb20gYmVjb21pbmcgYSBkYW5nbGluZyBwb2ludGVyLgoqICAgKipBYnN0cmFjdGlvbiBhbmQgRW5jYXBzdWxhdGlvbjoqKiBJdCBjb3VsZCBiZSBhbiBlZmZvcnQgdG8gZW5jYXBzdWxhdGUgdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gY2xlYXJpbmcgYSBzY2FsYXIgSUQuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIGNoYW5nZSB0aGUgY2xlYXJpbmcgYmVoYXZpb3IgbGF0ZXIgd2l0aG91dCBoYXZpbmcgdG8gaHVudCBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBzcGlsbGVkX3B0ci5pZCA9IDA7YC4KKiAgICoqRnV0dXJlIFByb29maW5nOioqIE1heWJlIHRoZXJlJiMzOTtzIGEgcGxhbm5lZCBleHBhbnNpb24gb2YgdGhlIGBzcGlsbGVkX3B0cmAgc3RydWN0dXJlLCBhbmQgYGNsZWFyX3NjYWxhcl9pZGAgaXMgZGVzaWduZWQgdG8gYmUgZWFzaWx5IHVwZGF0ZWQgdG8gaGFuZGxlIHRob3NlIG5ldyBmaWVsZHMgb3Igc3RhdGVzLgoKSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCBub3cuIEkgbmVlZCB0byBzZWUgd2hhdCBpdCAqYWN0dWFsbHkqIGRvZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgZ2l2ZSBtZSB0aGUga2V5IHRvIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBjb21tZW50cyBhbmQgYSB3ZWxsLWRlc2lnbmVkIGZ1bmN0aW9uIHRoYXQgZm9sbG93cyB0aGUgU2luZ2xlIFJlc3BvbnNpYmlsaXR5IFByaW5jaXBsZS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM7IEkgbmVlZCB0byBhc3Nlc3MgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYXJfc2NhbGFyX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTA9c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDE4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MTk6c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyMC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MjU9c3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzUtXHRpZiAoc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDM2Olx0XHRjbGVhcl9zY2FsYXJfaWQoc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNy1cdC8qXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTY9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU4NC1cdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTg1Olx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTg2LVx0fSBlbHNlIGlmICghcmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4NjE9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE2LVx0XHRcdFx0aWYgKGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2Ugc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkxNzpcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxOC1cdFx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzgxPXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjAtXHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MjE6XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0MDk9c3RhdGljIHZvaWQgc2NhbGFyX2J5dGVfc3dhcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQzNy1cdGlmIChuZWVkX2Jzd2FwIHx8IGluc24tXHUwMDNlaW1tID09IDE2IHx8IGluc24tXHUwMDNlaW1tID09IDMyKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDM4Olx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzktXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1Njk5PXN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDYtY2xlYXJfaWQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NDc6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ4LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg1OS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NjA6XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg2MS1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU4NjY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk0OS1cdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5NTA6XHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NTEtXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NzQtXHRcdFx0XHRcdFx0aWYgKCFpc19zcmNfcmVnX3UzMilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk3NTpcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk3Ni1cdFx0XHRcdFx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODMtXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0Olx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVx0XHRcdFx0XHRcdGNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Nzg2PXN0YXRpYyB2b2lkIF9fY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnJlZ19zZXQsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2Nzk5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwMDpcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQ4PXZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk3MC1cdFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NzE6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NzItXHR9KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24gb3IgdmFyaWFibGUuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBwdXJwb3NlIGFuZCBjb250ZXh0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIElEIG9yIGlkZW50aWZpZXIgZm9yIGEgc2NhbGFyIHZhbHVlLCBhbmQgdGhhdCAmIzM0O2NsZWFyJiMzNDsgaW1wbGllcyBhIHJlc2V0dGluZywgbnVsbGluZywgb3IgaW52YWxpZGF0aW5nIGFjdGlvbi4gSXTigJlzIGxpa2VseSB0aWVkIGludG8gc29tZSBsYXJnZXIgZGF0YSBzdHJ1Y3R1cmUgb3Igc3lzdGVtIHdoZXJlIHRoZXNlIHNjYWxhciBJRHMgYXJlIHNpZ25pZmljYW50LgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBgc2NhbGFyYCBpcyBiZWluZyBkZWZpbmVkLCB3aGljaCBzeXN0ZW0gaXQgaXMgdXNlZCBpbiwgYW5kIHdoaWNoIHZhbHVlcyB0aGlzIElEIHdpbGwgcmVmZXJlbmNlLiBJcyBgc2NhbGFyYCBhIHByaW1pdGl2ZSB0eXBlLCBhbiBvYmplY3QsIGEgcGFydGljdWxhciBjbGFzcyBvciBzdHJ1Y3Qgd2l0aCBzcGVjaWZpYyBwcm9wZXJ0aWVzPyBJcyBpdCB0aWVkIHRvIHNvbWUgc3BlY2lmaWMgbGlicmFyeSBvciBkYXRhIHN0b3JhZ2Ugc3lzdGVtPwoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM5O2NsZWFyaW5nJiMzOTsgdGhpcyBJRCBlbnRhaWxzLiBEb2VzIGl0IG1lcmVseSBzZXQgdGhlIHZhbHVlIHRvIGBOVUxMYCBvciBgLTFgPyBEb2VzIGl0IGludm9sdmUgcmVsZWFzaW5nIG1lbW9yeSBvciByZXNvdXJjZXM/IERvZXMgaXQgdHJpZ2dlciBhbnkgY2FsbGJhY2tzIG9yIG90aGVyIHNpZGUgZWZmZWN0cz8gQ29uc2lkZXJpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHNjZW5hcmlvcywgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjbGVhcmluZyBvcGVyYXRpb24gaXMgdGhyZWFkLXNhZmUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRoYXQgbWlnaHQgYmUgYWNjZXNzaW5nIHRoZSBzYW1lIHNjYWxhciBJRC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgSUQgaXMgYWxyZWFkeSBjbGVhcj8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IgZGV0ZWN0aW5nIGludmFsaWQgb3Igc3RhbGUgc2NhbGFyIElEcyBhZnRlciB0aGUgY2xlYXI/IElzIHRoZXJlIGFueSBjb25mbGljdCB3aXRoIG90aGVyIGZvcm1zIG9mIGNsZWFyaW5nPyBDYW4geW91IGNsZWFyIGEgc2NhbGFyIGFuZCBhc3NpZ24gYSBuZXcgdmFsdWU/CgpJbiBlc3NlbmNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSwgaW5jbHVkaW5nIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgb3Igc3Vycm91bmRpbmcgY29kZSwgdG8gc2FmZWx5IGFuZCBlZmZlY3RpdmVseSB1c2UgdGhpcyBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQxNTpcdFxuMzQxNjpcdFx0cmV0dXJuIGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSk7XG4zNDE3Olx0fVxuMzQxODpcdFxuMzQxOTpcdHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuMzQyMDpcdHtcbjM0MjE6XHRcdHJlZy1cdTAwM2VpZCA9IDA7XG4zNDIyOlx0XHRyZWctXHUwMDNlZGVsdGEgPSAwO1xuMzQyMzpcdH1cbjM0MjQ6XHRcbjM0MjU6XHRzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjM0MjY6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyY19yZWcpXG4zNDI3Olx0e1xuMzQyODpcdFx0aWYgKHNyY19yZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4zNDI5Olx0XHRcdHJldHVybjtcbjM0MzA6XHRcdC8qXG4zNDMxOlx0XHQgKiBUaGUgdmVyaWZpZXIgaXMgcHJvY2Vzc2luZyByWCA9IHJZIGluc24gYW5kXG4zNDMyOlx0XHQgKiByWS1cdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cbjM0MzM6XHRcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICYjNDM7PSBjb25zdCBhcmUgbm90IHN1cHBvcnRlZC5cbjM0MzQ6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTY0CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNhZmV0eSBvZiBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3Mgc2FmZS4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHJlcGxhY2VzIGEgbGluZSB0aGF0IHdhcyBvbmx5IHJlc2V0dGluZyB0aGUgYGlkYCBmaWVsZCBvZiBhIGBzcGlsbGVkX3B0cmAgd2l0aCBhIGNhbGwgdG8gYGNsZWFyX3NjYWxhcl9pZGAsIHdoaWNoIHNldHMgYm90aCBgaWRgIGFuZCBgZGVsdGFgIHRvIHplcm8uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBtYWtpbmcgdGhlIGJlaGF2aW9yIG1vcmUgY29uc2lzdGVudCwgZXNwZWNpYWxseSBkdXJpbmcgbmFycm93aW5nIHNwaWxscyB3aGVyZSB3ZSYjMzk7cmUgYnJlYWtpbmcgc2NhbGFyIElEIHJlbGF0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBydW4gdGhyb3VnaCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBjaGVja2xpc3QuCgoxLiAgKipFeHBvc2luZyBVbmluaXRpYWxpemVkIE1lbW9yeToqKiBOb3BlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBCUEYgdmVyaWZpZXIgc3RhdGU7IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGByZWctJmd0O2lkYCBhbmQgYHJlZy0mZ3Q7ZGVsdGFgIHdpdGhpbiB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gTm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBoZXJlLiBObyByaXNrIG9mIGV4cG9zaW5nIGludGVybmFsIHN0YXRlLgoyLiAgKipNZW1vcnkgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBDaGFuZ2VzOioqIERvZXNuJiMzOTt0IHNlZW0gbGlrZSBpdC4gVGhlIGBzYXZlX3JlZ2lzdGVyX3N0YXRlYCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIGNvcHlpbmcsIHNvIHRoZSByZWdpc3RlciBzdGF0ZSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGNvZGUgaXMgcmVhY2hlZC4gU2V0dGluZyBgZGVsdGFgIHRvIHplcm8gcHJldmVudHMgYSBzdGFsZSBgZGVsdGFgIHZhbHVlIGZyb20gYmVpbmcgdXNlZCB3aGVuIHRoZSBgaWRgIGlzIHplcm8uCjMuICAqKktNU0FOIEludm9sdmVtZW50OioqIE5vdCBkaXJlY3RseS4gS01TQU4gaXMgZ3JlYXQgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAqcmVhZHMqIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBMb2dpY2FsIGVycm9ycyBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHNhbml0aXplcnMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIEtNU0FOL0tBU0FOIGRpc3RpbmN0aW9uLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBoZXJlLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdCBzdWl0ZXMgY292ZXIgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBlcnJvcnMsIHN1Y2ggYXMgYWxsb3dpbmcgT09CIHJlYWRzIG9yIHdyaXRlcyBkdXJpbmcgQlBGIGV4ZWN1dGlvbi4KCkdpdmVuIGFsbCB0aGlzLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlIGlzIHplcm8uIFdlIHNob3VsZCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciB0byBjYWxsIGBjbGVhcl9zY2FsYXJfaWQoKWAgaW5zdGVhZCBvZiBvbmx5IHplcm9pbmcgYGlkYCwgZW5zdXJpbmcgdGhhdCBib3RoIGBpZGAgYW5kIGBkZWx0YWAgYXJlIHByb3Blcmx5IHJlc2V0IHdoZW4gYnJlYWtpbmcgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHJlZ2lzdGVyIHNwaWxsLlxuXG5UaGlzIGNoYW5nZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCB2ZXJpZmllciByZWdpc3Rlci1zdGF0ZSBib29ra2VlcGluZyAoYHN0cnVjdCBicGZfcmVnX3N0YXRlYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGFjY2VzcyBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IC8gc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIEJQRiBwcm9ncmFtcy4gQW55IHZlcmlmaWVyIHRyYWNraW5nIGJ1Z3MgdGhhdCBtaWdodCByZXN1bHQgaW4gaW52YWxpZCBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cblxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6MjIuMTU4NDgxNTM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMzkyMTA4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciB0byBjYWxsIGBjbGVhcl9zY2FsYXJfaWQoKWAgaW5zdGVhZCBvZiBvbmx5IHplcm9pbmcgYGlkYCwgZW5zdXJpbmcgdGhhdCBib3RoIGBpZGAgYW5kIGBkZWx0YWAgYXJlIHByb3Blcmx5IHJlc2V0IHdoZW4gYnJlYWtpbmcgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHJlZ2lzdGVyIHNwaWxsLlxcblxcblRoaXMgY2hhbmdlIGlzIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIHZlcmlmaWVyIHJlZ2lzdGVyLXN0YXRlIGJvb2trZWVwaW5nIChgc3RydWN0IGJwZl9yZWdfc3RhdGVgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgYWNjZXNzIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgLyBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3IgQlBGIHByb2dyYW1zLiBBbnkgdmVyaWZpZXIgdHJhY2tpbmcgYnVncyB0aGF0IG1pZ2h0IHJlc3VsdCBpbiBpbnZhbGlkIGJvdW5kcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBCUEYgcHJvZ3JhbSBleGVjdXRpb24gYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhY2sgd3JpdGUgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBjYWxsaW5nIGNsZWFyX3NjYWxhcl9pZCgpIG9uIG5hcnJvd2luZyBzcGlsbHMgdG8gcHJvcGVybHkgcmVzZXQgYm90aCBpZCBhbmQgZGVsdGEuIFRoaXMgdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6MjIuMTU4NDkxOTA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIxOTU4NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzRlYzU5ZGFhNTM2NjhjYjI0ZDc0YWY3ZmI1MTc3NzE5Mjc2N2QxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA3MmEzZjU5OThkZDI3Li4yNzRjZDhmNThhZGMwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0zNTgyLDcgKzM1ODIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcXG4gXFx0XFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xcbiBcXHRcXHRpZiAoIXJlZ192YWx1ZV9maXRzKVxcbi1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5pZCA9IDA7XFxuK1xcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xcbiBcXHR9IGVsc2UgaWYgKCFyZWcgXFx1MDAyNlxcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFxcdTAwMjZcXHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbiBcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdG1wX3JlZyA9IFxcdTAwMjZlbnYtXFx1MDAzZWZha2VfcmVnWzBdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMToyMy42ODEwNzA2MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMjAwMjkwNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YWNrIHdyaXRlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgY2FsbGluZyBjbGVhcl9zY2FsYXJfaWQoKSBvbiBuYXJyb3dpbmcgc3BpbGxzIHRvIHByb3Blcmx5IHJlc2V0IGJvdGggaWQgYW5kIGRlbHRhLiBUaGlzIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzRlYzU5ZGFhNTM2NjhjYjI0ZDc0YWY3ZmI1MTc3NzE5Mjc2N2QxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIwOjIxOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li4yNzRjZDhmNThhZGMwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zNTgyLDcgKzM1ODIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcbiBcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xuIFx0XHRpZiAoIXJlZ192YWx1ZV9maXRzKVxuLVx0XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuaWQgPSAwO1xuK1x0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcbiBcdH0gZWxzZSBpZiAoIXJlZyBcdTAwMjZcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFx1MDAyNlx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbiBcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcdTAwMjZlbnYtXHUwMDNlZmFrZV9yZWdbMF07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMToyMy42ODEwNzE5MjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjg0NDM2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29raW5nIGF0IHRoZSBgZGlmZmAsIGl0IHNlZW1zIGxpa2Ugd2UncmUgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgc3RhY2sgd3JpdGVzIHdpdGggZml4ZWQgb2Zmc2V0cywgZm9jdXNpbmcgb24gYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAuIEknbSBzZWVpbmcgYSBjaGFuZ2UgY29uY2VybmluZyB0aGUgYHNwaWxsZWRfcHRyYCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHN0YWNrIHN0YXRlLCBhbmQgdGhlIGludHJvZHVjdGlvbiAob3IgbW9kaWZpY2F0aW9uKSBvZiBgY2xlYXJfc2NhbGFyX2lkYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhpcyBpbiBtb3JlIGNvbnRleHQsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdldCBteSBiZWFyaW5ncyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24gZG9lcywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSB2ZXJpZmllciBsb2dpYy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFVzaW5nIG15IHByZWZlcnJlZCB0b29scyAocHJvYmFibHkgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDM1ODIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHBvdGVudGlhbGx5IGEgYGdyZXBwZXJgIGNhbGwgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYGNsZWFyX3NjYWxhcl9pZGApLCBJJ2xsIGxvb2sgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHN0YWNrIHN0YXRlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgYGVudi1cdTAwM2VicGZfY2FwYWJsZWAgY2hlY2sgaXMgYWxzbyByZWxldmFudC4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBmb3JtIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5LiBJcyBpdCBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gRG9lcyBpdCByZWxhdGUgdG8gc3BlY2lmaWMgQlBGIHByb2dyYW0gdHlwZXMgb3IgY29uZmlndXJhdGlvbnM/IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgZXZlbiByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWl0IG1lc3NhZ2VzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjMwLjk2NTUxMTM0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzg0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1NzA6XFx0XFx0aWYgKGVycilcXG4zNTcxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzU3MjpcXHRcXG4zNTczOlxcdFxcdGNoZWNrX2Zhc3RjYWxsX3N0YWNrX2NvbnRyYWN0KGVudiwgc3RhdGUsIGluc25faWR4LCBvZmYpO1xcbjM1NzQ6XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSk7XFxuMzU3NTpcXHRcXHRpZiAocmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4zNTc2OlxcdFxcdFxcdGJvb2wgcmVnX3ZhbHVlX2ZpdHM7XFxuMzU3NzpcXHRcXG4zNTc4OlxcdFxcdFxcdHJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBzaXplO1xcbjM1Nzk6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xcbjM1ODA6XFx0XFx0XFx0aWYgKHJlZ192YWx1ZV9maXRzKVxcbjM1ODE6XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcXG4zNTgyOlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xcbjM1ODM6XFx0XFx0XFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xcbjM1ODQ6XFx0XFx0XFx0aWYgKCFyZWdfdmFsdWVfZml0cylcXG4zNTg1OlxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xcbjM1ODY6XFx0XFx0fSBlbHNlIGlmICghcmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFxcdTAwMjZcXHUwMDI2XFxuMzU4NzpcXHRcXHRcXHQgICBlbnYtXFx1MDAzZWJwZl9jYXBhYmxlKSB7XFxuMzU4ODpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdG1wX3JlZyA9IFxcdTAwMjZlbnYtXFx1MDAzZWZha2VfcmVnWzBdO1xcbjM1ODk6XFx0XFxuMzU5MDpcXHRcXHRcXHRtZW1zZXQodG1wX3JlZywgMCwgc2l6ZW9mKCp0bXBfcmVnKSk7XFxuMzU5MTpcXHRcXHRcXHRfX21hcmtfcmVnX2tub3duKHRtcF9yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuMzU5MjpcXHRcXHRcXHR0bXBfcmVnLVxcdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xcbjM1OTM6XFx0XFx0XFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpO1xcbjM1OTQ6XFx0XFx0fSBlbHNlIGlmIChyZWcgXFx1MDAyNlxcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4zNTk1OlxcdFxcdFxcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cXG4zNTk2OlxcdFxcdFxcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xcbjM1OTc6XFx0XFx0XFx0XFx0dmVyYm9zZV9saW5mbyhlbnYsIGluc25faWR4LCBcXFwiOyBcXFwiKTtcXG4zNTk4OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiaW52YWxpZCBzaXplIG9mIHJlZ2lzdGVyIHNwaWxsXFxcXG5cXFwiKTtcXG4zNTk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjM2MDA6XFx0XFx0XFx0fVxcbjM2MDE6XFx0XFx0XFx0aWYgKHN0YXRlICE9IGN1ciBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XFxuMzYwMjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCBzcGlsbCBwb2ludGVycyB0byBzdGFjayBpbnRvIHN0YWNrIGZyYW1lIG9mIHRoZSBjYWxsZXJcXFxcblxcXCIpO1xcbjM2MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzYwNDpcXHRcXHRcXHR9XFxuMzYwNTpcXHRcXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcXG4zNjA2OlxcdFxcdH0gZWxzZSB7XFxuMzYwNzpcXHRcXHRcXHR1OCB0eXBlID0gU1RBQ0tfTUlTQztcXG4zNjA4OlxcdFxcbjM2MDk6XFx0XFx0XFx0aWYgKGJwZl9pc19zcGlsbGVkX3JlZyhcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTozMC45NjY1OTE1MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDAxNjI2NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGBjbGVhcl9zY2FsYXJfaWRgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcHVycG9zZSBhbmQgY29udGV4dC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIElEIG9yIGlkZW50aWZpZXIgZm9yIGEgc2NhbGFyIHZhbHVlLCBhbmQgdGhhdCBcImNsZWFyXCIgaW1wbGllcyBhIHJlc2V0dGluZywgbnVsbGluZywgb3IgaW52YWxpZGF0aW5nIGFjdGlvbi4gSXTigJlzIGxpa2VseSB0aWVkIGludG8gc29tZSBsYXJnZXIgZGF0YSBzdHJ1Y3R1cmUgb3Igc3lzdGVtIHdoZXJlIHRoZXNlIHNjYWxhciBJRHMgYXJlIHNpZ25pZmljYW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBzY2FsYXJgIGlzIGJlaW5nIGRlZmluZWQsIHdoaWNoIHN5c3RlbSBpdCBpcyB1c2VkIGluLCBhbmQgd2hpY2ggdmFsdWVzIHRoaXMgSUQgd2lsbCByZWZlcmVuY2UuIElzIGBzY2FsYXJgIGEgcHJpbWl0aXZlIHR5cGUsIGFuIG9iamVjdCwgYSBwYXJ0aWN1bGFyIGNsYXNzIG9yIHN0cnVjdCB3aXRoIHNwZWNpZmljIHByb3BlcnRpZXM/IElzIGl0IHRpZWQgdG8gc29tZSBzcGVjaWZpYyBsaWJyYXJ5IG9yIGRhdGEgc3RvcmFnZSBzeXN0ZW0/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJ2NsZWFyaW5nJyB0aGlzIElEIGVudGFpbHMuIERvZXMgaXQgbWVyZWx5IHNldCB0aGUgdmFsdWUgdG8gYE5VTExgIG9yIGAtMWA/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgbWVtb3J5IG9yIHJlc291cmNlcz8gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3Igb3RoZXIgc2lkZSBlZmZlY3RzPyBDb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBhY2Nlc3NpbmcgdGhlIHNhbWUgc2NhbGFyIElELlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgSUQgaXMgYWxyZWFkeSBjbGVhcj8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IgZGV0ZWN0aW5nIGludmFsaWQgb3Igc3RhbGUgc2NhbGFyIElEcyBhZnRlciB0aGUgY2xlYXI/IElzIHRoZXJlIGFueSBjb25mbGljdCB3aXRoIG90aGVyIGZvcm1zIG9mIGNsZWFyaW5nPyBDYW4geW91IGNsZWFyIGEgc2NhbGFyIGFuZCBhc3NpZ24gYSBuZXcgdmFsdWU/XG5cbkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBzdXJyb3VuZGluZyBjb2RlLCB0byBzYWZlbHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSB0aGlzIGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjMzLjk2ODIyMDY2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYwNzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbGVhcl9zY2FsYXJfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTA9c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MTk6c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MjAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MjU9c3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNS1cXHRpZiAoc3JjX3JlZy1cXHUwMDNlaWQgXFx1MDAyNiBCUEZfQUREX0NPTlNUKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDM2OlxcdFxcdGNsZWFyX3NjYWxhcl9pZChzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNy1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTY9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTg0LVxcdFxcdGlmICghcmVnX3ZhbHVlX2ZpdHMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1ODU6XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1ODYtXFx0fSBlbHNlIGlmICghcmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzg2MT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxNi1cXHRcXHRcXHRcXHRpZiAoZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2Ugc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM5MTc6XFx0XFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxOC1cXHRcXHRcXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODE9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjIwLVxcdFxcdFxcdGlmICghbm9fc2V4dClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjYyMTpcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYyMi1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0MDk9c3RhdGljIHZvaWQgc2NhbGFyX2J5dGVfc3dhcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NDM3LVxcdGlmIChuZWVkX2Jzd2FwIHx8IGluc24tXFx1MDAzZWltbSA9PSAxNiB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gMzIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDM4OlxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzktXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU2OTk9c3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ2LWNsZWFyX2lkOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTg0NzpcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NTktXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1ODYwOlxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NjEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1ODY2PXN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk0OS1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NTEtXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk3NC1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3NyY19yZWdfdTMyKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTc2LVxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODMtXFx0XFx0XFx0XFx0XFx0XFx0aWYgKCFub19zZXh0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk4NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVxcdFxcdFxcdFxcdFxcdFxcdGNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYgXFx1MDAzZVxcdTAwM2UgMyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3ODY9c3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjc5OS1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwMDpcXHRcXHRjbGVhcl9zY2FsYXJfaWQocmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQ4PXZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTcwLVxcdFxcdGlmIChpZHNldF9jbnRfZ2V0KGlkc2V0LCByZWctXFx1MDAzZWlkIFxcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTcxOlxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChyZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk3Mi1cXHR9KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjM0LjAyMjgzMTc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTMzMTY1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM0MTkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3RhdGUgdHJhY2tpbmcsIG9yIHBvdGVudGlhbCBzZWN1cml0eSBjaGVja3MuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIHBhdHRlcm4gb3IgdnVsbmVyYWJpbGl0eSB0cmlnZ2VyLlxuXG5UaGF0IGxpbmUgbnVtYmVyIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiBzb21lIHNwZWNpZmljIGxvZ2ljIC0gUGVyaGFwcyBhIHBvdGVudGlhbCBhcml0aG1ldGljIGZsYXcsIG9yIG1heWJlIGEgc3RhdGUtbWFjaGluZSBpc3N1ZSwgb3IgZXZlbiBhIHN1YnRsZSBlcnJvciBjb25kaXRpb24gd2hlcmUgYSBjZXJ0YWluIGtpbmQgb2YgaW52YWxpZCBCUEYgcHJvZ3JhbSBpcyBwYXNzaW5nIHRoZSBpbml0aWFsIHZlcmlmaWNhdGlvbiBzdGVwcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0Li4uIFdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnM/IFdoaWNoIHZlcmlmaWVyIHN0YWdlcyBpcyB0aGlzIGxpbmUgd2l0aGluPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGluIHRoZSBjb21tZW50cyBvciB2YXJpYWJsZSBuYW1lcyBhcm91bmQgdGhlcmU/IExldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6MzYuMTE2MTUwMjI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHJldHVybiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKTtcXG4zNDE3OlxcdH1cXG4zNDE4OlxcdFxcbjM0MTk6XFx0c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMzQyMDpcXHR7XFxuMzQyMTpcXHRcXHRyZWctXFx1MDAzZWlkID0gMDtcXG4zNDIyOlxcdFxcdHJlZy1cXHUwMDNlZGVsdGEgPSAwO1xcbjM0MjM6XFx0fVxcbjM0MjQ6XFx0XFxuMzQyNTpcXHRzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4zNDI2OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKVxcbjM0Mjc6XFx0e1xcbjM0Mjg6XFx0XFx0aWYgKHNyY19yZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxcbjM0Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjM0MzA6XFx0XFx0LypcXG4zNDMxOlxcdFxcdCAqIFRoZSB2ZXJpZmllciBpcyBwcm9jZXNzaW5nIHJYID0gclkgaW5zbiBhbmRcXG4zNDMyOlxcdFxcdCAqIHJZLVxcdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cXG4zNDMzOlxcdFxcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxcbjM0MzQ6XFx0XFx0ICovXFxuMzQzNTpcXHRcXHRpZiAoc3JjX3JlZy1cXHUwMDNlaWQgXFx1MDAyNiBCUEZfQUREX0NPTlNUKVxcbjM0MzY6XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHNyY19yZWcpO1xcbjM0Mzc6XFx0XFx0LypcXG4zNDM4OlxcdFxcdCAqIEVuc3VyZSB0aGF0IHNyY19yZWcgaGFzIGEgdmFsaWQgSUQgdGhhdCB3aWxsIGJlIGNvcGllZCB0b1xcbjM0Mzk6XFx0XFx0ICogZHN0X3JlZyBhbmQgdGhlbiB3aWxsIGJlIHVzZWQgYnkgc3luY19saW5rZWRfcmVncygpIHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjM2LjExNzI3MjQxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MTc0NTY5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEJQRiBWZXJpZmllciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgQlBGIHZlcmlmaWVyIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGBjbGVhcl9zY2FsYXJfaWRgIGZ1bmN0aW9uIGlzIGJlaW5nIGVuaGFuY2VkLiBQcmV2aW91c2x5LCBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCBvbmx5IHplcm9lZCBvdXQgdGhlIGBpZGAgZmllbGQgb2YgYSBgc3BpbGxlZF9wdHJgIHN0cnVjdHVyZSBvbiB0aGUgc3RhY2suIE5vdywgd2l0aCB0aGlzIGNoYW5nZSwgd2UncmUgY2FsbGluZyBgY2xlYXJfc2NhbGFyX2lkYCwgd2hpY2ggemVyb3MgYm90aCBgaWRgICphbmQqIGBkZWx0YWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIGNsZWFudXAsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5UaGUgQlBGIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIGtub3cgaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZywgZXNwZWNpYWxseSB2aWEgdGhlIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbCDigJMgc3l6a2FsbGVyIGxvdmVzIHRvIGhhbW1lciBpdC4gVGhhdCBtZWFucyBhbnkgY2hhbmdlIGhlcmUgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzLCBzaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgb2YgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbS4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgcG9zc2libGUgZWZmZWN0cyBvZiB0aGUgY2hhbmdlcy5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogdGhpcyBiZSBleHBsb2l0ZWQgaW4gUUVNVT8gQW5kLCBvZiBjb3Vyc2UsIHRoZSBhbnN3ZXIgaXMgeWVzLCB2ZXJ5IGVhc2lseTogQlBGIGlzIHVzZXItYWNjZXNzaWJsZSB2aWEgc3lzY2FsbHMsIHNvIHRoaXMgY29kZSBpcyBlYXNpbHkgcmVhY2hhYmxlLiBUaGF0J3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gcHJldHR5IHN1cmUgaXQncyBgQlBGX1NZU0NBTExgIChhbmQgYEJQRmApLCBidXQgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDAuNzM0NzMyNDc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMzNDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDAuNzg0MDcwOTQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTAyMjI3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQnbGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzUxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDIuNDc0Mjk1NzE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwMDcwMiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTo0Mi41MTg5MDIxNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMDA2Mjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyBCUEZfU1lTQ0FMTCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgc3RydWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSBuZWVkIHRvIGJlIGVmZmljaWVudCBhbmQgcGlucG9pbnQgdGhlICpleGFjdCogbG9jYXRpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciBhbGwgdGhlIHRyaWNrcyBmb3IgbmF2aWdhdGluZyB0aGUgS2NvbmZpZyBzeXN0ZW07IGFyZSB3ZSBsb29raW5nIGF0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcywgb3IgYSBnZW5lcmFsIGZlYXR1cmUgY29uZmlnPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCwgbWF5YmUgdXNlIHNvbWUgZ3JlcC1mdSB3aXRoIGAtcmAgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHN0YXJ0aW5nIGF0IHRoZSByb290LCB0byBiZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gVGhlbiwgSSdsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcy4gSXQgY291bGQgYmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIG90aGVyIGZlYXR1cmVzLCBhcmNoaXRlY3R1cmUgc2VsZWN0aW9ucywgb3IgZXZlbiBoYXJkd2FyZSBwbGF0Zm9ybXMuIEknbGwgbG9vayBmb3IgYGRlcGVuZHMgb25gIGRpcmVjdGl2ZXMgdG8gdW5kZXJzdGFuZCB0aGUgYWN0aXZhdGlvbiBsb2dpYy4gVWx0aW1hdGVseSwga25vd2luZyBwcmVjaXNlbHkgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIGVuYWJsZWQgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciByZWNvbmZpZ3VyaW5nIEJQRiBzdXBwb3J0LiBUaW1lIHRvIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDUuMDE4OTY4MjAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc2NzM4MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjQ2Ljc5NTcxMzM0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMwMDMxNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBMZXQncyB6ZXJvIGluIG9uIGxpbmUgMjUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgZmVhdHVyZXMuIEtub3dpbmcgdGhlIGV4YWN0IG9wdGlvbnMgYW5kIHRoZWlyIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBjb25maWd1cmF0aW9uIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMgYW5kIGFyY2hpdGVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgaW1wYWN0cyBvZiBlbmFibGluZy9kaXNhYmxpbmcgdmFyaW91cyBCUEYgZmVhdHVyZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGdldHRpbmcgdGhlIHJpZ2h0IGJhbGFuY2Ugb2YgZnVuY3Rpb25hbGl0eSwgc2VjdXJpdHksIGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjQ4LjYyNTc0NzY0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDguNjI1ODA1MDY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTg1OTM1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEZfU1lTQ0FMTCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYEJQRl9TWVNDQUxMYCBkb2Vzbid0IGhhdmUgYSBkaXJlY3QgYGRlcGVuZHMgb25gLCBidXQgaXQgZG9lcyAqc2VsZWN0KiBCUEYuIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5JJ20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBGaXJzdCwgbGV0J3MgZXhhbWluZSBgRm9jdXNTeW1ib2xzYC4gVGhlbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBvciBwZXJoYXBzIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgc3RhdGljIG9yIG5vdC5cblxuQWgsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyB1c2VmdWwgaW5mb3JtYXRpb24uIEl0IGxpdmVzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTbywgYXMgSSdkIGV4cGVjdCwgYmVjYXVzZSB0aGlzIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGEgLmMgZmlsZSwgaXQnbGwgc2hvdyB1cCBpbiB0aGUgdm1saW51eCBzeW1ib2wgdGFibGUgKHVubGVzcyB0aGUgY29tcGlsZXIgaW5saW5lcyBpdCwgd2hpY2ggSSdsbCBrZWVwIGluIG1pbmQpLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHNlYXJjaCBmb3IgaXQsIGFsb25nIHdpdGggYGNoZWNrX21lbV9hY2Nlc3NgIG9yIGBjaGVja19zdGFja193cml0ZWAuXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTo1Mi43ODQ0MDA2MDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTMyMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzUwMT1zdGF0aWMgdm9pZCBzY3J1Yl9zcGVjaWFsX3Nsb3Qoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTE1LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTE2OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1MTctXFx0XFx0XFx0XFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJ3JlIHdyaXRpbmcgdG8gKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MDc5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxMzEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxMzI6LyogY2hlY2tfc3RhY2tfd3JpdGUgZGlzcGF0Y2hlcyB0byBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYgb3JcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEzMy0gKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQxNDE9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxNDktXFx0XFx0b2ZmICs9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDE1MDpcXHRcXHRlcnIgPSBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTUxLVxcdFxcdFxcdFxcdFxcdFxcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MjEwPXN0YXRpYyBpbnQgY2hlY2tfcHRyX2FsaWdubWVudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyMzktXFx0XFx0cG9pbnRlcl9kZXNjID0gXFxcInN0YWNrIFxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUyNDA6XFx0XFx0LyogVGhlIHN0YWNrIHNwaWxsIHRyYWNraW5nIGxvZ2ljIGluIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNDEtXFx0XFx0ICogYW5kIGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKCkgcmVsaWVzIG9uIHN0YWNrIGFjY2Vzc2VzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjUyLjgzNDUzNTM5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTY2MjU3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGNvZGUsIEkgc2VlIHRoYXQgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAsIGBjaGVja19zdGFja193cml0ZWAsIGFuZCBgY2xlYXJfc2NhbGFyX2lkYCBhcmUgYWxsIG5lc3RsZWQgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgRmlyc3QgdGhpbmcsIEkgY29uZmlybWVkIHRoYXQgYGJwZl9jaGVja2AgaXMgaW5kZWVkIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHJpZ2h0IGF0IHRoZSB0b3Agb2YgYHZlcmlmaWVyLmNgLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5NeSBnb2FsIG5vdyBpcyB0byBmb2N1cyBvbiB0aGUga2V5IGNoYW5nZXMgaW4gdGhlIHBhdGNoLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgaWRlbnRpZnlpbmcgIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIGFuZCBgY2hlY2tfc3RhY2tfd3JpdGVgIGFzIHRoZSB0YXJnZXRzLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGRlc2NyaXB0aW9uLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBkZWFscyB3aXRoIGNsZWFyaW5nIHNjYWxhciBJRHMgd2hlbiBzdGFjayBzcGlsbHMgaGFwcGVuLiBJIG5vdGljZWQgdGhhdCBgY2xlYXJfc2NhbGFyX2lkYCBpcyBhIHZlcnkgc21hbGwgZnVuY3Rpb24uIEdpdmVuIGl0IGlzIG9ubHkgNCBsaW5lcywgaXQgaXMgbGlrZWx5IGlubGluZWQsIG9yIGVhc2lseSBjb3VsZCBiZS4gYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBtdWNoIGxhcmdlciwgd2l0aCBodW5kcmVkcyBvZiBsaW5lcy4gSXQgaXMgdmVyeSBsaWtlbHkgKm5vdCogaW5saW5lZC5cblxuVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhci4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpbiBgdmVyaWZpZXIuY2ApLCB1c2luZyBgY2xlYXJfc2NhbGFyX2lkYCB3aGVuIGJyZWFraW5nIHNjYWxhciBJRCByZWxhdGlvbnMgb24gbmFycm93aW5nIHN0YWNrIHNwaWxscywgc28gd2UgcmVzZXQgYm90aCB0aGUgcmVnaXN0ZXIncyBJRCBhbmQgZGVsdGEuIFRoZSBgQlBGX1BST0dfTE9BRGAgc3lzY2FsbCB2aWEgYGJwZigpYCBpcyB0aGUgZW50cnkgcG9pbnQsIHNvIGl0IGxvb2tzIGxpa2UgdmVyaWZpY2F0aW9uIGxvZ2ljIGlzIHJlYWNoYWJsZS5cblxuSSBhbHNvIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWdzIGluIHRoZSBwYXRoLiBMb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gb25lIHRoYXQgaXMgZW5hYmxpbmcgYHZlcmlmaWVyLmNgLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gIEFuZCwgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3Mgc3BlY2lmaWNhbGx5IGd1YXJkaW5nIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIHdpdGhpbiBgdmVyaWZpZXIuY2AuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZy4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzMsIk91dHB1dFRva2VucyI6MTIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjU2LjgwMDc5NTAzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTYzNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICAgIFwiY2hlY2tfc3RhY2tfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdGFjayB3cml0ZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGNhbGxpbmcgY2xlYXJfc2NhbGFyX2lkKCkgb24gbmFycm93aW5nIHNwaWxscyB0byBwcm9wZXJseSByZXNldCBib3RoIGlkIGFuZCBkZWx0YS4gVGhpcyB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YWNrIHdyaXRlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgY2FsbGluZyBjbGVhcl9zY2FsYXJfaWQoKSBvbiBuYXJyb3dpbmcgc3BpbGxzIHRvIHByb3Blcmx5IHJlc2V0IGJvdGggaWQgYW5kIGRlbHRhLiBUaGlzIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjU2Ljg4MTM2NTE5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1MTYzMTg0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTo1Ni44ODE4MDM2MDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzUxNTg3NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCB2ZXJpZmllciByZWdpc3Rlci1zdGF0ZSBib29ra2VlcGluZyAoYHN0cnVjdCBicGZfcmVnX3N0YXRlYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGFjY2VzcyBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IC8gc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIEJQRiBwcm9ncmFtcy4gQW55IHZlcmlmaWVyIHRyYWNraW5nIGJ1Z3MgdGhhdCBtaWdodCByZXN1bHQgaW4gaW52YWxpZCBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0ZWM1OWRhYTUzNjY4Y2IyNGQ3NGFmN2ZiNTE3NzcxOTI3NjdkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uMjc0Y2Q4ZjU4YWRjMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzU4Miw3ICszNTgyLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4gXHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbiBcdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcbitcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4gXHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4gXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NTYuODgxODA0NjcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk5Nzk4NjUzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEluaXRpYWwgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBhIG5ldyBwYXRjaC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoaXMgdGhpbmcgc3lzdGVtYXRpY2FsbHkuIEknbSB0aGlua2luZywgXCJMZXQncyBhc3N1bWUgdGhpcyBpcyBrZXJuZWwtbGV2ZWwsIGxpa2VseSBCUEYgcmVsYXRlZC5cIiBTbywgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbGwgYmV0IGEgZmV3IHZpcnR1YWwgYnVja3MgdGhhdCB0aGUgaGVhcnQgb2YgdGhpcyBjaGFuZ2UgcmVzaWRlcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci5cblxuTXkgaW5pdGlhbCBhY3Rpb24gaXMgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHJlbGV2YW50IGNvbnRlbnQgc3Vycm91bmRpbmcgbGluZSAzNTgyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBvZiB0aGUgdmVyaWZpY2F0aW9uIGxvZ2ljIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIEkgd2FudCB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIsIHRoZSBpbW1lZGlhdGUgY29udGV4dCwgdG8gc3RhcnQgZm9ybWluZyBhIGh5cG90aGVzaXMgYWJvdXQgd2hhdCB0aGUgcGF0Y2ggYWltcyB0byBtb2RpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjA2Ljg2MTY3MzAyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTcwOlxcdFxcdGlmIChlcnIpXFxuMzU3MTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM1NzI6XFx0XFxuMzU3MzpcXHRcXHRjaGVja19mYXN0Y2FsbF9zdGFja19jb250cmFjdChlbnYsIHN0YXRlLCBpbnNuX2lkeCwgb2ZmKTtcXG4zNTc0OlxcdFxcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkpO1xcbjM1NzU6XFx0XFx0aWYgKHJlZyBcXHUwMDI2XFx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcXHUwMDI2XFx1MDAyNiBlbnYtXFx1MDAzZWJwZl9jYXBhYmxlKSB7XFxuMzU3NjpcXHRcXHRcXHRib29sIHJlZ192YWx1ZV9maXRzO1xcbjM1Nzc6XFx0XFxuMzU3ODpcXHRcXHRcXHRyZWdfdmFsdWVfZml0cyA9IGdldF9yZWdfd2lkdGgocmVnKSBcXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcXG4zNTc5OlxcdFxcdFxcdC8qIE1ha2Ugc3VyZSB0aGF0IHJlZyBoYWQgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbiBvbiBzcGlsbC4gKi9cXG4zNTgwOlxcdFxcdFxcdGlmIChyZWdfdmFsdWVfZml0cylcXG4zNTgxOlxcdFxcdFxcdFxcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XFxuMzU4MjpcXHRcXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcXG4zNTgzOlxcdFxcdFxcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cXG4zNTg0OlxcdFxcdFxcdGlmICghcmVnX3ZhbHVlX2ZpdHMpXFxuMzU4NTpcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcXG4zNTg2OlxcdFxcdH0gZWxzZSBpZiAoIXJlZyBcXHUwMDI2XFx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXFx1MDAyNlxcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcXHUwMDI2XFx1MDAyNlxcbjM1ODc6XFx0XFx0XFx0ICAgZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbjM1ODg6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcXHUwMDI2ZW52LVxcdTAwM2VmYWtlX3JlZ1swXTtcXG4zNTg5OlxcdFxcbjM1OTA6XFx0XFx0XFx0bWVtc2V0KHRtcF9yZWcsIDAsIHNpemVvZigqdG1wX3JlZykpO1xcbjM1OTE6XFx0XFx0XFx0X19tYXJrX3JlZ19rbm93bih0bXBfcmVnLCBpbnNuLVxcdTAwM2VpbW0pO1xcbjM1OTI6XFx0XFx0XFx0dG1wX3JlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4zNTkzOlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcXG4zNTk0OlxcdFxcdH0gZWxzZSBpZiAocmVnIFxcdTAwMjZcXHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpKSB7XFxuMzU5NTpcXHRcXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuMzU5NjpcXHRcXHRcXHRpZiAoc2l6ZSAhPSBCUEZfUkVHX1NJWkUpIHtcXG4zNTk3OlxcdFxcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXFxcIjsgXFxcIik7XFxuMzU5ODpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgc2l6ZSBvZiByZWdpc3RlciBzcGlsbFxcXFxuXFxcIik7XFxuMzU5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4zNjAwOlxcdFxcdFxcdH1cXG4zNjAxOlxcdFxcdFxcdGlmIChzdGF0ZSAhPSBjdXIgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xcbjM2MDI6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgc3BpbGwgcG9pbnRlcnMgdG8gc3RhY2sgaW50byBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyXFxcXG5cXFwiKTtcXG4zNjAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM2MDQ6XFx0XFx0XFx0fVxcbjM2MDU6XFx0XFx0XFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XFxuMzYwNjpcXHRcXHR9IGVsc2Uge1xcbjM2MDc6XFx0XFx0XFx0dTggdHlwZSA9IFNUQUNLX01JU0M7XFxuMzYwODpcXHRcXG4zNjA5OlxcdFxcdFxcdGlmIChicGZfaXNfc3BpbGxlZF9yZWcoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjI6MDYuODYyNjk3NDI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzcyMTEwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2UsIHRoaW5raW5nIGl0IHRocm91Z2ggYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBjbGVhcl9zY2FsYXJfaWRgIFJlcGxhY2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBzd2FwcGVkIG91dCBhIGRpcmVjdCB6ZXJvaW5nIGFzc2lnbm1lbnQ6IGBzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtgIHdpdGggYSBjYWxsIHRvIGEgZnVuY3Rpb24sIGBjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlIGFkZGVkIGZ1bmN0aW9uIGNhbGw/IFdlIHVzdWFsbHkgd2FudCB0byBhdm9pZCB0aGF0IG92ZXJoZWFkIGlmIGEgZGlyZWN0IGFzc2lnbm1lbnQgd29ya3MsIHBhcnRpY3VsYXJseSBpbiBwZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZS5cblxuTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCBgY2xlYXJfc2NhbGFyX2lkYCBpcyBkb2luZyBtb3JlIHRoYW4ganVzdCBzZXR0aW5nIHRoZSBgaWRgIGZpZWxkIHRvIHplcm8uIFBlcmhhcHMgaXQncyBhbHNvIHJlc3BvbnNpYmxlIGZvcjpcblxuKiAgICoqSGFuZGxpbmcgRGVwZW5kZW5jaWVzL1NpZGUgRWZmZWN0czoqKiBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIHdpdGhpbiBgc3BpbGxlZF9wdHJgIHRoYXQgbmVlZCB0byBiZSBjbGVhcmVkLCByZS1pbml0aWFsaXplZCwgb3IgaW52YWxpZGF0ZWQgd2hlbiB0aGUgSUQgaXMgcmVzZXQ/IEl0IGNvdWxkIGJlIGVuc3VyaW5nIGNvbnNpc3RlbmN5IG9yIHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24uXG4qICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBJcyB0aGlzIHBhcnQgb2YgYSBsYXJnZXIgc2NoZW1lIHRvIGZyZWUgb3IgbWFuYWdlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYHNwaWxsZWRfcHRyYD8gTWF5YmUgaXQncyByZWxlYXNpbmcgcmVzb3VyY2VzIHRoYXQgd2VyZSB0aWVkIHRvIHRoYXQgSUQuIE9yIHBlcmhhcHMsIGl0J3MgcHJldmVudGluZyB0aGUgSUQgZnJvbSBiZWNvbWluZyBhIGRhbmdsaW5nIHBvaW50ZXIuXG4qICAgKipBYnN0cmFjdGlvbiBhbmQgRW5jYXBzdWxhdGlvbjoqKiBJdCBjb3VsZCBiZSBhbiBlZmZvcnQgdG8gZW5jYXBzdWxhdGUgdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gY2xlYXJpbmcgYSBzY2FsYXIgSUQuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIGNoYW5nZSB0aGUgY2xlYXJpbmcgYmVoYXZpb3IgbGF0ZXIgd2l0aG91dCBoYXZpbmcgdG8gaHVudCBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBzcGlsbGVkX3B0ci5pZCA9IDA7YC5cbiogICAqKkZ1dHVyZSBQcm9vZmluZzoqKiBNYXliZSB0aGVyZSdzIGEgcGxhbm5lZCBleHBhbnNpb24gb2YgdGhlIGBzcGlsbGVkX3B0cmAgc3RydWN0dXJlLCBhbmQgYGNsZWFyX3NjYWxhcl9pZGAgaXMgZGVzaWduZWQgdG8gYmUgZWFzaWx5IHVwZGF0ZWQgdG8gaGFuZGxlIHRob3NlIG5ldyBmaWVsZHMgb3Igc3RhdGVzLlxuXG5JJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGNsZWFyX3NjYWxhcl9pZGAgbm93LiBJIG5lZWQgdG8gc2VlIHdoYXQgaXQgKmFjdHVhbGx5KiBkb2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgZ2l2ZSBtZSB0aGUga2V5IHRvIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSdtIGhvcGluZyB0byBmaW5kIGNvbW1lbnRzIGFuZCBhIHdlbGwtZGVzaWduZWQgZnVuY3Rpb24gdGhhdCBmb2xsb3dzIHRoZSBTaW5nbGUgUmVzcG9uc2liaWxpdHkgUHJpbmNpcGxlLiBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zOyBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjExLjY5OTkxMDcwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMzY5MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFyX3NjYWxhcl9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQxMD1zdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQxOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQxOTpzdGF0aWMgdm9pZCBjbGVhcl9zY2FsYXJfaWQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyMC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQyNT1zdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDM1LVxcdGlmIChzcmNfcmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MzY6XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDM3LVxcdC8qXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzUxNj1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1ODQtXFx0XFx0aWYgKCFyZWdfdmFsdWVfZml0cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzU4NTpcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU4Ni1cXHR9IGVsc2UgaWYgKCFyZWcgXFx1MDAyNlxcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFxcdTAwMjZcXHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zODYxPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE2LVxcdFxcdFxcdFxcdGlmIChnZXRfcmVnX3dpZHRoKHJlZykgXFx1MDAzZSBzaXplICogQklUU19QRVJfQllURSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkxNzpcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnN0YXRlLVxcdTAwM2VyZWdzW2RzdF9yZWdub10pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE4LVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM4MT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjAtXFx0XFx0XFx0aWYgKCFub19zZXh0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NjIxOlxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChcXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjIyLVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTQwOT1zdGF0aWMgdm9pZCBzY2FsYXJfYnl0ZV9zd2FwKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzctXFx0aWYgKG5lZWRfYnN3YXAgfHwgaW5zbi1cXHUwMDNlaW1tID09IDE2IHx8IGluc24tXFx1MDAzZWltbSA9PSAzMilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU0Mzg6XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQzOS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTY5OT1zdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDYtY2xlYXJfaWQ6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1ODQ3OlxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg1OS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NjA6XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg2MS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU4NjY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTQ5LVxcdFxcdFxcdFxcdFxcdFxcdGlmICghbm9fc2V4dClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5NTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk1MS1cXHRcXHRcXHRcXHRcXHRcXHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmIFxcdTAwM2VcXHUwMDNlIDMpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTc0LVxcdFxcdFxcdFxcdFxcdFxcdGlmICghaXNfc3JjX3JlZ191MzIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NzYtXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4My1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODUtXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3N1YnJlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjc4Nj1zdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2Nzk5LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODAwOlxcdFxcdGNsZWFyX3NjYWxhcl9pZChyZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwMS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5NDg9dm9pZCBicGZfY2xlYXJfc2luZ3VsYXJfaWRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NzAtXFx0XFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cXHUwMDNlaWQgXFx1MDAyNiB+QlBGX0FERF9DT05TVCkgPT0gMSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NzE6XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTcyLVxcdH0pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjI6MTIuNDQwMjkzMzMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjYwMTI4NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGBjbGVhcl9zY2FsYXJfaWRgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcHVycG9zZSBhbmQgY29udGV4dC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIElEIG9yIGlkZW50aWZpZXIgZm9yIGEgc2NhbGFyIHZhbHVlLCBhbmQgdGhhdCBcImNsZWFyXCIgaW1wbGllcyBhIHJlc2V0dGluZywgbnVsbGluZywgb3IgaW52YWxpZGF0aW5nIGFjdGlvbi4gSXTigJlzIGxpa2VseSB0aWVkIGludG8gc29tZSBsYXJnZXIgZGF0YSBzdHJ1Y3R1cmUgb3Igc3lzdGVtIHdoZXJlIHRoZXNlIHNjYWxhciBJRHMgYXJlIHNpZ25pZmljYW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBzY2FsYXJgIGlzIGJlaW5nIGRlZmluZWQsIHdoaWNoIHN5c3RlbSBpdCBpcyB1c2VkIGluLCBhbmQgd2hpY2ggdmFsdWVzIHRoaXMgSUQgd2lsbCByZWZlcmVuY2UuIElzIGBzY2FsYXJgIGEgcHJpbWl0aXZlIHR5cGUsIGFuIG9iamVjdCwgYSBwYXJ0aWN1bGFyIGNsYXNzIG9yIHN0cnVjdCB3aXRoIHNwZWNpZmljIHByb3BlcnRpZXM/IElzIGl0IHRpZWQgdG8gc29tZSBzcGVjaWZpYyBsaWJyYXJ5IG9yIGRhdGEgc3RvcmFnZSBzeXN0ZW0/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJ2NsZWFyaW5nJyB0aGlzIElEIGVudGFpbHMuIERvZXMgaXQgbWVyZWx5IHNldCB0aGUgdmFsdWUgdG8gYE5VTExgIG9yIGAtMWA/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgbWVtb3J5IG9yIHJlc291cmNlcz8gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3Igb3RoZXIgc2lkZSBlZmZlY3RzPyBDb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBhY2Nlc3NpbmcgdGhlIHNhbWUgc2NhbGFyIElELlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgSUQgaXMgYWxyZWFkeSBjbGVhcj8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IgZGV0ZWN0aW5nIGludmFsaWQgb3Igc3RhbGUgc2NhbGFyIElEcyBhZnRlciB0aGUgY2xlYXI/IElzIHRoZXJlIGFueSBjb25mbGljdCB3aXRoIG90aGVyIGZvcm1zIG9mIGNsZWFyaW5nPyBDYW4geW91IGNsZWFyIGEgc2NhbGFyIGFuZCBhc3NpZ24gYSBuZXcgdmFsdWU/XG5cbkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBzdXJyb3VuZGluZyBjb2RlLCB0byBzYWZlbHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSB0aGlzIGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMjoyNS4xMDA0MjQ1OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHJldHVybiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKTtcXG4zNDE3OlxcdH1cXG4zNDE4OlxcdFxcbjM0MTk6XFx0c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMzQyMDpcXHR7XFxuMzQyMTpcXHRcXHRyZWctXFx1MDAzZWlkID0gMDtcXG4zNDIyOlxcdFxcdHJlZy1cXHUwMDNlZGVsdGEgPSAwO1xcbjM0MjM6XFx0fVxcbjM0MjQ6XFx0XFxuMzQyNTpcXHRzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4zNDI2OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKVxcbjM0Mjc6XFx0e1xcbjM0Mjg6XFx0XFx0aWYgKHNyY19yZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxcbjM0Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjM0MzA6XFx0XFx0LypcXG4zNDMxOlxcdFxcdCAqIFRoZSB2ZXJpZmllciBpcyBwcm9jZXNzaW5nIHJYID0gclkgaW5zbiBhbmRcXG4zNDMyOlxcdFxcdCAqIHJZLVxcdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cXG4zNDMzOlxcdFxcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxcbjM0MzQ6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjI1LjEwMTUzMjc2NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjk2MTE4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2FmZXR5IG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBtYWtlIHN1cmUgaXQncyBzYWZlLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgcmVwbGFjZXMgYSBsaW5lIHRoYXQgd2FzIG9ubHkgcmVzZXR0aW5nIHRoZSBgaWRgIGZpZWxkIG9mIGEgYHNwaWxsZWRfcHRyYCB3aXRoIGEgY2FsbCB0byBgY2xlYXJfc2NhbGFyX2lkYCwgd2hpY2ggc2V0cyBib3RoIGBpZGAgYW5kIGBkZWx0YWAgdG8gemVyby4gRXNzZW50aWFsbHksIGl0J3MgbWFraW5nIHRoZSBiZWhhdmlvciBtb3JlIGNvbnNpc3RlbnQsIGVzcGVjaWFsbHkgZHVyaW5nIG5hcnJvd2luZyBzcGlsbHMgd2hlcmUgd2UncmUgYnJlYWtpbmcgc2NhbGFyIElEIHJlbGF0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJ1biB0aHJvdWdoIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGNoZWNrbGlzdC5cblxuMS4gICoqRXhwb3NpbmcgVW5pbml0aWFsaXplZCBNZW1vcnk6KiogTm9wZS4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgQlBGIHZlcmlmaWVyIHN0YXRlOyB3ZSdyZSB0YWxraW5nIGFib3V0IGByZWctXHUwMDNlaWRgIGFuZCBgcmVnLVx1MDAzZWRlbHRhYCB3aXRoaW4gdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuIE5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaGVyZS4gTm8gcmlzayBvZiBleHBvc2luZyBpbnRlcm5hbCBzdGF0ZS5cbjIuICAqKk1lbW9yeSBBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIENoYW5nZXM6KiogRG9lc24ndCBzZWVtIGxpa2UgaXQuIFRoZSBgc2F2ZV9yZWdpc3Rlcl9zdGF0ZWAgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBjb3B5aW5nLCBzbyB0aGUgcmVnaXN0ZXIgc3RhdGUgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBiZWZvcmUgdGhpcyBjb2RlIGlzIHJlYWNoZWQuIFNldHRpbmcgYGRlbHRhYCB0byB6ZXJvIHByZXZlbnRzIGEgc3RhbGUgYGRlbHRhYCB2YWx1ZSBmcm9tIGJlaW5nIHVzZWQgd2hlbiB0aGUgYGlkYCBpcyB6ZXJvLlxuMy4gICoqS01TQU4gSW52b2x2ZW1lbnQ6KiogTm90IGRpcmVjdGx5LiBLTVNBTiBpcyBncmVhdCBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBidWZmZXJzLCBwYWRkaW5nLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gTG9naWNhbCBlcnJvcnMgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBzYW5pdGl6ZXJzIGR1cmluZyBCUEYgcHJvZ3JhbSBleGVjdXRpb24uXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgS01TQU4vS0FTQU4gZGlzdGluY3Rpb24uIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCByZWFkcywgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGhlcmUuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0IHN1aXRlcyBjb3ZlciB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgZXJyb3JzLCBzdWNoIGFzIGFsbG93aW5nIE9PQiByZWFkcyBvciB3cml0ZXMgZHVyaW5nIEJQRiBleGVjdXRpb24uXG5cbkdpdmVuIGFsbCB0aGlzLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlIGlzIHplcm8uIFdlIHNob3VsZCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTY0LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjMwLjM5NzY1NDQwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCB2ZXJpZmllciByZWdpc3Rlci1zdGF0ZSBib29ra2VlcGluZyAoYHN0cnVjdCBicGZfcmVnX3N0YXRlYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGFjY2VzcyBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IC8gc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIEJQRiBwcm9ncmFtcy4gQW55IHZlcmlmaWVyIHRyYWNraW5nIGJ1Z3MgdGhhdCBtaWdodCByZXN1bHQgaW4gaW52YWxpZCBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIHRvIGNhbGwgYGNsZWFyX3NjYWxhcl9pZCgpYCBpbnN0ZWFkIG9mIG9ubHkgemVyb2luZyBgaWRgLCBlbnN1cmluZyB0aGF0IGJvdGggYGlkYCBhbmQgYGRlbHRhYCBhcmUgcHJvcGVybHkgcmVzZXQgd2hlbiBicmVha2luZyB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgcmVnaXN0ZXIgc3BpbGwuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 20:17:44 +0000 UTC FinishedAt: 2026-09-10 20:22:31 +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": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "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": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "d2bf173a-779c-4743-a0e7-262c76ac67f0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_stack_write_fixed_off", "check_stack_write" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cblxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhY2sgd3JpdGUgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBjYWxsaW5nIGNsZWFyX3NjYWxhcl9pZCgpIG9uIG5hcnJvd2luZyBzcGlsbHMgdG8gcHJvcGVybHkgcmVzZXQgYm90aCBpZCBhbmQgZGVsdGEuIFRoaXMgdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0ZWM1OWRhYTUzNjY4Y2IyNGQ3NGFmN2ZiNTE3NzcxOTI3NjdkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLjI3NGNkOGY1OGFkYzAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTM1ODIsNyAmIzQzOzM1ODIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcbiBcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xuIFx0XHRpZiAoIXJlZ192YWx1ZV9maXRzKVxuLVx0XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuaWQgPSAwO1xuJiM0MztcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4gXHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4gXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN0YWNrIHdyaXRlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgY2FsbGluZyBjbGVhcl9zY2FsYXJfaWQoKSBvbiBuYXJyb3dpbmcgc3BpbGxzIHRvIHByb3Blcmx5IHJlc2V0IGJvdGggaWQgYW5kIGRlbHRhLiBUaGlzIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNGVjNTlkYWE1MzY2OGNiMjRkNzRhZjdmYjUxNzc3MTkyNzY3ZDE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMjA6MjE6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uMjc0Y2Q4ZjU4YWRjMCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMzU4Miw3ICYjNDM7MzU4Miw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpOwogCQkvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgc3BpbGwuICovCiAJCWlmICghcmVnX3ZhbHVlX2ZpdHMpCi0JCQlzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5pZCA9IDA7CiYjNDM7CQkJY2xlYXJfc2NhbGFyX2lkKCZhbXA7c3RhdGUtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHIpOwogCX0gZWxzZSBpZiAoIXJlZyAmYW1wOyZhbXA7ICEob2ZmICUgQlBGX1JFR19TSVpFKSAmYW1wOyZhbXA7IGlzX2JwZl9zdF9tZW0oaW5zbikgJmFtcDsmYW1wOwogCQkgICBlbnYtJmd0O2JwZl9jYXBhYmxlKSB7CiAJCXN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gJmFtcDtlbnYtJmd0O2Zha2VfcmVnWzBdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIExvb2tpbmcgYXQgdGhlIGBkaWZmYCwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgc3RhY2sgd3JpdGVzIHdpdGggZml4ZWQgb2Zmc2V0cywgZm9jdXNpbmcgb24gYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAuIEkmIzM5O20gc2VlaW5nIGEgY2hhbmdlIGNvbmNlcm5pbmcgdGhlIGBzcGlsbGVkX3B0cmAgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBzdGFjayBzdGF0ZSwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gKG9yIG1vZGlmaWNhdGlvbikgb2YgYGNsZWFyX3NjYWxhcl9pZGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGluIG1vcmUgY29udGV4dCwgc28gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdldCBteSBiZWFyaW5ncyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24gZG9lcywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSB2ZXJpZmllciBsb2dpYy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBVc2luZyBteSBwcmVmZXJyZWQgdG9vbHMgKHByb2JhYmx5IGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgbGluZSAzNTgyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBwb3RlbnRpYWxseSBhIGBncmVwcGVyYCBjYWxsIHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIG9mIGBjbGVhcl9zY2FsYXJfaWRgKSwgSSYjMzk7bGwgbG9vayB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygc3RhY2sgc3RhdGUgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBgZW52LSZndDticGZfY2FwYWJsZWAgY2hlY2sgaXMgYWxzbyByZWxldmFudC4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gZm9ybSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2h5IHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeS4gSXMgaXQgYSBidWcgZml4PyBBbiBvcHRpbWl6YXRpb24/IERvZXMgaXQgcmVsYXRlIHRvIHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGVzIG9yIGNvbmZpZ3VyYXRpb25zPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSBldmVuIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21taXQgbWVzc2FnZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTcwOlx0XHRpZiAoZXJyKVxuMzU3MTpcdFx0XHRyZXR1cm4gZXJyO1xuMzU3MjpcdFxuMzU3MzpcdFx0Y2hlY2tfZmFzdGNhbGxfc3RhY2tfY29udHJhY3QoZW52LCBzdGF0ZSwgaW5zbl9pZHgsIG9mZik7XG4zNTc0Olx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbjM1NzU6XHRcdGlmIChyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbjM1NzY6XHRcdFx0Ym9vbCByZWdfdmFsdWVfZml0cztcbjM1Nzc6XHRcbjM1Nzg6XHRcdFx0cmVnX3ZhbHVlX2ZpdHMgPSBnZXRfcmVnX3dpZHRoKHJlZykgXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcbjM1Nzk6XHRcdFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xuMzU4MDpcdFx0XHRpZiAocmVnX3ZhbHVlX2ZpdHMpXG4zNTgxOlx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcbjM1ODI6XHRcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4zNTgzOlx0XHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbjM1ODQ6XHRcdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbjM1ODU6XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4zNTg2Olx0XHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbjM1ODc6XHRcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4zNTg4Olx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuMzU4OTpcdFxuMzU5MDpcdFx0XHRtZW1zZXQodG1wX3JlZywgMCwgc2l6ZW9mKCp0bXBfcmVnKSk7XG4zNTkxOlx0XHRcdF9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuMzU5MjpcdFx0XHR0bXBfcmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4zNTkzOlx0XHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcbjM1OTQ6XHRcdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpKSB7XG4zNTk1Olx0XHRcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cbjM1OTY6XHRcdFx0aWYgKHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XG4zNTk3Olx0XHRcdFx0dmVyYm9zZV9saW5mbyhlbnYsIGluc25faWR4LCBcJiMzNDs7IFwmIzM0Oyk7XG4zNTk4Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2ludmFsaWQgc2l6ZSBvZiByZWdpc3RlciBzcGlsbFxcblwmIzM0Oyk7XG4zNTk5Olx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4zNjAwOlx0XHRcdH1cbjM2MDE6XHRcdFx0aWYgKHN0YXRlICE9IGN1ciBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XG4zNjAyOlx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2Nhbm5vdCBzcGlsbCBwb2ludGVycyB0byBzdGFjayBpbnRvIHN0YWNrIGZyYW1lIG9mIHRoZSBjYWxsZXJcXG5cJiMzNDspO1xuMzYwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzYwNDpcdFx0XHR9XG4zNjA1Olx0XHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xuMzYwNjpcdFx0fSBlbHNlIHtcbjM2MDc6XHRcdFx0dTggdHlwZSA9IFNUQUNLX01JU0M7XG4zNjA4Olx0XG4zNjA5Olx0XHRcdGlmIChicGZfaXNfc3BpbGxlZF9yZWcoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZWZpbml0aW9uIG9mIGBjbGVhcl9zY2FsYXJfaWRgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBgY2xlYXJfc2NhbGFyX2lkYCBmdW5jdGlvbiBvciB2YXJpYWJsZS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHB1cnBvc2UgYW5kIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgSUQgb3IgaWRlbnRpZmllciBmb3IgYSBzY2FsYXIgdmFsdWUsIGFuZCB0aGF0ICYjMzQ7Y2xlYXImIzM0OyBpbXBsaWVzIGEgcmVzZXR0aW5nLCBudWxsaW5nLCBvciBpbnZhbGlkYXRpbmcgYWN0aW9uLiBJdOKAmXMgbGlrZWx5IHRpZWQgaW50byBzb21lIGxhcmdlciBkYXRhIHN0cnVjdHVyZSBvciBzeXN0ZW0gd2hlcmUgdGhlc2Ugc2NhbGFyIElEcyBhcmUgc2lnbmlmaWNhbnQuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBzY2FsYXJgIGlzIGJlaW5nIGRlZmluZWQsIHdoaWNoIHN5c3RlbSBpdCBpcyB1c2VkIGluLCBhbmQgd2hpY2ggdmFsdWVzIHRoaXMgSUQgd2lsbCByZWZlcmVuY2UuIElzIGBzY2FsYXJgIGEgcHJpbWl0aXZlIHR5cGUsIGFuIG9iamVjdCwgYSBwYXJ0aWN1bGFyIGNsYXNzIG9yIHN0cnVjdCB3aXRoIHNwZWNpZmljIHByb3BlcnRpZXM/IElzIGl0IHRpZWQgdG8gc29tZSBzcGVjaWZpYyBsaWJyYXJ5IG9yIGRhdGEgc3RvcmFnZSBzeXN0ZW0/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzk7Y2xlYXJpbmcmIzM5OyB0aGlzIElEIGVudGFpbHMuIERvZXMgaXQgbWVyZWx5IHNldCB0aGUgdmFsdWUgdG8gYE5VTExgIG9yIGAtMWA/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgbWVtb3J5IG9yIHJlc291cmNlcz8gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3Igb3RoZXIgc2lkZSBlZmZlY3RzPyBDb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBhY2Nlc3NpbmcgdGhlIHNhbWUgc2NhbGFyIElELgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgZWRnZSBjYXNlcy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBJRCBpcyBhbHJlYWR5IGNsZWFyPyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBkZXRlY3RpbmcgaW52YWxpZCBvciBzdGFsZSBzY2FsYXIgSURzIGFmdGVyIHRoZSBjbGVhcj8gSXMgdGhlcmUgYW55IGNvbmZsaWN0IHdpdGggb3RoZXIgZm9ybXMgb2YgY2xlYXJpbmc/IENhbiB5b3UgY2xlYXIgYSBzY2FsYXIgYW5kIGFzc2lnbiBhIG5ldyB2YWx1ZT8KCkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBzdXJyb3VuZGluZyBjb2RlLCB0byBzYWZlbHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSB0aGlzIGluIG15IHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYXJfc2NhbGFyX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTA9c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDE4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MTk6c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyMC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MjU9c3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzUtXHRpZiAoc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDM2Olx0XHRjbGVhcl9zY2FsYXJfaWQoc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNy1cdC8qXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTY9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU4NC1cdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTg1Olx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTg2LVx0fSBlbHNlIGlmICghcmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4NjE9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE2LVx0XHRcdFx0aWYgKGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2Ugc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkxNzpcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxOC1cdFx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzgxPXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjAtXHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MjE6XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0MDk9c3RhdGljIHZvaWQgc2NhbGFyX2J5dGVfc3dhcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQzNy1cdGlmIChuZWVkX2Jzd2FwIHx8IGluc24tXHUwMDNlaW1tID09IDE2IHx8IGluc24tXHUwMDNlaW1tID09IDMyKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDM4Olx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzktXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1Njk5PXN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDYtY2xlYXJfaWQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NDc6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ4LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg1OS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NjA6XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg2MS1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU4NjY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk0OS1cdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5NTA6XHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NTEtXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NzQtXHRcdFx0XHRcdFx0aWYgKCFpc19zcmNfcmVnX3UzMilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk3NTpcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk3Ni1cdFx0XHRcdFx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODMtXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0Olx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVx0XHRcdFx0XHRcdGNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Nzg2PXN0YXRpYyB2b2lkIF9fY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnJlZ19zZXQsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2Nzk5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwMDpcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQ4PXZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk3MC1cdFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NzE6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NzItXHR9KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM0MTkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3RhdGUgdHJhY2tpbmcsIG9yIHBvdGVudGlhbCBzZWN1cml0eSBjaGVja3MuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBwYXR0ZXJuIG9yIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlci4KClRoYXQgbGluZSBudW1iZXIgaXMgdXN1YWxseSBhIGdvb2QgaW5kaWNhdG9yIG9mIHNvbWUgc3BlY2lmaWMgbG9naWMgLSBQZXJoYXBzIGEgcG90ZW50aWFsIGFyaXRobWV0aWMgZmxhdywgb3IgbWF5YmUgYSBzdGF0ZS1tYWNoaW5lIGlzc3VlLCBvciBldmVuIGEgc3VidGxlIGVycm9yIGNvbmRpdGlvbiB3aGVyZSBhIGNlcnRhaW4ga2luZCBvZiBpbnZhbGlkIEJQRiBwcm9ncmFtIGlzIHBhc3NpbmcgdGhlIGluaXRpYWwgdmVyaWZpY2F0aW9uIHN0ZXBzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuLi4gV2hhdCBhcmUgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucz8gV2hpY2ggdmVyaWZpZXIgc3RhZ2VzIGlzIHRoaXMgbGluZSB3aXRoaW4/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gdGhlIGNvbW1lbnRzIG9yIHZhcmlhYmxlIG5hbWVzIGFyb3VuZCB0aGVyZT8gTGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDE1Olx0XG4zNDE2Olx0XHRyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbjM0MTc6XHR9XG4zNDE4Olx0XG4zNDE5Olx0c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4zNDIwOlx0e1xuMzQyMTpcdFx0cmVnLVx1MDAzZWlkID0gMDtcbjM0MjI6XHRcdHJlZy1cdTAwM2VkZWx0YSA9IDA7XG4zNDIzOlx0fVxuMzQyNDpcdFxuMzQyNTpcdHN0YXRpYyB2b2lkIGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuMzQyNjpcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZylcbjM0Mjc6XHR7XG4zNDI4Olx0XHRpZiAoc3JjX3JlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcbjM0Mjk6XHRcdFx0cmV0dXJuO1xuMzQzMDpcdFx0LypcbjM0MzE6XHRcdCAqIFRoZSB2ZXJpZmllciBpcyBwcm9jZXNzaW5nIHJYID0gclkgaW5zbiBhbmRcbjM0MzI6XHRcdCAqIHJZLVx1MDAzZWlkIGhhcyBzcGVjaWFsIGxpbmtlZCByZWdpc3RlciBhbHJlYWR5LlxuMzQzMzpcdFx0ICogQ2xlYXJlZCBpdCwgc2luY2UgbXVsdGlwbGUgclggJiM0Mzs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxuMzQzNDpcdFx0ICovXG4zNDM1Olx0XHRpZiAoc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbjM0MzY6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHNyY19yZWcpO1xuMzQzNzpcdFx0LypcbjM0Mzg6XHRcdCAqIEVuc3VyZSB0aGF0IHNyY19yZWcgaGFzIGEgdmFsaWQgSUQgdGhhdCB3aWxsIGJlIGNvcGllZCB0b1xuMzQzOTpcdFx0ICogZHN0X3JlZyBhbmQgdGhlbiB3aWxsIGJlIHVzZWQgYnkgc3luY19saW5rZWRfcmVncygpIHRvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgQlBGIFZlcmlmaWVyIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIEJQRiB2ZXJpZmllciBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBgY2xlYXJfc2NhbGFyX2lkYCBmdW5jdGlvbiBpcyBiZWluZyBlbmhhbmNlZC4gUHJldmlvdXNseSwgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgb25seSB6ZXJvZWQgb3V0IHRoZSBgaWRgIGZpZWxkIG9mIGEgYHNwaWxsZWRfcHRyYCBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrLiBOb3csIHdpdGggdGhpcyBjaGFuZ2UsIHdlJiMzOTtyZSBjYWxsaW5nIGBjbGVhcl9zY2FsYXJfaWRgLCB3aGljaCB6ZXJvcyBib3RoIGBpZGAgKmFuZCogYGRlbHRhYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGEgY2xlYW51cCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgpUaGUgQlBGIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIGtub3cgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgdmlhIHRoZSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIHN5c2NhbGwg4oCTIHN5emthbGxlciBsb3ZlcyB0byBoYW1tZXIgaXQuIFRoYXQgbWVhbnMgYW55IGNoYW5nZSBoZXJlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdGllcywgc2luY2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIG9mIGV4ZWN1dGFibGUgbG9naWMgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0uIEkgaGF2ZSB0byB2ZXJpZnkgdGhlIHBvc3NpYmxlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCAqY2FuKiB0aGlzIGJlIGV4cGxvaXRlZCBpbiBRRU1VPyBBbmQsIG9mIGNvdXJzZSwgdGhlIGFuc3dlciBpcyB5ZXMsIHZlcnkgZWFzaWx5OiBCUEYgaXMgdXNlci1hY2Nlc3NpYmxlIHZpYSBzeXNjYWxscywgc28gdGhpcyBjb2RlIGlzIGVhc2lseSByZWFjaGFibGUuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGBCUEZfU1lTQ0FMTGAgKGFuZCBgQlBGYCksIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBga2VybmVsL2JwZi92ZXJpZmllci5jYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmaWVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzUxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgYSBCUEYtcmVsYXRlZCBzZXR0aW5nLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5IHdoZXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMuIEkgbmVlZCB0byBiZSBlZmZpY2llbnQgYW5kIHBpbnBvaW50IHRoZSAqZXhhY3QqIGxvY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCB0aGUgdHJpY2tzIGZvciBuYXZpZ2F0aW5nIHRoZSBLY29uZmlnIHN5c3RlbTsgYXJlIHdlIGxvb2tpbmcgYXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzLCBvciBhIGdlbmVyYWwgZmVhdHVyZSBjb25maWc/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBtYXliZSB1c2Ugc29tZSBncmVwLWZ1IHdpdGggYC1yYCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3RhcnRpbmcgYXQgdGhlIHJvb3QsIHRvIGJlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBwYXJzZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMuIEl0IGNvdWxkIGJlIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBiYXNlZCBvbiBvdGhlciBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbnMsIG9yIGV2ZW4gaGFyZHdhcmUgcGxhdGZvcm1zLiBJJiMzOTtsbCBsb29rIGZvciBgZGVwZW5kcyBvbmAgZGlyZWN0aXZlcyB0byB1bmRlcnN0YW5kIHRoZSBhY3RpdmF0aW9uIGxvZ2ljLiBVbHRpbWF0ZWx5LCBrbm93aW5nIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBlbmFibGVkIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgcG9ydGluZywgb3IgcmVjb25maWd1cmluZyBCUEYgc3VwcG9ydC4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMjUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIGZlYXR1cmVzLiBLbm93aW5nIHRoZSBleGFjdCBvcHRpb25zIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB0aGUgY29uZmlndXJhdGlvbiBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzIGFuZCBhcmNoaXRlY3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdHMgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIHZhcmlvdXMgQlBGIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSByaWdodCBiYWxhbmNlIG9mIGZ1bmN0aW9uYWxpdHksIHNlY3VyaXR5LCBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcbiAgMjE6XHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxuICAyMjpcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG4gIDIzOlx0XHRib29sXG4gIDI0Olx0XG4gIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA0NjpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA0OTpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRl9TWVNDQUxMIERlcGVuZGVuY3kqKgoKT2theSwgc28gYEJQRl9TWVNDQUxMYCBkb2VzbiYjMzk7dCBoYXZlIGEgZGlyZWN0IGBkZXBlbmRzIG9uYCwgYnV0IGl0IGRvZXMgKnNlbGVjdCogQlBGLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBGaXJzdCwgbGV0JiMzOTtzIGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgb3IgcGVyaGFwcyByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIGlzIHN0YXRpYyBvciBub3QuCgpBaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uLiBJdCBsaXZlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU28sIGFzIEkmIzM5O2QgZXhwZWN0LCBiZWNhdXNlIHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYSAuYyBmaWxlLCBpdCYjMzk7bGwgc2hvdyB1cCBpbiB0aGUgdm1saW51eCBzeW1ib2wgdGFibGUgKHVubGVzcyB0aGUgY29tcGlsZXIgaW5saW5lcyBpdCwgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kKS4gQWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBzZWFyY2ggZm9yIGl0LCBhbG9uZyB3aXRoIGBjaGVja19tZW1fYWNjZXNzYCBvciBgY2hlY2tfc3RhY2tfd3JpdGVgLgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zNTAxPXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTE1LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM1MTY6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTE3LVx0XHRcdFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJiMzOTtyZSB3cml0aW5nIHRvICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwNzk9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxMzEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDEzMjovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxMzMtICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDE0MT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxNDktXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDE1MDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTUxLVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTIxMD1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTIzOS1cdFx0cG9pbnRlcl9kZXNjID0gXCYjMzQ7c3RhY2sgXCYjMzQ7O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUyNDA6XHRcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNDEtXHRcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMwoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBjb2RlLCBJIHNlZSB0aGF0IGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfd3JpdGVgLCBhbmQgYGNsZWFyX3NjYWxhcl9pZGAgYXJlIGFsbCBuZXN0bGVkIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIEZpcnN0IHRoaW5nLCBJIGNvbmZpcm1lZCB0aGF0IGBicGZfY2hlY2tgIGlzIGluZGVlZCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCByaWdodCBhdCB0aGUgdG9wIG9mIGB2ZXJpZmllci5jYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4KCk15IGdvYWwgbm93IGlzIHRvIGZvY3VzIG9uIHRoZSBrZXkgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBpZGVudGlmeWluZyAgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgYW5kIGBjaGVja19zdGFja193cml0ZWAgYXMgdGhlIHRhcmdldHMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZGVzY3JpcHRpb24sIGVzcGVjaWFsbHkgc2luY2UgdGhlIHBhdGNoIGRlYWxzIHdpdGggY2xlYXJpbmcgc2NhbGFyIElEcyB3aGVuIHN0YWNrIHNwaWxscyBoYXBwZW4uIEkgbm90aWNlZCB0aGF0IGBjbGVhcl9zY2FsYXJfaWRgIGlzIGEgdmVyeSBzbWFsbCBmdW5jdGlvbi4gR2l2ZW4gaXQgaXMgb25seSA0IGxpbmVzLCBpdCBpcyBsaWtlbHkgaW5saW5lZCwgb3IgZWFzaWx5IGNvdWxkIGJlLiBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIG11Y2ggbGFyZ2VyLCB3aXRoIGh1bmRyZWRzIG9mIGxpbmVzLiBJdCBpcyB2ZXJ5IGxpa2VseSAqbm90KiBpbmxpbmVkLgoKVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhci4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpbiBgdmVyaWZpZXIuY2ApLCB1c2luZyBgY2xlYXJfc2NhbGFyX2lkYCB3aGVuIGJyZWFraW5nIHNjYWxhciBJRCByZWxhdGlvbnMgb24gbmFycm93aW5nIHN0YWNrIHNwaWxscywgc28gd2UgcmVzZXQgYm90aCB0aGUgcmVnaXN0ZXImIzM5O3MgSUQgYW5kIGRlbHRhLiBUaGUgYEJQRl9QUk9HX0xPQURgIHN5c2NhbGwgdmlhIGBicGYoKWAgaXMgdGhlIGVudHJ5IHBvaW50LCBzbyBpdCBsb29rcyBsaWtlIHZlcmlmaWNhdGlvbiBsb2dpYyBpcyByZWFjaGFibGUuCgpJIGFsc28gY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3MgaW4gdGhlIHBhdGguIExvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBvbmUgdGhhdCBpcyBlbmFibGluZyBgdmVyaWZpZXIuY2AsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiAgQW5kLCB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlncyBzcGVjaWZpY2FsbHkgZ3VhcmRpbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgd2l0aGluIGB2ZXJpZmllci5jYC4KCkFscmlnaHQsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtjaGVja19zdGFja193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdGFjayB3cml0ZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGNhbGxpbmcgY2xlYXJfc2NhbGFyX2lkKCkgb24gbmFycm93aW5nIHNwaWxscyB0byBwcm9wZXJseSByZXNldCBib3RoIGlkIGFuZCBkZWx0YS4gVGhpcyB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtjaGVja19zdGFja193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdGFjayB3cml0ZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGNhbGxpbmcgY2xlYXJfc2NhbGFyX2lkKCkgb24gbmFycm93aW5nIHNwaWxscyB0byBwcm9wZXJseSByZXNldCBib3RoIGlkIGFuZCBkZWx0YS4gVGhpcyB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cblxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM0ZWM1OWRhYTUzNjY4Y2IyNGQ3NGFmN2ZiNTE3NzcxOTI3NjdkMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li4yNzRjZDhmNThhZGMwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0zNTgyLDcgJiM0MzszNTgyLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJc2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7CiAJCS8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi8KIAkJaWYgKCFyZWdfdmFsdWVfZml0cykKLQkJCXN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDsKJiM0MzsJCQljbGVhcl9zY2FsYXJfaWQoJmFtcDtzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7CiAJfSBlbHNlIGlmICghcmVnICZhbXA7JmFtcDsgIShvZmYgJSBCUEZfUkVHX1NJWkUpICZhbXA7JmFtcDsgaXNfYnBmX3N0X21lbShpbnNuKSAmYW1wOyZhbXA7CiAJCSAgIGVudi0mZ3Q7YnBmX2NhcGFibGUpIHsKIAkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSAmYW1wO2Vudi0mZ3Q7ZmFrZV9yZWdbMF07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOgoKKipBbmFseXppbmcgdGhlIFBhdGNoOiBJbml0aWFsIFRob3VnaHRzKioKCkFscmlnaHQsIGEgbmV3IHBhdGNoLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcyB0aGluZyBzeXN0ZW1hdGljYWxseS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3MgYXNzdW1lIHRoaXMgaXMga2VybmVsLWxldmVsLCBsaWtlbHkgQlBGIHJlbGF0ZWQuJiMzNDsgU28sIHRoZSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTtsbCBiZXQgYSBmZXcgdmlydHVhbCBidWNrcyB0aGF0IHRoZSBoZWFydCBvZiB0aGlzIGNoYW5nZSByZXNpZGVzIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLgoKTXkgaW5pdGlhbCBhY3Rpb24gaXMgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHJlbGV2YW50IGNvbnRlbnQgc3Vycm91bmRpbmcgbGluZSAzNTgyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgb2YgdGhlIHZlcmlmaWNhdGlvbiBsb2dpYyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBJIHdhbnQgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB0aGUgaW1tZWRpYXRlIGNvbnRleHQsIHRvIHN0YXJ0IGZvcm1pbmcgYSBoeXBvdGhlc2lzIGFib3V0IHdoYXQgdGhlIHBhdGNoIGFpbXMgdG8gbW9kaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU3MDpcdFx0aWYgKGVycilcbjM1NzE6XHRcdFx0cmV0dXJuIGVycjtcbjM1NzI6XHRcbjM1NzM6XHRcdGNoZWNrX2Zhc3RjYWxsX3N0YWNrX2NvbnRyYWN0KGVudiwgc3RhdGUsIGluc25faWR4LCBvZmYpO1xuMzU3NDpcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSk7XG4zNTc1Olx0XHRpZiAocmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4zNTc2Olx0XHRcdGJvb2wgcmVnX3ZhbHVlX2ZpdHM7XG4zNTc3Olx0XG4zNTc4Olx0XHRcdHJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpIFx1MDAzYz0gQklUU19QRVJfQllURSAqIHNpemU7XG4zNTc5Olx0XHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHJlZyBoYWQgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbiBvbiBzcGlsbC4gKi9cbjM1ODA6XHRcdFx0aWYgKHJlZ192YWx1ZV9maXRzKVxuMzU4MTpcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XG4zNTgyOlx0XHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xuMzU4MzpcdFx0XHQvKiBCcmVhayB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgc3BpbGwuICovXG4zNTg0Olx0XHRcdGlmICghcmVnX3ZhbHVlX2ZpdHMpXG4zNTg1Olx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xuMzU4NjpcdFx0fSBlbHNlIGlmICghcmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXHUwMDI2XHUwMDI2XG4zNTg3Olx0XHRcdCAgIGVudi1cdTAwM2VicGZfY2FwYWJsZSkge1xuMzU4ODpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdG1wX3JlZyA9IFx1MDAyNmVudi1cdTAwM2VmYWtlX3JlZ1swXTtcbjM1ODk6XHRcbjM1OTA6XHRcdFx0bWVtc2V0KHRtcF9yZWcsIDAsIHNpemVvZigqdG1wX3JlZykpO1xuMzU5MTpcdFx0XHRfX21hcmtfcmVnX2tub3duKHRtcF9yZWcsIGluc24tXHUwMDNlaW1tKTtcbjM1OTI6XHRcdFx0dG1wX3JlZy1cdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xuMzU5MzpcdFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgdG1wX3JlZywgc2l6ZSk7XG4zNTk0Olx0XHR9IGVsc2UgaWYgKHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKSkge1xuMzU5NTpcdFx0XHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXG4zNTk2Olx0XHRcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xuMzU5NzpcdFx0XHRcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXCYjMzQ7OyBcJiMzNDspO1xuMzU5ODpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtpbnZhbGlkIHNpemUgb2YgcmVnaXN0ZXIgc3BpbGxcXG5cJiMzNDspO1xuMzU5OTpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMzYwMDpcdFx0XHR9XG4zNjAxOlx0XHRcdGlmIChzdGF0ZSAhPSBjdXIgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xuMzYwMjpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3Qgc3BpbGwgcG9pbnRlcnMgdG8gc3RhY2sgaW50byBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyXFxuXCYjMzQ7KTtcbjM2MDM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM2MDQ6XHRcdFx0fVxuMzYwNTpcdFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcbjM2MDY6XHRcdH0gZWxzZSB7XG4zNjA3Olx0XHRcdHU4IHR5cGUgPSBTVEFDS19NSVNDO1xuMzYwODpcdFxuMzYwOTpcdFx0XHRpZiAoYnBmX2lzX3NwaWxsZWRfcmVnKFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlLCB0aGlua2luZyBpdCB0aHJvdWdoIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGNsZWFyX3NjYWxhcl9pZGAgUmVwbGFjZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIHN3YXBwZWQgb3V0IGEgZGlyZWN0IHplcm9pbmcgYXNzaWdubWVudDogYHN0YXRlLSZndDtzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtgIHdpdGggYSBjYWxsIHRvIGEgZnVuY3Rpb24sIGBjbGVhcl9zY2FsYXJfaWQoJmFtcDtzdGF0ZS0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlIGFkZGVkIGZ1bmN0aW9uIGNhbGw/IFdlIHVzdWFsbHkgd2FudCB0byBhdm9pZCB0aGF0IG92ZXJoZWFkIGlmIGEgZGlyZWN0IGFzc2lnbm1lbnQgd29ya3MsIHBhcnRpY3VsYXJseSBpbiBwZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZS4KCk15IGltbWVkaWF0ZSBoeXBvdGhlc2lzIGlzIHRoYXQgYGNsZWFyX3NjYWxhcl9pZGAgaXMgZG9pbmcgbW9yZSB0aGFuIGp1c3Qgc2V0dGluZyB0aGUgYGlkYCBmaWVsZCB0byB6ZXJvLiBQZXJoYXBzIGl0JiMzOTtzIGFsc28gcmVzcG9uc2libGUgZm9yOgoKKiAgICoqSGFuZGxpbmcgRGVwZW5kZW5jaWVzL1NpZGUgRWZmZWN0czoqKiBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIHdpdGhpbiBgc3BpbGxlZF9wdHJgIHRoYXQgbmVlZCB0byBiZSBjbGVhcmVkLCByZS1pbml0aWFsaXplZCwgb3IgaW52YWxpZGF0ZWQgd2hlbiB0aGUgSUQgaXMgcmVzZXQ/IEl0IGNvdWxkIGJlIGVuc3VyaW5nIGNvbnNpc3RlbmN5IG9yIHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24uCiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIElzIHRoaXMgcGFydCBvZiBhIGxhcmdlciBzY2hlbWUgdG8gZnJlZSBvciBtYW5hZ2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBgc3BpbGxlZF9wdHJgPyBNYXliZSBpdCYjMzk7cyByZWxlYXNpbmcgcmVzb3VyY2VzIHRoYXQgd2VyZSB0aWVkIHRvIHRoYXQgSUQuIE9yIHBlcmhhcHMsIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIElEIGZyb20gYmVjb21pbmcgYSBkYW5nbGluZyBwb2ludGVyLgoqICAgKipBYnN0cmFjdGlvbiBhbmQgRW5jYXBzdWxhdGlvbjoqKiBJdCBjb3VsZCBiZSBhbiBlZmZvcnQgdG8gZW5jYXBzdWxhdGUgdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gY2xlYXJpbmcgYSBzY2FsYXIgSUQuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIGNoYW5nZSB0aGUgY2xlYXJpbmcgYmVoYXZpb3IgbGF0ZXIgd2l0aG91dCBoYXZpbmcgdG8gaHVudCBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBzcGlsbGVkX3B0ci5pZCA9IDA7YC4KKiAgICoqRnV0dXJlIFByb29maW5nOioqIE1heWJlIHRoZXJlJiMzOTtzIGEgcGxhbm5lZCBleHBhbnNpb24gb2YgdGhlIGBzcGlsbGVkX3B0cmAgc3RydWN0dXJlLCBhbmQgYGNsZWFyX3NjYWxhcl9pZGAgaXMgZGVzaWduZWQgdG8gYmUgZWFzaWx5IHVwZGF0ZWQgdG8gaGFuZGxlIHRob3NlIG5ldyBmaWVsZHMgb3Igc3RhdGVzLgoKSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCBub3cuIEkgbmVlZCB0byBzZWUgd2hhdCBpdCAqYWN0dWFsbHkqIGRvZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgZ2l2ZSBtZSB0aGUga2V5IHRvIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBjb21tZW50cyBhbmQgYSB3ZWxsLWRlc2lnbmVkIGZ1bmN0aW9uIHRoYXQgZm9sbG93cyB0aGUgU2luZ2xlIFJlc3BvbnNpYmlsaXR5IFByaW5jaXBsZS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM7IEkgbmVlZCB0byBhc3Nlc3MgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYXJfc2NhbGFyX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTA9c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDE4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MTk6c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyMC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MjU9c3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzUtXHRpZiAoc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjYgQlBGX0FERF9DT05TVClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDM2Olx0XHRjbGVhcl9zY2FsYXJfaWQoc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNy1cdC8qXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTY9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU4NC1cdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTg1Olx0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTg2LVx0fSBlbHNlIGlmICghcmVnIFx1MDAyNlx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXHUwMDI2XHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM4NjE9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE2LVx0XHRcdFx0aWYgKGdldF9yZWdfd2lkdGgocmVnKSBcdTAwM2Ugc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkxNzpcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKFx1MDAyNnN0YXRlLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxOC1cdFx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzgxPXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjAtXHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MjE6XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0MDk9c3RhdGljIHZvaWQgc2NhbGFyX2J5dGVfc3dhcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQzNy1cdGlmIChuZWVkX2Jzd2FwIHx8IGluc24tXHUwMDNlaW1tID09IDE2IHx8IGluc24tXHUwMDNlaW1tID09IDMyKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDM4Olx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzktXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1Njk5PXN0YXRpYyBpbnQgYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDYtY2xlYXJfaWQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NDc6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ4LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg1OS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NjA6XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg2MS1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU4NjY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk0OS1cdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5NTA6XHRcdFx0XHRcdFx0XHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NTEtXHRcdFx0XHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXHUwMDNlb2ZmIFx1MDAzZVx1MDAzZSAzKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NzQtXHRcdFx0XHRcdFx0aWYgKCFpc19zcmNfcmVnX3UzMilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk3NTpcdFx0XHRcdFx0XHRcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk3Ni1cdFx0XHRcdFx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODMtXHRcdFx0XHRcdFx0aWYgKCFub19zZXh0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0Olx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVx0XHRcdFx0XHRcdGNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiBcdTAwM2VcdTAwM2UgMyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Nzg2PXN0YXRpYyB2b2lkIF9fY29sbGVjdF9saW5rZWRfcmVncyhzdHJ1Y3QgbGlua2VkX3JlZ3MgKnJlZ19zZXQsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2Nzk5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwMDpcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQ4PXZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk3MC1cdFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cdTAwM2VpZCBcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NzE6XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NzItXHR9KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24gb3IgdmFyaWFibGUuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBwdXJwb3NlIGFuZCBjb250ZXh0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIElEIG9yIGlkZW50aWZpZXIgZm9yIGEgc2NhbGFyIHZhbHVlLCBhbmQgdGhhdCAmIzM0O2NsZWFyJiMzNDsgaW1wbGllcyBhIHJlc2V0dGluZywgbnVsbGluZywgb3IgaW52YWxpZGF0aW5nIGFjdGlvbi4gSXTigJlzIGxpa2VseSB0aWVkIGludG8gc29tZSBsYXJnZXIgZGF0YSBzdHJ1Y3R1cmUgb3Igc3lzdGVtIHdoZXJlIHRoZXNlIHNjYWxhciBJRHMgYXJlIHNpZ25pZmljYW50LgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBgc2NhbGFyYCBpcyBiZWluZyBkZWZpbmVkLCB3aGljaCBzeXN0ZW0gaXQgaXMgdXNlZCBpbiwgYW5kIHdoaWNoIHZhbHVlcyB0aGlzIElEIHdpbGwgcmVmZXJlbmNlLiBJcyBgc2NhbGFyYCBhIHByaW1pdGl2ZSB0eXBlLCBhbiBvYmplY3QsIGEgcGFydGljdWxhciBjbGFzcyBvciBzdHJ1Y3Qgd2l0aCBzcGVjaWZpYyBwcm9wZXJ0aWVzPyBJcyBpdCB0aWVkIHRvIHNvbWUgc3BlY2lmaWMgbGlicmFyeSBvciBkYXRhIHN0b3JhZ2Ugc3lzdGVtPwoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM5O2NsZWFyaW5nJiMzOTsgdGhpcyBJRCBlbnRhaWxzLiBEb2VzIGl0IG1lcmVseSBzZXQgdGhlIHZhbHVlIHRvIGBOVUxMYCBvciBgLTFgPyBEb2VzIGl0IGludm9sdmUgcmVsZWFzaW5nIG1lbW9yeSBvciByZXNvdXJjZXM/IERvZXMgaXQgdHJpZ2dlciBhbnkgY2FsbGJhY2tzIG9yIG90aGVyIHNpZGUgZWZmZWN0cz8gQ29uc2lkZXJpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHNjZW5hcmlvcywgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjbGVhcmluZyBvcGVyYXRpb24gaXMgdGhyZWFkLXNhZmUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRoYXQgbWlnaHQgYmUgYWNjZXNzaW5nIHRoZSBzYW1lIHNjYWxhciBJRC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgSUQgaXMgYWxyZWFkeSBjbGVhcj8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IgZGV0ZWN0aW5nIGludmFsaWQgb3Igc3RhbGUgc2NhbGFyIElEcyBhZnRlciB0aGUgY2xlYXI/IElzIHRoZXJlIGFueSBjb25mbGljdCB3aXRoIG90aGVyIGZvcm1zIG9mIGNsZWFyaW5nPyBDYW4geW91IGNsZWFyIGEgc2NhbGFyIGFuZCBhc3NpZ24gYSBuZXcgdmFsdWU/CgpJbiBlc3NlbmNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSwgaW5jbHVkaW5nIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgb3Igc3Vycm91bmRpbmcgY29kZSwgdG8gc2FmZWx5IGFuZCBlZmZlY3RpdmVseSB1c2UgdGhpcyBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQxNTpcdFxuMzQxNjpcdFx0cmV0dXJuIGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSk7XG4zNDE3Olx0fVxuMzQxODpcdFxuMzQxOTpcdHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuMzQyMDpcdHtcbjM0MjE6XHRcdHJlZy1cdTAwM2VpZCA9IDA7XG4zNDIyOlx0XHRyZWctXHUwMDNlZGVsdGEgPSAwO1xuMzQyMzpcdH1cbjM0MjQ6XHRcbjM0MjU6XHRzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjM0MjY6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyY19yZWcpXG4zNDI3Olx0e1xuMzQyODpcdFx0aWYgKHNyY19yZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4zNDI5Olx0XHRcdHJldHVybjtcbjM0MzA6XHRcdC8qXG4zNDMxOlx0XHQgKiBUaGUgdmVyaWZpZXIgaXMgcHJvY2Vzc2luZyByWCA9IHJZIGluc24gYW5kXG4zNDMyOlx0XHQgKiByWS1cdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cbjM0MzM6XHRcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICYjNDM7PSBjb25zdCBhcmUgbm90IHN1cHBvcnRlZC5cbjM0MzQ6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTY0CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNhZmV0eSBvZiBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3Mgc2FmZS4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHJlcGxhY2VzIGEgbGluZSB0aGF0IHdhcyBvbmx5IHJlc2V0dGluZyB0aGUgYGlkYCBmaWVsZCBvZiBhIGBzcGlsbGVkX3B0cmAgd2l0aCBhIGNhbGwgdG8gYGNsZWFyX3NjYWxhcl9pZGAsIHdoaWNoIHNldHMgYm90aCBgaWRgIGFuZCBgZGVsdGFgIHRvIHplcm8uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBtYWtpbmcgdGhlIGJlaGF2aW9yIG1vcmUgY29uc2lzdGVudCwgZXNwZWNpYWxseSBkdXJpbmcgbmFycm93aW5nIHNwaWxscyB3aGVyZSB3ZSYjMzk7cmUgYnJlYWtpbmcgc2NhbGFyIElEIHJlbGF0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBydW4gdGhyb3VnaCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBjaGVja2xpc3QuCgoxLiAgKipFeHBvc2luZyBVbmluaXRpYWxpemVkIE1lbW9yeToqKiBOb3BlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBCUEYgdmVyaWZpZXIgc3RhdGU7IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGByZWctJmd0O2lkYCBhbmQgYHJlZy0mZ3Q7ZGVsdGFgIHdpdGhpbiB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gTm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBoZXJlLiBObyByaXNrIG9mIGV4cG9zaW5nIGludGVybmFsIHN0YXRlLgoyLiAgKipNZW1vcnkgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBDaGFuZ2VzOioqIERvZXNuJiMzOTt0IHNlZW0gbGlrZSBpdC4gVGhlIGBzYXZlX3JlZ2lzdGVyX3N0YXRlYCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIGNvcHlpbmcsIHNvIHRoZSByZWdpc3RlciBzdGF0ZSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGNvZGUgaXMgcmVhY2hlZC4gU2V0dGluZyBgZGVsdGFgIHRvIHplcm8gcHJldmVudHMgYSBzdGFsZSBgZGVsdGFgIHZhbHVlIGZyb20gYmVpbmcgdXNlZCB3aGVuIHRoZSBgaWRgIGlzIHplcm8uCjMuICAqKktNU0FOIEludm9sdmVtZW50OioqIE5vdCBkaXJlY3RseS4gS01TQU4gaXMgZ3JlYXQgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAqcmVhZHMqIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBMb2dpY2FsIGVycm9ycyBpbiB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHNhbml0aXplcnMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIEtNU0FOL0tBU0FOIGRpc3RpbmN0aW9uLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBoZXJlLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdCBzdWl0ZXMgY292ZXIgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBlcnJvcnMsIHN1Y2ggYXMgYWxsb3dpbmcgT09CIHJlYWRzIG9yIHdyaXRlcyBkdXJpbmcgQlBGIGV4ZWN1dGlvbi4KCkdpdmVuIGFsbCB0aGlzLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlIGlzIHplcm8uIFdlIHNob3VsZCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciB0byBjYWxsIGBjbGVhcl9zY2FsYXJfaWQoKWAgaW5zdGVhZCBvZiBvbmx5IHplcm9pbmcgYGlkYCwgZW5zdXJpbmcgdGhhdCBib3RoIGBpZGAgYW5kIGBkZWx0YWAgYXJlIHByb3Blcmx5IHJlc2V0IHdoZW4gYnJlYWtpbmcgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHJlZ2lzdGVyIHNwaWxsLlxuXG5UaGlzIGNoYW5nZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCB2ZXJpZmllciByZWdpc3Rlci1zdGF0ZSBib29ra2VlcGluZyAoYHN0cnVjdCBicGZfcmVnX3N0YXRlYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGFjY2VzcyBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IC8gc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIEJQRiBwcm9ncmFtcy4gQW55IHZlcmlmaWVyIHRyYWNraW5nIGJ1Z3MgdGhhdCBtaWdodCByZXN1bHQgaW4gaW52YWxpZCBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cblxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6MjIuMTU4NDgxNTM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMzkyMTA4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKWAgaW4gdGhlIEJQRiB2ZXJpZmllciB0byBjYWxsIGBjbGVhcl9zY2FsYXJfaWQoKWAgaW5zdGVhZCBvZiBvbmx5IHplcm9pbmcgYGlkYCwgZW5zdXJpbmcgdGhhdCBib3RoIGBpZGAgYW5kIGBkZWx0YWAgYXJlIHByb3Blcmx5IHJlc2V0IHdoZW4gYnJlYWtpbmcgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHJlZ2lzdGVyIHNwaWxsLlxcblxcblRoaXMgY2hhbmdlIGlzIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIHZlcmlmaWVyIHJlZ2lzdGVyLXN0YXRlIGJvb2trZWVwaW5nIChgc3RydWN0IGJwZl9yZWdfc3RhdGVgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgYWNjZXNzIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgLyBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3IgQlBGIHByb2dyYW1zLiBBbnkgdmVyaWZpZXIgdHJhY2tpbmcgYnVncyB0aGF0IG1pZ2h0IHJlc3VsdCBpbiBpbnZhbGlkIGJvdW5kcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBCUEYgcHJvZ3JhbSBleGVjdXRpb24gYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhY2sgd3JpdGUgdHJhY2tpbmcgaW4gdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBjYWxsaW5nIGNsZWFyX3NjYWxhcl9pZCgpIG9uIG5hcnJvd2luZyBzcGlsbHMgdG8gcHJvcGVybHkgcmVzZXQgYm90aCBpZCBhbmQgZGVsdGEuIFRoaXMgdG91Y2hlcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6MjIuMTU4NDkxOTA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIxOTU4NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzRlYzU5ZGFhNTM2NjhjYjI0ZDc0YWY3ZmI1MTc3NzE5Mjc2N2QxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA3MmEzZjU5OThkZDI3Li4yNzRjZDhmNThhZGMwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0zNTgyLDcgKzM1ODIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcXG4gXFx0XFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xcbiBcXHRcXHRpZiAoIXJlZ192YWx1ZV9maXRzKVxcbi1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5pZCA9IDA7XFxuK1xcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xcbiBcXHR9IGVsc2UgaWYgKCFyZWcgXFx1MDAyNlxcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFxcdTAwMjZcXHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbiBcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdG1wX3JlZyA9IFxcdTAwMjZlbnYtXFx1MDAzZWZha2VfcmVnWzBdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMToyMy42ODEwNzA2MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMjAwMjkwNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YWNrIHdyaXRlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgY2FsbGluZyBjbGVhcl9zY2FsYXJfaWQoKSBvbiBuYXJyb3dpbmcgc3BpbGxzIHRvIHByb3Blcmx5IHJlc2V0IGJvdGggaWQgYW5kIGRlbHRhLiBUaGlzIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzRlYzU5ZGFhNTM2NjhjYjI0ZDc0YWY3ZmI1MTc3NzE5Mjc2N2QxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIwOjIxOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li4yNzRjZDhmNThhZGMwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zNTgyLDcgKzM1ODIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcbiBcdFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xuIFx0XHRpZiAoIXJlZ192YWx1ZV9maXRzKVxuLVx0XHRcdHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuaWQgPSAwO1xuK1x0XHRcdGNsZWFyX3NjYWxhcl9pZChcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcbiBcdH0gZWxzZSBpZiAoIXJlZyBcdTAwMjZcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFx1MDAyNlx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICBlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbiBcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcdTAwMjZlbnYtXHUwMDNlZmFrZV9yZWdbMF07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMToyMy42ODEwNzE5MjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjg0NDM2NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29raW5nIGF0IHRoZSBgZGlmZmAsIGl0IHNlZW1zIGxpa2Ugd2UncmUgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgc3RhY2sgd3JpdGVzIHdpdGggZml4ZWQgb2Zmc2V0cywgZm9jdXNpbmcgb24gYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAuIEknbSBzZWVpbmcgYSBjaGFuZ2UgY29uY2VybmluZyB0aGUgYHNwaWxsZWRfcHRyYCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHN0YWNrIHN0YXRlLCBhbmQgdGhlIGludHJvZHVjdGlvbiAob3IgbW9kaWZpY2F0aW9uKSBvZiBgY2xlYXJfc2NhbGFyX2lkYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhpcyBpbiBtb3JlIGNvbnRleHQsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdldCBteSBiZWFyaW5ncyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGNsZWFyX3NjYWxhcl9pZGAgZnVuY3Rpb24gZG9lcywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSB2ZXJpZmllciBsb2dpYy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFVzaW5nIG15IHByZWZlcnJlZCB0b29scyAocHJvYmFibHkgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDM1ODIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHBvdGVudGlhbGx5IGEgYGdyZXBwZXJgIGNhbGwgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYGNsZWFyX3NjYWxhcl9pZGApLCBJJ2xsIGxvb2sgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHN0YWNrIHN0YXRlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgYGVudi1cdTAwM2VicGZfY2FwYWJsZWAgY2hlY2sgaXMgYWxzbyByZWxldmFudC4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBmb3JtIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5LiBJcyBpdCBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gRG9lcyBpdCByZWxhdGUgdG8gc3BlY2lmaWMgQlBGIHByb2dyYW0gdHlwZXMgb3IgY29uZmlndXJhdGlvbnM/IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgZXZlbiByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWl0IG1lc3NhZ2VzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjMwLjk2NTUxMTM0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzg0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1NzA6XFx0XFx0aWYgKGVycilcXG4zNTcxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzU3MjpcXHRcXG4zNTczOlxcdFxcdGNoZWNrX2Zhc3RjYWxsX3N0YWNrX2NvbnRyYWN0KGVudiwgc3RhdGUsIGluc25faWR4LCBvZmYpO1xcbjM1NzQ6XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSk7XFxuMzU3NTpcXHRcXHRpZiAocmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4zNTc2OlxcdFxcdFxcdGJvb2wgcmVnX3ZhbHVlX2ZpdHM7XFxuMzU3NzpcXHRcXG4zNTc4OlxcdFxcdFxcdHJlZ192YWx1ZV9maXRzID0gZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBzaXplO1xcbjM1Nzk6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHRoYXQgcmVnIGhhZCBhbiBJRCB0byBidWlsZCBhIHJlbGF0aW9uIG9uIHNwaWxsLiAqL1xcbjM1ODA6XFx0XFx0XFx0aWYgKHJlZ192YWx1ZV9maXRzKVxcbjM1ODE6XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgcmVnKTtcXG4zNTgyOlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCByZWcsIHNpemUpO1xcbjM1ODM6XFx0XFx0XFx0LyogQnJlYWsgdGhlIHJlbGF0aW9uIG9uIGEgbmFycm93aW5nIHNwaWxsLiAqL1xcbjM1ODQ6XFx0XFx0XFx0aWYgKCFyZWdfdmFsdWVfZml0cylcXG4zNTg1OlxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIpO1xcbjM1ODY6XFx0XFx0fSBlbHNlIGlmICghcmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFxcdTAwMjZcXHUwMDI2XFxuMzU4NzpcXHRcXHRcXHQgICBlbnYtXFx1MDAzZWJwZl9jYXBhYmxlKSB7XFxuMzU4ODpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqdG1wX3JlZyA9IFxcdTAwMjZlbnYtXFx1MDAzZWZha2VfcmVnWzBdO1xcbjM1ODk6XFx0XFxuMzU5MDpcXHRcXHRcXHRtZW1zZXQodG1wX3JlZywgMCwgc2l6ZW9mKCp0bXBfcmVnKSk7XFxuMzU5MTpcXHRcXHRcXHRfX21hcmtfcmVnX2tub3duKHRtcF9yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuMzU5MjpcXHRcXHRcXHR0bXBfcmVnLVxcdTAwM2V0eXBlID0gU0NBTEFSX1ZBTFVFO1xcbjM1OTM6XFx0XFx0XFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpO1xcbjM1OTQ6XFx0XFx0fSBlbHNlIGlmIChyZWcgXFx1MDAyNlxcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4zNTk1OlxcdFxcdFxcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cXG4zNTk2OlxcdFxcdFxcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xcbjM1OTc6XFx0XFx0XFx0XFx0dmVyYm9zZV9saW5mbyhlbnYsIGluc25faWR4LCBcXFwiOyBcXFwiKTtcXG4zNTk4OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiaW52YWxpZCBzaXplIG9mIHJlZ2lzdGVyIHNwaWxsXFxcXG5cXFwiKTtcXG4zNTk5OlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjM2MDA6XFx0XFx0XFx0fVxcbjM2MDE6XFx0XFx0XFx0aWYgKHN0YXRlICE9IGN1ciBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXR5cGUgPT0gUFRSX1RPX1NUQUNLKSB7XFxuMzYwMjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCBzcGlsbCBwb2ludGVycyB0byBzdGFjayBpbnRvIHN0YWNrIGZyYW1lIG9mIHRoZSBjYWxsZXJcXFxcblxcXCIpO1xcbjM2MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzYwNDpcXHRcXHRcXHR9XFxuMzYwNTpcXHRcXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcXG4zNjA2OlxcdFxcdH0gZWxzZSB7XFxuMzYwNzpcXHRcXHRcXHR1OCB0eXBlID0gU1RBQ0tfTUlTQztcXG4zNjA4OlxcdFxcbjM2MDk6XFx0XFx0XFx0aWYgKGJwZl9pc19zcGlsbGVkX3JlZyhcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTozMC45NjY1OTE1MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDAxNjI2NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGBjbGVhcl9zY2FsYXJfaWRgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcHVycG9zZSBhbmQgY29udGV4dC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIElEIG9yIGlkZW50aWZpZXIgZm9yIGEgc2NhbGFyIHZhbHVlLCBhbmQgdGhhdCBcImNsZWFyXCIgaW1wbGllcyBhIHJlc2V0dGluZywgbnVsbGluZywgb3IgaW52YWxpZGF0aW5nIGFjdGlvbi4gSXTigJlzIGxpa2VseSB0aWVkIGludG8gc29tZSBsYXJnZXIgZGF0YSBzdHJ1Y3R1cmUgb3Igc3lzdGVtIHdoZXJlIHRoZXNlIHNjYWxhciBJRHMgYXJlIHNpZ25pZmljYW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBzY2FsYXJgIGlzIGJlaW5nIGRlZmluZWQsIHdoaWNoIHN5c3RlbSBpdCBpcyB1c2VkIGluLCBhbmQgd2hpY2ggdmFsdWVzIHRoaXMgSUQgd2lsbCByZWZlcmVuY2UuIElzIGBzY2FsYXJgIGEgcHJpbWl0aXZlIHR5cGUsIGFuIG9iamVjdCwgYSBwYXJ0aWN1bGFyIGNsYXNzIG9yIHN0cnVjdCB3aXRoIHNwZWNpZmljIHByb3BlcnRpZXM/IElzIGl0IHRpZWQgdG8gc29tZSBzcGVjaWZpYyBsaWJyYXJ5IG9yIGRhdGEgc3RvcmFnZSBzeXN0ZW0/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJ2NsZWFyaW5nJyB0aGlzIElEIGVudGFpbHMuIERvZXMgaXQgbWVyZWx5IHNldCB0aGUgdmFsdWUgdG8gYE5VTExgIG9yIGAtMWA/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgbWVtb3J5IG9yIHJlc291cmNlcz8gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3Igb3RoZXIgc2lkZSBlZmZlY3RzPyBDb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBhY2Nlc3NpbmcgdGhlIHNhbWUgc2NhbGFyIElELlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgSUQgaXMgYWxyZWFkeSBjbGVhcj8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IgZGV0ZWN0aW5nIGludmFsaWQgb3Igc3RhbGUgc2NhbGFyIElEcyBhZnRlciB0aGUgY2xlYXI/IElzIHRoZXJlIGFueSBjb25mbGljdCB3aXRoIG90aGVyIGZvcm1zIG9mIGNsZWFyaW5nPyBDYW4geW91IGNsZWFyIGEgc2NhbGFyIGFuZCBhc3NpZ24gYSBuZXcgdmFsdWU/XG5cbkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBzdXJyb3VuZGluZyBjb2RlLCB0byBzYWZlbHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSB0aGlzIGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjMzLjk2ODIyMDY2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYwNzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbGVhcl9zY2FsYXJfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTA9c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MTk6c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MjAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MjU9c3RhdGljIHZvaWQgYXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNS1cXHRpZiAoc3JjX3JlZy1cXHUwMDNlaWQgXFx1MDAyNiBCUEZfQUREX0NPTlNUKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDM2OlxcdFxcdGNsZWFyX3NjYWxhcl9pZChzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzNy1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1MTY9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTg0LVxcdFxcdGlmICghcmVnX3ZhbHVlX2ZpdHMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1ODU6XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKFxcdTAwMjZzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1ODYtXFx0fSBlbHNlIGlmICghcmVnIFxcdTAwMjZcXHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcXHUwMDI2XFx1MDAyNiBpc19icGZfc3RfbWVtKGluc24pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzg2MT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxNi1cXHRcXHRcXHRcXHRpZiAoZ2V0X3JlZ193aWR0aChyZWcpIFxcdTAwM2Ugc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM5MTc6XFx0XFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKFxcdTAwMjZzdGF0ZS1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkxOC1cXHRcXHRcXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODE9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjIwLVxcdFxcdFxcdGlmICghbm9fc2V4dClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjYyMTpcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYyMi1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0MDk9c3RhdGljIHZvaWQgc2NhbGFyX2J5dGVfc3dhcChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NDM3LVxcdGlmIChuZWVkX2Jzd2FwIHx8IGluc24tXFx1MDAzZWltbSA9PSAxNiB8fCBpbnNuLVxcdTAwM2VpbW0gPT0gMzIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDM4OlxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzktXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU2OTk9c3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ2LWNsZWFyX2lkOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTg0NzpcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1ODQ4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NTktXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1ODYwOlxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NjEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1ODY2PXN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk0OS1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NTEtXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk3NC1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3NyY19yZWdfdTMyKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTc2LVxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODMtXFx0XFx0XFx0XFx0XFx0XFx0aWYgKCFub19zZXh0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk4NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTg1LVxcdFxcdFxcdFxcdFxcdFxcdGNvZXJjZV9zdWJyZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYgXFx1MDAzZVxcdTAwM2UgMyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3ODY9c3RhdGljIHZvaWQgX19jb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBsaW5rZWRfcmVncyAqcmVnX3NldCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjc5OS1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwMDpcXHRcXHRjbGVhcl9zY2FsYXJfaWQocmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTQ4PXZvaWQgYnBmX2NsZWFyX3Npbmd1bGFyX2lkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTcwLVxcdFxcdGlmIChpZHNldF9jbnRfZ2V0KGlkc2V0LCByZWctXFx1MDAzZWlkIFxcdTAwMjYgfkJQRl9BRERfQ09OU1QpID09IDEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTcxOlxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChyZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk3Mi1cXHR9KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjM0LjAyMjgzMTc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTMzMTY1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM0MTkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3RhdGUgdHJhY2tpbmcsIG9yIHBvdGVudGlhbCBzZWN1cml0eSBjaGVja3MuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIHBhdHRlcm4gb3IgdnVsbmVyYWJpbGl0eSB0cmlnZ2VyLlxuXG5UaGF0IGxpbmUgbnVtYmVyIGlzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciBvZiBzb21lIHNwZWNpZmljIGxvZ2ljIC0gUGVyaGFwcyBhIHBvdGVudGlhbCBhcml0aG1ldGljIGZsYXcsIG9yIG1heWJlIGEgc3RhdGUtbWFjaGluZSBpc3N1ZSwgb3IgZXZlbiBhIHN1YnRsZSBlcnJvciBjb25kaXRpb24gd2hlcmUgYSBjZXJ0YWluIGtpbmQgb2YgaW52YWxpZCBCUEYgcHJvZ3JhbSBpcyBwYXNzaW5nIHRoZSBpbml0aWFsIHZlcmlmaWNhdGlvbiBzdGVwcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0Li4uIFdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnM/IFdoaWNoIHZlcmlmaWVyIHN0YWdlcyBpcyB0aGlzIGxpbmUgd2l0aGluPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGluIHRoZSBjb21tZW50cyBvciB2YXJpYWJsZSBuYW1lcyBhcm91bmQgdGhlcmU/IExldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6MzYuMTE2MTUwMjI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHJldHVybiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKTtcXG4zNDE3OlxcdH1cXG4zNDE4OlxcdFxcbjM0MTk6XFx0c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMzQyMDpcXHR7XFxuMzQyMTpcXHRcXHRyZWctXFx1MDAzZWlkID0gMDtcXG4zNDIyOlxcdFxcdHJlZy1cXHUwMDNlZGVsdGEgPSAwO1xcbjM0MjM6XFx0fVxcbjM0MjQ6XFx0XFxuMzQyNTpcXHRzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4zNDI2OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKVxcbjM0Mjc6XFx0e1xcbjM0Mjg6XFx0XFx0aWYgKHNyY19yZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxcbjM0Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjM0MzA6XFx0XFx0LypcXG4zNDMxOlxcdFxcdCAqIFRoZSB2ZXJpZmllciBpcyBwcm9jZXNzaW5nIHJYID0gclkgaW5zbiBhbmRcXG4zNDMyOlxcdFxcdCAqIHJZLVxcdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cXG4zNDMzOlxcdFxcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxcbjM0MzQ6XFx0XFx0ICovXFxuMzQzNTpcXHRcXHRpZiAoc3JjX3JlZy1cXHUwMDNlaWQgXFx1MDAyNiBCUEZfQUREX0NPTlNUKVxcbjM0MzY6XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHNyY19yZWcpO1xcbjM0Mzc6XFx0XFx0LypcXG4zNDM4OlxcdFxcdCAqIEVuc3VyZSB0aGF0IHNyY19yZWcgaGFzIGEgdmFsaWQgSUQgdGhhdCB3aWxsIGJlIGNvcGllZCB0b1xcbjM0Mzk6XFx0XFx0ICogZHN0X3JlZyBhbmQgdGhlbiB3aWxsIGJlIHVzZWQgYnkgc3luY19saW5rZWRfcmVncygpIHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjM2LjExNzI3MjQxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MTc0NTY5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEJQRiBWZXJpZmllciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgQlBGIHZlcmlmaWVyIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGBjbGVhcl9zY2FsYXJfaWRgIGZ1bmN0aW9uIGlzIGJlaW5nIGVuaGFuY2VkLiBQcmV2aW91c2x5LCBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCBvbmx5IHplcm9lZCBvdXQgdGhlIGBpZGAgZmllbGQgb2YgYSBgc3BpbGxlZF9wdHJgIHN0cnVjdHVyZSBvbiB0aGUgc3RhY2suIE5vdywgd2l0aCB0aGlzIGNoYW5nZSwgd2UncmUgY2FsbGluZyBgY2xlYXJfc2NhbGFyX2lkYCwgd2hpY2ggemVyb3MgYm90aCBgaWRgICphbmQqIGBkZWx0YWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIGNsZWFudXAsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5UaGUgQlBGIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIGtub3cgaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZywgZXNwZWNpYWxseSB2aWEgdGhlIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgc3lzY2FsbCDigJMgc3l6a2FsbGVyIGxvdmVzIHRvIGhhbW1lciBpdC4gVGhhdCBtZWFucyBhbnkgY2hhbmdlIGhlcmUgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzLCBzaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgb2YgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbS4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgcG9zc2libGUgZWZmZWN0cyBvZiB0aGUgY2hhbmdlcy5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogdGhpcyBiZSBleHBsb2l0ZWQgaW4gUUVNVT8gQW5kLCBvZiBjb3Vyc2UsIHRoZSBhbnN3ZXIgaXMgeWVzLCB2ZXJ5IGVhc2lseTogQlBGIGlzIHVzZXItYWNjZXNzaWJsZSB2aWEgc3lzY2FsbHMsIHNvIHRoaXMgY29kZSBpcyBlYXNpbHkgcmVhY2hhYmxlLiBUaGF0J3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gcHJldHR5IHN1cmUgaXQncyBgQlBGX1NZU0NBTExgIChhbmQgYEJQRmApLCBidXQgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDAuNzM0NzMyNDc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMzNDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDAuNzg0MDcwOTQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTAyMjI3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciBhIEJQRi1yZWxhdGVkIHNldHRpbmcuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQnbGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzUxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDIuNDc0Mjk1NzE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwMDcwMiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTo0Mi41MTg5MDIxNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMDA2Mjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyBCUEZfU1lTQ0FMTCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgc3RydWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSBuZWVkIHRvIGJlIGVmZmljaWVudCBhbmQgcGlucG9pbnQgdGhlICpleGFjdCogbG9jYXRpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciBhbGwgdGhlIHRyaWNrcyBmb3IgbmF2aWdhdGluZyB0aGUgS2NvbmZpZyBzeXN0ZW07IGFyZSB3ZSBsb29raW5nIGF0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcywgb3IgYSBnZW5lcmFsIGZlYXR1cmUgY29uZmlnPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCwgbWF5YmUgdXNlIHNvbWUgZ3JlcC1mdSB3aXRoIGAtcmAgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHN0YXJ0aW5nIGF0IHRoZSByb290LCB0byBiZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gVGhlbiwgSSdsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcy4gSXQgY291bGQgYmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIG90aGVyIGZlYXR1cmVzLCBhcmNoaXRlY3R1cmUgc2VsZWN0aW9ucywgb3IgZXZlbiBoYXJkd2FyZSBwbGF0Zm9ybXMuIEknbGwgbG9vayBmb3IgYGRlcGVuZHMgb25gIGRpcmVjdGl2ZXMgdG8gdW5kZXJzdGFuZCB0aGUgYWN0aXZhdGlvbiBsb2dpYy4gVWx0aW1hdGVseSwga25vd2luZyBwcmVjaXNlbHkgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIGVuYWJsZWQgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciByZWNvbmZpZ3VyaW5nIEJQRiBzdXBwb3J0LiBUaW1lIHRvIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDUuMDE4OTY4MjAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc2NzM4MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjQ2Ljc5NTcxMzM0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMwMDMxNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBMZXQncyB6ZXJvIGluIG9uIGxpbmUgMjUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgZmVhdHVyZXMuIEtub3dpbmcgdGhlIGV4YWN0IG9wdGlvbnMgYW5kIHRoZWlyIGludGVyYWN0aW9ucyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBjb25maWd1cmF0aW9uIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMgYW5kIGFyY2hpdGVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgaW1wYWN0cyBvZiBlbmFibGluZy9kaXNhYmxpbmcgdmFyaW91cyBCUEYgZmVhdHVyZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGdldHRpbmcgdGhlIHJpZ2h0IGJhbGFuY2Ugb2YgZnVuY3Rpb25hbGl0eSwgc2VjdXJpdHksIGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjQ4LjYyNTc0NzY0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NDguNjI1ODA1MDY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTg1OTM1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEZfU1lTQ0FMTCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYEJQRl9TWVNDQUxMYCBkb2Vzbid0IGhhdmUgYSBkaXJlY3QgYGRlcGVuZHMgb25gLCBidXQgaXQgZG9lcyAqc2VsZWN0KiBCUEYuIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5JJ20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBGaXJzdCwgbGV0J3MgZXhhbWluZSBgRm9jdXNTeW1ib2xzYC4gVGhlbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBvciBwZXJoYXBzIHJlbGF0ZWQgZnVuY3Rpb25zLiBUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgc3RhdGljIG9yIG5vdC5cblxuQWgsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyB1c2VmdWwgaW5mb3JtYXRpb24uIEl0IGxpdmVzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTbywgYXMgSSdkIGV4cGVjdCwgYmVjYXVzZSB0aGlzIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGEgLmMgZmlsZSwgaXQnbGwgc2hvdyB1cCBpbiB0aGUgdm1saW51eCBzeW1ib2wgdGFibGUgKHVubGVzcyB0aGUgY29tcGlsZXIgaW5saW5lcyBpdCwgd2hpY2ggSSdsbCBrZWVwIGluIG1pbmQpLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHNlYXJjaCBmb3IgaXQsIGFsb25nIHdpdGggYGNoZWNrX21lbV9hY2Nlc3NgIG9yIGBjaGVja19zdGFja193cml0ZWAuXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTo1Mi43ODQ0MDA2MDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTMyMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzUwMT1zdGF0aWMgdm9pZCBzY3J1Yl9zcGVjaWFsX3Nsb3Qoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTE1LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTE2OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1MTctXFx0XFx0XFx0XFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJ3JlIHdyaXRpbmcgdG8gKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MDc5PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxMzEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxMzI6LyogY2hlY2tfc3RhY2tfd3JpdGUgZGlzcGF0Y2hlcyB0byBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYgb3JcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDEzMy0gKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQxNDE9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQxNDktXFx0XFx0b2ZmICs9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDE1MDpcXHRcXHRlcnIgPSBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTUxLVxcdFxcdFxcdFxcdFxcdFxcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MjEwPXN0YXRpYyBpbnQgY2hlY2tfcHRyX2FsaWdubWVudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyMzktXFx0XFx0cG9pbnRlcl9kZXNjID0gXFxcInN0YWNrIFxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUyNDA6XFx0XFx0LyogVGhlIHN0YWNrIHNwaWxsIHRyYWNraW5nIGxvZ2ljIGluIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNDEtXFx0XFx0ICogYW5kIGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKCkgcmVsaWVzIG9uIHN0YWNrIGFjY2Vzc2VzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjUyLjgzNDUzNTM5OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTY2MjU3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGNvZGUsIEkgc2VlIHRoYXQgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAsIGBjaGVja19zdGFja193cml0ZWAsIGFuZCBgY2xlYXJfc2NhbGFyX2lkYCBhcmUgYWxsIG5lc3RsZWQgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgRmlyc3QgdGhpbmcsIEkgY29uZmlybWVkIHRoYXQgYGJwZl9jaGVja2AgaXMgaW5kZWVkIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHJpZ2h0IGF0IHRoZSB0b3Agb2YgYHZlcmlmaWVyLmNgLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5NeSBnb2FsIG5vdyBpcyB0byBmb2N1cyBvbiB0aGUga2V5IGNoYW5nZXMgaW4gdGhlIHBhdGNoLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgaWRlbnRpZnlpbmcgIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIGFuZCBgY2hlY2tfc3RhY2tfd3JpdGVgIGFzIHRoZSB0YXJnZXRzLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGRlc2NyaXB0aW9uLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBkZWFscyB3aXRoIGNsZWFyaW5nIHNjYWxhciBJRHMgd2hlbiBzdGFjayBzcGlsbHMgaGFwcGVuLiBJIG5vdGljZWQgdGhhdCBgY2xlYXJfc2NhbGFyX2lkYCBpcyBhIHZlcnkgc21hbGwgZnVuY3Rpb24uIEdpdmVuIGl0IGlzIG9ubHkgNCBsaW5lcywgaXQgaXMgbGlrZWx5IGlubGluZWQsIG9yIGVhc2lseSBjb3VsZCBiZS4gYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBtdWNoIGxhcmdlciwgd2l0aCBodW5kcmVkcyBvZiBsaW5lcy4gSXQgaXMgdmVyeSBsaWtlbHkgKm5vdCogaW5saW5lZC5cblxuVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhci4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpbiBgdmVyaWZpZXIuY2ApLCB1c2luZyBgY2xlYXJfc2NhbGFyX2lkYCB3aGVuIGJyZWFraW5nIHNjYWxhciBJRCByZWxhdGlvbnMgb24gbmFycm93aW5nIHN0YWNrIHNwaWxscywgc28gd2UgcmVzZXQgYm90aCB0aGUgcmVnaXN0ZXIncyBJRCBhbmQgZGVsdGEuIFRoZSBgQlBGX1BST0dfTE9BRGAgc3lzY2FsbCB2aWEgYGJwZigpYCBpcyB0aGUgZW50cnkgcG9pbnQsIHNvIGl0IGxvb2tzIGxpa2UgdmVyaWZpY2F0aW9uIGxvZ2ljIGlzIHJlYWNoYWJsZS5cblxuSSBhbHNvIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWdzIGluIHRoZSBwYXRoLiBMb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gb25lIHRoYXQgaXMgZW5hYmxpbmcgYHZlcmlmaWVyLmNgLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gIEFuZCwgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3Mgc3BlY2lmaWNhbGx5IGd1YXJkaW5nIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIHdpdGhpbiBgdmVyaWZpZXIuY2AuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZy4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzMsIk91dHB1dFRva2VucyI6MTIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjU2LjgwMDc5NTAzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTYzNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICAgIFwiY2hlY2tfc3RhY2tfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdGFjayB3cml0ZSB0cmFja2luZyBpbiB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGNhbGxpbmcgY2xlYXJfc2NhbGFyX2lkKCkgb24gbmFycm93aW5nIHNwaWxscyB0byBwcm9wZXJseSByZXNldCBib3RoIGlkIGFuZCBkZWx0YS4gVGhpcyB0b3VjaGVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmXCIsXG4gICAgXCJjaGVja19zdGFja193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YWNrIHdyaXRlIHRyYWNraW5nIGluIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgY2FsbGluZyBjbGVhcl9zY2FsYXJfaWQoKSBvbiBuYXJyb3dpbmcgc3BpbGxzIHRvIHByb3Blcmx5IHJlc2V0IGJvdGggaWQgYW5kIGRlbHRhLiBUaGlzIHRvdWNoZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIxOjU2Ljg4MTM2NTE5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1MTYzMTg0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMTo1Ni44ODE4MDM2MDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzUxNTg3NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCB2ZXJpZmllciByZWdpc3Rlci1zdGF0ZSBib29ra2VlcGluZyAoYHN0cnVjdCBicGZfcmVnX3N0YXRlYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGFjY2VzcyBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IC8gc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIEJQRiBwcm9ncmFtcy4gQW55IHZlcmlmaWVyIHRyYWNraW5nIGJ1Z3MgdGhhdCBtaWdodCByZXN1bHQgaW4gaW52YWxpZCBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0ZWM1OWRhYTUzNjY4Y2IyNGQ3NGFmN2ZiNTE3NzcxOTI3NjdkMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDoyMToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uMjc0Y2Q4ZjU4YWRjMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzU4Miw3ICszNTgyLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XG4gXHRcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cbiBcdFx0aWYgKCFyZWdfdmFsdWVfZml0cylcbi1cdFx0XHRzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtcbitcdFx0XHRjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7XG4gXHR9IGVsc2UgaWYgKCFyZWcgXHUwMDI2XHUwMDI2ICEob2ZmICUgQlBGX1JFR19TSVpFKSBcdTAwMjZcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG4gXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICp0bXBfcmVnID0gXHUwMDI2ZW52LVx1MDAzZWZha2VfcmVnWzBdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjE6NTYuODgxODA0NjcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk5Nzk4NjUzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEluaXRpYWwgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBhIG5ldyBwYXRjaC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoaXMgdGhpbmcgc3lzdGVtYXRpY2FsbHkuIEknbSB0aGlua2luZywgXCJMZXQncyBhc3N1bWUgdGhpcyBpcyBrZXJuZWwtbGV2ZWwsIGxpa2VseSBCUEYgcmVsYXRlZC5cIiBTbywgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbGwgYmV0IGEgZmV3IHZpcnR1YWwgYnVja3MgdGhhdCB0aGUgaGVhcnQgb2YgdGhpcyBjaGFuZ2UgcmVzaWRlcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci5cblxuTXkgaW5pdGlhbCBhY3Rpb24gaXMgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHJlbGV2YW50IGNvbnRlbnQgc3Vycm91bmRpbmcgbGluZSAzNTgyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBvZiB0aGUgdmVyaWZpY2F0aW9uIGxvZ2ljIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIEkgd2FudCB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIsIHRoZSBpbW1lZGlhdGUgY29udGV4dCwgdG8gc3RhcnQgZm9ybWluZyBhIGh5cG90aGVzaXMgYWJvdXQgd2hhdCB0aGUgcGF0Y2ggYWltcyB0byBtb2RpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjA2Ljg2MTY3MzAyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTcwOlxcdFxcdGlmIChlcnIpXFxuMzU3MTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM1NzI6XFx0XFxuMzU3MzpcXHRcXHRjaGVja19mYXN0Y2FsbF9zdGFja19jb250cmFjdChlbnYsIHN0YXRlLCBpbnNuX2lkeCwgb2ZmKTtcXG4zNTc0OlxcdFxcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkpO1xcbjM1NzU6XFx0XFx0aWYgKHJlZyBcXHUwMDI2XFx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcXHUwMDI2XFx1MDAyNiBlbnYtXFx1MDAzZWJwZl9jYXBhYmxlKSB7XFxuMzU3NjpcXHRcXHRcXHRib29sIHJlZ192YWx1ZV9maXRzO1xcbjM1Nzc6XFx0XFxuMzU3ODpcXHRcXHRcXHRyZWdfdmFsdWVfZml0cyA9IGdldF9yZWdfd2lkdGgocmVnKSBcXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogc2l6ZTtcXG4zNTc5OlxcdFxcdFxcdC8qIE1ha2Ugc3VyZSB0aGF0IHJlZyBoYWQgYW4gSUQgdG8gYnVpbGQgYSByZWxhdGlvbiBvbiBzcGlsbC4gKi9cXG4zNTgwOlxcdFxcdFxcdGlmIChyZWdfdmFsdWVfZml0cylcXG4zNTgxOlxcdFxcdFxcdFxcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHJlZyk7XFxuMzU4MjpcXHRcXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgcmVnLCBzaXplKTtcXG4zNTgzOlxcdFxcdFxcdC8qIEJyZWFrIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyBzcGlsbC4gKi9cXG4zNTg0OlxcdFxcdFxcdGlmICghcmVnX3ZhbHVlX2ZpdHMpXFxuMzU4NTpcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcXG4zNTg2OlxcdFxcdH0gZWxzZSBpZiAoIXJlZyBcXHUwMDI2XFx1MDAyNiAhKG9mZiAlIEJQRl9SRUdfU0laRSkgXFx1MDAyNlxcdTAwMjYgaXNfYnBmX3N0X21lbShpbnNuKSBcXHUwMDI2XFx1MDAyNlxcbjM1ODc6XFx0XFx0XFx0ICAgZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbjM1ODg6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnRtcF9yZWcgPSBcXHUwMDI2ZW52LVxcdTAwM2VmYWtlX3JlZ1swXTtcXG4zNTg5OlxcdFxcbjM1OTA6XFx0XFx0XFx0bWVtc2V0KHRtcF9yZWcsIDAsIHNpemVvZigqdG1wX3JlZykpO1xcbjM1OTE6XFx0XFx0XFx0X19tYXJrX3JlZ19rbm93bih0bXBfcmVnLCBpbnNuLVxcdTAwM2VpbW0pO1xcbjM1OTI6XFx0XFx0XFx0dG1wX3JlZy1cXHUwMDNldHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4zNTkzOlxcdFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcXG4zNTk0OlxcdFxcdH0gZWxzZSBpZiAocmVnIFxcdTAwMjZcXHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpKSB7XFxuMzU5NTpcXHRcXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuMzU5NjpcXHRcXHRcXHRpZiAoc2l6ZSAhPSBCUEZfUkVHX1NJWkUpIHtcXG4zNTk3OlxcdFxcdFxcdFxcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXFxcIjsgXFxcIik7XFxuMzU5ODpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImludmFsaWQgc2l6ZSBvZiByZWdpc3RlciBzcGlsbFxcXFxuXFxcIik7XFxuMzU5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4zNjAwOlxcdFxcdFxcdH1cXG4zNjAxOlxcdFxcdFxcdGlmIChzdGF0ZSAhPSBjdXIgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19TVEFDSykge1xcbjM2MDI6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgc3BpbGwgcG9pbnRlcnMgdG8gc3RhY2sgaW50byBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyXFxcXG5cXFwiKTtcXG4zNjAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM2MDQ6XFx0XFx0XFx0fVxcbjM2MDU6XFx0XFx0XFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHJlZywgc2l6ZSk7XFxuMzYwNjpcXHRcXHR9IGVsc2Uge1xcbjM2MDc6XFx0XFx0XFx0dTggdHlwZSA9IFNUQUNLX01JU0M7XFxuMzYwODpcXHRcXG4zNjA5OlxcdFxcdFxcdGlmIChicGZfaXNfc3BpbGxlZF9yZWcoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjI6MDYuODYyNjk3NDI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzcyMTEwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2UsIHRoaW5raW5nIGl0IHRocm91Z2ggYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBjbGVhcl9zY2FsYXJfaWRgIFJlcGxhY2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBzd2FwcGVkIG91dCBhIGRpcmVjdCB6ZXJvaW5nIGFzc2lnbm1lbnQ6IGBzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmlkID0gMDtgIHdpdGggYSBjYWxsIHRvIGEgZnVuY3Rpb24sIGBjbGVhcl9zY2FsYXJfaWQoXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cik7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgdGhlIGFkZGVkIGZ1bmN0aW9uIGNhbGw/IFdlIHVzdWFsbHkgd2FudCB0byBhdm9pZCB0aGF0IG92ZXJoZWFkIGlmIGEgZGlyZWN0IGFzc2lnbm1lbnQgd29ya3MsIHBhcnRpY3VsYXJseSBpbiBwZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZS5cblxuTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCBgY2xlYXJfc2NhbGFyX2lkYCBpcyBkb2luZyBtb3JlIHRoYW4ganVzdCBzZXR0aW5nIHRoZSBgaWRgIGZpZWxkIHRvIHplcm8uIFBlcmhhcHMgaXQncyBhbHNvIHJlc3BvbnNpYmxlIGZvcjpcblxuKiAgICoqSGFuZGxpbmcgRGVwZW5kZW5jaWVzL1NpZGUgRWZmZWN0czoqKiBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIHdpdGhpbiBgc3BpbGxlZF9wdHJgIHRoYXQgbmVlZCB0byBiZSBjbGVhcmVkLCByZS1pbml0aWFsaXplZCwgb3IgaW52YWxpZGF0ZWQgd2hlbiB0aGUgSUQgaXMgcmVzZXQ/IEl0IGNvdWxkIGJlIGVuc3VyaW5nIGNvbnNpc3RlbmN5IG9yIHByZXZlbnRpbmcgbWVtb3J5IGNvcnJ1cHRpb24uXG4qICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBJcyB0aGlzIHBhcnQgb2YgYSBsYXJnZXIgc2NoZW1lIHRvIGZyZWUgb3IgbWFuYWdlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYHNwaWxsZWRfcHRyYD8gTWF5YmUgaXQncyByZWxlYXNpbmcgcmVzb3VyY2VzIHRoYXQgd2VyZSB0aWVkIHRvIHRoYXQgSUQuIE9yIHBlcmhhcHMsIGl0J3MgcHJldmVudGluZyB0aGUgSUQgZnJvbSBiZWNvbWluZyBhIGRhbmdsaW5nIHBvaW50ZXIuXG4qICAgKipBYnN0cmFjdGlvbiBhbmQgRW5jYXBzdWxhdGlvbjoqKiBJdCBjb3VsZCBiZSBhbiBlZmZvcnQgdG8gZW5jYXBzdWxhdGUgdGhlIGxvZ2ljIHJlbGF0ZWQgdG8gY2xlYXJpbmcgYSBzY2FsYXIgSUQuIFRoaXMgd291bGQgaW1wcm92ZSBtYWludGFpbmFiaWxpdHkgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIGNoYW5nZSB0aGUgY2xlYXJpbmcgYmVoYXZpb3IgbGF0ZXIgd2l0aG91dCBoYXZpbmcgdG8gaHVudCBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBzcGlsbGVkX3B0ci5pZCA9IDA7YC5cbiogICAqKkZ1dHVyZSBQcm9vZmluZzoqKiBNYXliZSB0aGVyZSdzIGEgcGxhbm5lZCBleHBhbnNpb24gb2YgdGhlIGBzcGlsbGVkX3B0cmAgc3RydWN0dXJlLCBhbmQgYGNsZWFyX3NjYWxhcl9pZGAgaXMgZGVzaWduZWQgdG8gYmUgZWFzaWx5IHVwZGF0ZWQgdG8gaGFuZGxlIHRob3NlIG5ldyBmaWVsZHMgb3Igc3RhdGVzLlxuXG5JJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGNsZWFyX3NjYWxhcl9pZGAgbm93LiBJIG5lZWQgdG8gc2VlIHdoYXQgaXQgKmFjdHVhbGx5KiBkb2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIGludGVybmFsIHdvcmtpbmdzIHdpbGwgZ2l2ZSBtZSB0aGUga2V5IHRvIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSdtIGhvcGluZyB0byBmaW5kIGNvbW1lbnRzIGFuZCBhIHdlbGwtZGVzaWduZWQgZnVuY3Rpb24gdGhhdCBmb2xsb3dzIHRoZSBTaW5nbGUgUmVzcG9uc2liaWxpdHkgUHJpbmNpcGxlLiBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zOyBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjExLjY5OTkxMDcwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMzY5MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFyX3NjYWxhcl9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQxMD1zdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQxOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQxOTpzdGF0aWMgdm9pZCBjbGVhcl9zY2FsYXJfaWQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyMC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQyNT1zdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDM1LVxcdGlmIChzcmNfcmVnLVxcdTAwM2VpZCBcXHUwMDI2IEJQRl9BRERfQ09OU1QpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0MzY6XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDM3LVxcdC8qXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzUxNj1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1ODQtXFx0XFx0aWYgKCFyZWdfdmFsdWVfZml0cylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzU4NTpcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU4Ni1cXHR9IGVsc2UgaWYgKCFyZWcgXFx1MDAyNlxcdTAwMjYgIShvZmYgJSBCUEZfUkVHX1NJWkUpIFxcdTAwMjZcXHUwMDI2IGlzX2JwZl9zdF9tZW0oaW5zbikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zODYxPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE2LVxcdFxcdFxcdFxcdGlmIChnZXRfcmVnX3dpZHRoKHJlZykgXFx1MDAzZSBzaXplICogQklUU19QRVJfQllURSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkxNzpcXHRcXHRcXHRcXHRcXHRjbGVhcl9zY2FsYXJfaWQoXFx1MDAyNnN0YXRlLVxcdTAwM2VyZWdzW2RzdF9yZWdub10pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTE4LVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM4MT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjAtXFx0XFx0XFx0aWYgKCFub19zZXh0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NjIxOlxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChcXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjIyLVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTQwOT1zdGF0aWMgdm9pZCBzY2FsYXJfYnl0ZV9zd2FwKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0MzctXFx0aWYgKG5lZWRfYnN3YXAgfHwgaW5zbi1cXHUwMDNlaW1tID09IDE2IHx8IGluc24tXFx1MDAzZWltbSA9PSAzMilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU0Mzg6XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQzOS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTY5OT1zdGF0aWMgaW50IGFkanVzdF9yZWdfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDYtY2xlYXJfaWQ6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1ODQ3OlxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4NDgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg1OS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4NjA6XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTg2MS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU4NjY9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTQ5LVxcdFxcdFxcdFxcdFxcdFxcdGlmICghbm9fc2V4dClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5NTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk1MS1cXHRcXHRcXHRcXHRcXHRcXHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cXHUwMDNlb2ZmIFxcdTAwM2VcXHUwMDNlIDMpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTc0LVxcdFxcdFxcdFxcdFxcdFxcdGlmICghaXNfc3JjX3JlZ191MzIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5NzYtXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4My1cXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsZWFyX3NjYWxhcl9pZChkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODUtXFx0XFx0XFx0XFx0XFx0XFx0Y29lcmNlX3N1YnJlZ190b19zaXplX3N4KGRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiBcXHUwMDNlXFx1MDAzZSAzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjc4Nj1zdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2Nzk5LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODAwOlxcdFxcdGNsZWFyX3NjYWxhcl9pZChyZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwMS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc5NDg9dm9pZCBicGZfY2xlYXJfc2luZ3VsYXJfaWRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NzAtXFx0XFx0aWYgKGlkc2V0X2NudF9nZXQoaWRzZXQsIHJlZy1cXHUwMDNlaWQgXFx1MDAyNiB+QlBGX0FERF9DT05TVCkgPT0gMSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5NzE6XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKHJlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTcyLVxcdH0pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MjI6MTIuNDQwMjkzMzMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjYwMTI4NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVmaW5pdGlvbiBvZiBgY2xlYXJfc2NhbGFyX2lkYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIGBjbGVhcl9zY2FsYXJfaWRgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcHVycG9zZSBhbmQgY29udGV4dC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIElEIG9yIGlkZW50aWZpZXIgZm9yIGEgc2NhbGFyIHZhbHVlLCBhbmQgdGhhdCBcImNsZWFyXCIgaW1wbGllcyBhIHJlc2V0dGluZywgbnVsbGluZywgb3IgaW52YWxpZGF0aW5nIGFjdGlvbi4gSXTigJlzIGxpa2VseSB0aWVkIGludG8gc29tZSBsYXJnZXIgZGF0YSBzdHJ1Y3R1cmUgb3Igc3lzdGVtIHdoZXJlIHRoZXNlIHNjYWxhciBJRHMgYXJlIHNpZ25pZmljYW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBzY2FsYXJgIGlzIGJlaW5nIGRlZmluZWQsIHdoaWNoIHN5c3RlbSBpdCBpcyB1c2VkIGluLCBhbmQgd2hpY2ggdmFsdWVzIHRoaXMgSUQgd2lsbCByZWZlcmVuY2UuIElzIGBzY2FsYXJgIGEgcHJpbWl0aXZlIHR5cGUsIGFuIG9iamVjdCwgYSBwYXJ0aWN1bGFyIGNsYXNzIG9yIHN0cnVjdCB3aXRoIHNwZWNpZmljIHByb3BlcnRpZXM/IElzIGl0IHRpZWQgdG8gc29tZSBzcGVjaWZpYyBsaWJyYXJ5IG9yIGRhdGEgc3RvcmFnZSBzeXN0ZW0/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJ2NsZWFyaW5nJyB0aGlzIElEIGVudGFpbHMuIERvZXMgaXQgbWVyZWx5IHNldCB0aGUgdmFsdWUgdG8gYE5VTExgIG9yIGAtMWA/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgbWVtb3J5IG9yIHJlc291cmNlcz8gRG9lcyBpdCB0cmlnZ2VyIGFueSBjYWxsYmFja3Mgb3Igb3RoZXIgc2lkZSBlZmZlY3RzPyBDb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNsZWFyaW5nIG9wZXJhdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdGhhdCBtaWdodCBiZSBhY2Nlc3NpbmcgdGhlIHNhbWUgc2NhbGFyIElELlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgSUQgaXMgYWxyZWFkeSBjbGVhcj8gSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IgZGV0ZWN0aW5nIGludmFsaWQgb3Igc3RhbGUgc2NhbGFyIElEcyBhZnRlciB0aGUgY2xlYXI/IElzIHRoZXJlIGFueSBjb25mbGljdCB3aXRoIG90aGVyIGZvcm1zIG9mIGNsZWFyaW5nPyBDYW4geW91IGNsZWFyIGEgc2NhbGFyIGFuZCBhc3NpZ24gYSBuZXcgdmFsdWU/XG5cbkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBzdXJyb3VuZGluZyBjb2RlLCB0byBzYWZlbHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSB0aGlzIGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDoyMjoyNS4xMDA0MjQ1OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHJldHVybiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKTtcXG4zNDE3OlxcdH1cXG4zNDE4OlxcdFxcbjM0MTk6XFx0c3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuMzQyMDpcXHR7XFxuMzQyMTpcXHRcXHRyZWctXFx1MDAzZWlkID0gMDtcXG4zNDIyOlxcdFxcdHJlZy1cXHUwMDNlZGVsdGEgPSAwO1xcbjM0MjM6XFx0fVxcbjM0MjQ6XFx0XFxuMzQyNTpcXHRzdGF0aWMgdm9pZCBhc3NpZ25fc2NhbGFyX2lkX2JlZm9yZV9tb3Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4zNDI2OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmNfcmVnKVxcbjM0Mjc6XFx0e1xcbjM0Mjg6XFx0XFx0aWYgKHNyY19yZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxcbjM0Mjk6XFx0XFx0XFx0cmV0dXJuO1xcbjM0MzA6XFx0XFx0LypcXG4zNDMxOlxcdFxcdCAqIFRoZSB2ZXJpZmllciBpcyBwcm9jZXNzaW5nIHJYID0gclkgaW5zbiBhbmRcXG4zNDMyOlxcdFxcdCAqIHJZLVxcdTAwM2VpZCBoYXMgc3BlY2lhbCBsaW5rZWQgcmVnaXN0ZXIgYWxyZWFkeS5cXG4zNDMzOlxcdFxcdCAqIENsZWFyZWQgaXQsIHNpbmNlIG11bHRpcGxlIHJYICs9IGNvbnN0IGFyZSBub3Qgc3VwcG9ydGVkLlxcbjM0MzQ6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjI1LjEwMTUzMjc2NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjk2MTE4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2FmZXR5IG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBtYWtlIHN1cmUgaXQncyBzYWZlLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgcmVwbGFjZXMgYSBsaW5lIHRoYXQgd2FzIG9ubHkgcmVzZXR0aW5nIHRoZSBgaWRgIGZpZWxkIG9mIGEgYHNwaWxsZWRfcHRyYCB3aXRoIGEgY2FsbCB0byBgY2xlYXJfc2NhbGFyX2lkYCwgd2hpY2ggc2V0cyBib3RoIGBpZGAgYW5kIGBkZWx0YWAgdG8gemVyby4gRXNzZW50aWFsbHksIGl0J3MgbWFraW5nIHRoZSBiZWhhdmlvciBtb3JlIGNvbnNpc3RlbnQsIGVzcGVjaWFsbHkgZHVyaW5nIG5hcnJvd2luZyBzcGlsbHMgd2hlcmUgd2UncmUgYnJlYWtpbmcgc2NhbGFyIElEIHJlbGF0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJ1biB0aHJvdWdoIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGNoZWNrbGlzdC5cblxuMS4gICoqRXhwb3NpbmcgVW5pbml0aWFsaXplZCBNZW1vcnk6KiogTm9wZS4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgQlBGIHZlcmlmaWVyIHN0YXRlOyB3ZSdyZSB0YWxraW5nIGFib3V0IGByZWctXHUwMDNlaWRgIGFuZCBgcmVnLVx1MDAzZWRlbHRhYCB3aXRoaW4gdGhlIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuIE5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaGVyZS4gTm8gcmlzayBvZiBleHBvc2luZyBpbnRlcm5hbCBzdGF0ZS5cbjIuICAqKk1lbW9yeSBBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIENoYW5nZXM6KiogRG9lc24ndCBzZWVtIGxpa2UgaXQuIFRoZSBgc2F2ZV9yZWdpc3Rlcl9zdGF0ZWAgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBjb3B5aW5nLCBzbyB0aGUgcmVnaXN0ZXIgc3RhdGUgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBiZWZvcmUgdGhpcyBjb2RlIGlzIHJlYWNoZWQuIFNldHRpbmcgYGRlbHRhYCB0byB6ZXJvIHByZXZlbnRzIGEgc3RhbGUgYGRlbHRhYCB2YWx1ZSBmcm9tIGJlaW5nIHVzZWQgd2hlbiB0aGUgYGlkYCBpcyB6ZXJvLlxuMy4gICoqS01TQU4gSW52b2x2ZW1lbnQ6KiogTm90IGRpcmVjdGx5LiBLTVNBTiBpcyBncmVhdCBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBidWZmZXJzLCBwYWRkaW5nLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gTG9naWNhbCBlcnJvcnMgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBzYW5pdGl6ZXJzIGR1cmluZyBCUEYgcHJvZ3JhbSBleGVjdXRpb24uXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgS01TQU4vS0FTQU4gZGlzdGluY3Rpb24uIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCByZWFkcywgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGhlcmUuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0IHN1aXRlcyBjb3ZlciB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgZXJyb3JzLCBzdWNoIGFzIGFsbG93aW5nIE9PQiByZWFkcyBvciB3cml0ZXMgZHVyaW5nIEJQRiBleGVjdXRpb24uXG5cbkdpdmVuIGFsbCB0aGlzLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlIGlzIHplcm8uIFdlIHNob3VsZCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTY0LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjIyOjMwLjM5NzY1NDQwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClgIGluIHRoZSBCUEYgdmVyaWZpZXIgdG8gY2FsbCBgY2xlYXJfc2NhbGFyX2lkKClgIGluc3RlYWQgb2Ygb25seSB6ZXJvaW5nIGBpZGAsIGVuc3VyaW5nIHRoYXQgYm90aCBgaWRgIGFuZCBgZGVsdGFgIGFyZSBwcm9wZXJseSByZXNldCB3aGVuIGJyZWFraW5nIHRoZSByZWxhdGlvbiBvbiBhIG5hcnJvd2luZyByZWdpc3RlciBzcGlsbC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCB2ZXJpZmllciByZWdpc3Rlci1zdGF0ZSBib29ra2VlcGluZyAoYHN0cnVjdCBicGZfcmVnX3N0YXRlYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGFjY2VzcyBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IC8gc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIEJQRiBwcm9ncmFtcy4gQW55IHZlcmlmaWVyIHRyYWNraW5nIGJ1Z3MgdGhhdCBtaWdodCByZXN1bHQgaW4gaW52YWxpZCBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpYCBpbiB0aGUgQlBGIHZlcmlmaWVyIHRvIGNhbGwgYGNsZWFyX3NjYWxhcl9pZCgpYCBpbnN0ZWFkIG9mIG9ubHkgemVyb2luZyBgaWRgLCBlbnN1cmluZyB0aGF0IGJvdGggYGlkYCBhbmQgYGRlbHRhYCBhcmUgcHJvcGVybHkgcmVzZXQgd2hlbiBicmVha2luZyB0aGUgcmVsYXRpb24gb24gYSBuYXJyb3dpbmcgcmVnaXN0ZXIgc3BpbGwuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgdmVyaWZpZXIgcmVnaXN0ZXItc3RhdGUgYm9va2tlZXBpbmcgKGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBhY2Nlc3Mgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAvIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXJzcGFjZSBvciBCUEYgcHJvZ3JhbXMuIEFueSB2ZXJpZmllciB0cmFja2luZyBidWdzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGludmFsaWQgYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[1] Phase: Succeeded StartedAt: 2026-09-10 20:22:41 +0000 UTC FinishedAt: 2026-09-10 20:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 20:22:41 +0000 UTC FinishedAt: 2026-09-10 20:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2] Phase: Succeeded StartedAt: 2026-09-10 20:22:41 +0000 UTC FinishedAt: 2026-09-11 00:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:22:41 +0000 UTC FinishedAt: 2026-09-11 00:10:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:22:41 +0000 UTC FinishedAt: 2026-09-10 20:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:22:41 +0000 UTC FinishedAt: 2026-09-10 20:22:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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-workflowtj9fp/series-workflowtj9fp-convert-artifact-371729735/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:22:51 +0000 UTC FinishedAt: 2026-09-10 20:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:22:51 +0000 UTC FinishedAt: 2026-09-10 20:42:50 +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:*c49dd4f1-b44f-41ab-beca-4edf37edf3bd,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-workflowtj9fp/series-workflowtj9fp-convert-artifact-371729735/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": "1a4baa4e-3d84-4f75-bdae-3efec8c43060", "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-workflowtj9fp/series-workflowtj9fp-build-action-3855822301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:22:51 +0000 UTC FinishedAt: 2026-09-10 20:42:40 +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:*c49dd4f1-b44f-41ab-beca-4edf37edf3bd,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-workflowtj9fp/series-workflowtj9fp-convert-artifact-371729735/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": "1a4baa4e-3d84-4f75-bdae-3efec8c43060", "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-workflowtj9fp/series-workflowtj9fp-build-action-3855822301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:42:50 +0000 UTC FinishedAt: 2026-09-10 20:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:42:50 +0000 UTC FinishedAt: 2026-09-10 20:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:42:50 +0000 UTC FinishedAt: 2026-09-10 20:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:42:50 +0000 UTC FinishedAt: 2026-09-10 20:42:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-workflowtj9fp/series-workflowtj9fp-convert-artifact-2057103734/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:43:01 +0000 UTC FinishedAt: 2026-09-10 20:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:43:01 +0000 UTC FinishedAt: 2026-09-10 20:44:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a4baa4e-3d84-4f75-bdae-3efec8c43060,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-workflowtj9fp/series-workflowtj9fp-build-action-3855822301/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-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:44:58 +0000 UTC FinishedAt: 2026-09-10 20:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:44:58 +0000 UTC FinishedAt: 2026-09-10 20:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:44:58 +0000 UTC FinishedAt: 2026-09-10 21:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:44:58 +0000 UTC FinishedAt: 2026-09-10 21:05:24 +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:*c49dd4f1-b44f-41ab-beca-4edf37edf3bd,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-workflowtj9fp/series-workflowtj9fp-convert-artifact-2057103734/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": "02ad6014-6e84-4c7b-83cd-24e7ffb910bb", "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-workflowtj9fp/series-workflowtj9fp-build-action-3543011450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 20:44:58 +0000 UTC FinishedAt: 2026-09-10 21:05:14 +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:*c49dd4f1-b44f-41ab-beca-4edf37edf3bd,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-workflowtj9fp/series-workflowtj9fp-convert-artifact-2057103734/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": "02ad6014-6e84-4c7b-83cd-24e7ffb910bb", "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-workflowtj9fp/series-workflowtj9fp-build-action-3543011450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:05:24 +0000 UTC FinishedAt: 2026-09-10 21:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:05:24 +0000 UTC FinishedAt: 2026-09-10 21:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:05:24 +0000 UTC FinishedAt: 2026-09-10 21:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:05:24 +0000 UTC FinishedAt: 2026-09-10 21:07:21 +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:*02ad6014-6e84-4c7b-83cd-24e7ffb910bb,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-workflowtj9fp/series-workflowtj9fp-build-action-3543011450/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-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:30 +0000 UTC FinishedAt: 2026-09-11 00:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:30 +0000 UTC FinishedAt: 2026-09-11 00:10:24 +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":["check_stack_write_fixed_off","check_stack_write"],"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:*1a4baa4e-3d84-4f75-bdae-3efec8c43060,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*02ad6014-6e84-4c7b-83cd-24e7ffb910bb,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-workflowtj9fp/series-workflowtj9fp-build-action-3855822301/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-workflowtj9fp/series-workflowtj9fp-build-action-3543011450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:30 +0000 UTC FinishedAt: 2026-09-10 21:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:30 +0000 UTC FinishedAt: 2026-09-10 21:07:35 +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":["check_stack_write_fixed_off","check_stack_write"],"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-workflowtj9fp/series-workflowtj9fp-convert-artifact-1118870427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:30 +0000 UTC FinishedAt: 2026-09-10 21:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:30 +0000 UTC FinishedAt: 2026-09-10 21:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:30 +0000 UTC FinishedAt: 2026-09-10 21:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:40 +0000 UTC FinishedAt: 2026-09-11 00:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtj9fp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","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":["check_stack_write_fixed_off","check_stack_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d2bf173a-779c-4743-a0e7-262c76ac67f0","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-10 21:07:40 +0000 UTC FinishedAt: 2026-09-11 00:10:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a4baa4e-3d84-4f75-bdae-3efec8c43060,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*02ad6014-6e84-4c7b-83cd-24e7ffb910bb,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-workflowtj9fp/series-workflowtj9fp-build-action-3855822301/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-workflowtj9fp/series-workflowtj9fp-build-action-3543011450/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-workflowtj9fp/series-workflowtj9fp-convert-artifact-1118870427/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,}