Name: series-workflowffpvt Phase: Succeeded StartedAt: 2026-08-23 20:46:47 +0000 UTC FinishedAt: 2026-08-24 01:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[0] Phase: Succeeded StartedAt: 2026-08-23 20:46:47 +0000 UTC FinishedAt: 2026-08-23 21:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 20:46:47 +0000 UTC FinishedAt: 2026-08-23 21:41:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cf5b96d9554815780f864d6f0014ac384e9be59c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_JIT_ALWAYS_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cf5b96d9554815780f864d6f0014ac384e9be59c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_JIT_ALWAYS_ON" ], "series_id": "2436bfbf-b17a-48fa-afe5-db01ef083e8b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGhhbmRsZSBzaWduIGV4dGVuc2lvbiBmb3Iga2Z1bmMgcmV0dXJucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBKSVQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgdGhhdCBjYWxsIGtmdW5jcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3ZjZmNDk4ZjcxOGI4ZDAwNTM4MDM2ZjY5NDgxOGQxODJmYmE1N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAyMTo0MDoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE3MjYsNiAmIzQzOzE3MjYsMjMgQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcbiBcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbiYjNDM7XG4mIzQzO1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xuJiM0MztcdGlmICghZm0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIShmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRykgfHwgZm0tXHUwMDNlcmV0X3NpemUgPT0gOClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSAhPSAxIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSAyIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSA0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGVtaXRfbW92c3hfcmVnKHBwcm9nLCBmbS1cdTAwM2VyZXRfc2l6ZSAqIDgsIHRydWUsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4gXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4ge1xuQEAgLTI2NjQsNiAmIzQzOzI2ODEsMTEgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRpcCAmIzQzOz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFx1MDAyNnByb2csIGZ1bmMsIGlwKTtcbiBcdFx0XHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGZ1bmMsIGlwKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSBlbWl0X2tmdW5jX3JldHVybihicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAocHJpdl9mcmFtZV9wdHIpXG4gXHRcdFx0XHRwb3BfcjkoXHUwMDI2cHJvZyk7XG4gXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBoYW5kbGUgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxN2Y2ZjQ5OGY3MThiOGQwMDUzODAzNmY2OTQ4MThkMTgyZmJhNTdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMjE6NDA6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggMWE5ZmI1MzBhZGMzYy4uNzEzYWM3MDYxM2ZmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTcyNiw2ICYjNDM7MTcyNiwyMyBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLAogCXJldHVybiBwcm9nIC0gc3RhcnQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwomIzQzOwlmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7CiYjNDM7CWlmICghZm0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCEoZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcpIHx8IGZtLSZndDtyZXRfc2l6ZSA9PSA4KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChmbS0mZ3Q7cmV0X3NpemUgIT0gMSAmYW1wOyZhbXA7IGZtLSZndDtyZXRfc2l6ZSAhPSAyICZhbXA7JmFtcDsgZm0tJmd0O3JldF9zaXplICE9IDQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZW1pdF9tb3ZzeF9yZWcocHByb2csIGZtLSZndDtyZXRfc2l6ZSAqIDgsIHRydWUsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLAogCQkgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKQogewpAQCAtMjY2NCw2ICYjNDM7MjY4MSwxMSBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCWlwICYjNDM7PSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoJmFtcDtwcm9nLCBmdW5jLCBpcCk7CiAJCQlpZiAoZW1pdF9jYWxsKCZhbXA7cHJvZywgZnVuYywgaXApKQogCQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkgewomIzQzOwkJCQllcnIgPSBlbWl0X2tmdW5jX3JldHVybihicGZfcHJvZywgaW5zbiwgJmFtcDtwcm9nKTsKJiM0MzsJCQkJaWYgKGVycikKJiM0MzsJCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJfQogCQkJaWYgKHByaXZfZnJhbWVfcHRyKQogCQkJCXBvcF9yOSgmYW1wO3Byb2cpOwogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV3IFBhdGNoIGluIHRoZSB4ODYgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGBlbWl0X2tmdW5jX3JldHVybmAgYW5kIGFyZSBjYWxsaW5nIGl0IGZyb20gYGRvX2ppdGAgd2hlbiBgc3JjX3JlZ2AgaXMgc2V0IHRvIGBCUEZfUFNFVURPX0tGVU5DX0NBTExgLiBIbW0sIGludGVyZXN0aW5nLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyBzaWduIGV4dGVuc2lvbiBmb3Iga2Z1bmMgcmV0dXJucyBub3cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSwgYWN0dWFsbHksIGluIGhvdyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgb3BlcmF0ZXMuCgpHaXZlbiB0aGF0IGBkb19qaXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODYsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIGNvbXBpbGF0aW9uIHByb2Nlc3MgbGlrZSB0aGlzIGlzIGEgZ29vZCB0YXJnZXQuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEpJVCBpcyBlbmFibGVkLiBSaWdodCwgYENPTkZJR19CUEZfSklUYCBpcyB0aGUgYmlnIG9uZS4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGluIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgIG9yIG1heWJlIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBjb25maXJtIHRoZSBzZXR0aW5ncyBhcmUgY29ycmVjdC4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGV2ZW4gZW5hYmxlZCB0byBiZWdpbiB3aXRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIHg4NiBOZXR3b3JrIE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQgb24geDg2LCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgYnVpbGQgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIG5ldHdvcmsgZHJpdmVycywgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLCBvciBvdGhlciB4ODYtc3BlY2lmaWMgbmV0d29yayBjb2RlLiBJdCB3aWxsIHByb2JhYmx5IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBtb2R1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJlIGluIHBsYWNlLiBUaGlzIE1ha2VmaWxlIHNob3VsZCByZXZlYWwgYSBsb3QgYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29yayBzdWJzeXN0ZW0gZm9yIHg4NiBzeXN0ZW1zLiBJIGNhbiB1c2UgdGhlIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0aGlzIGZpbGUgdG8gZWl0aGVyIHVuZGVyc3RhbmQgaG93IHRoZSBtb2R1bGVzIHdvcmssIGhvdyB0byBmaXggYSBwYXJ0aWN1bGFyIHByb2JsZW0sIG9yIGJlZ2luIHdvcmtpbmcgb24gdGhlIHNvbHV0aW9uIHRvIGEgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBBcmNoLXNwZWNpZmljIG5ldHdvcmsgbW9kdWxlc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRpZmVxICgkKENPTkZJR19YODZfMzIpLHkpXG4gICA3Olx0ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDMyLm9cbiAgIDg6XHRlbHNlXG4gICA5Olx0ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG4gIDEwOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQlBGIEpJVCBDb25maWd1cmF0aW9uIC0gQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgQlBGIEpJVCBzaXR1YXRpb24gYWdhaW4uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgYENPTkZJR19CUEZfSklUYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBzd2l0Y2gsIG9idmlvdXNseS4gQnV0IGhvbGQgb24sIEkgc2VlbSB0byByZW1lbWJlciB0aGVyZSYjMzk7cyBhbm90aGVyIG9uZSB0aGF0IHBsYXlzIGEgcm9sZS4gQWgsIHllcywgYENPTkZJR19CUEZfU1lTQ0FMTGAhIEdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgdG9vLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgdmVyaWZ5IHRoZSBgZG9faml0YCBmdW5jdGlvbiBpcyBwcmVzZW50IGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBCUEYgSklUIGNvZGUgaXMgYXZhaWxhYmxlIGluIHRoaXMgc2NlbmFyaW8uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19qaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBlbWl0X2tmdW5jX3JldHVybihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzQ1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3NDY6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3NDctXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODQ9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDA2MS1cdFx0XHRwYWRkaW5nID0gdHJ1ZTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOlx0XHRwcm9nbGVuID0gZG9faml0KGVudiwgcHJvZywgYWRkcnMsIGltYWdlLCByd19pbWFnZSwgb2xkcHJvZ2xlbixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYzLVx0XHRcdFx0IFx1MDAyNmN0eCwgcGFkZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIERpdmUgaW50byB0aGUgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIGhlcmUgd2l0aCBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLCBvciBpZiB0aGVyZSBhcmUgb3RoZXIsIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgcGxheSBhIGNydWNpYWwgcm9sZS4gQWhhLCBJIHNlZSBgZW1pdF9rZnVuY19yZXR1cm5gIGFuZCBgZG9faml0YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBsaWtlbHkgaW50ZXJuYWwgdG8gdGhpcyBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1ha2VzIGBicGZfaW50X2ppdF9jb21waWxlYCBldmVuIG1vcmUgaW1wb3J0YW50IGFzIHRoZSBwcmltYXJ5IGV4cG9zZWQgZW50cnkuIExldCYjMzk7cyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbjsgaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk3Mj1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk4My1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTg0OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJdCBzZWVtcyBsaWtlIGEgZGVjZW50IGVudHJ5IHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoaXMuIE5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gZ2xhbmNlIGF0IGBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWxgIOKAkyB0aGF0IG5hbWUgcmluZ3MgYSBiZWxsLCBhbmQgSSB0aGluayBpdCYjMzk7cyBsaWtlbHkgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvYnBmL2NvcmUuY2Agb3IgYSByZWxhdGVkIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaGF0JiMzOTtsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc3RhcnQgdHJhY2luZyB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jPTI2MzM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2MzgtXHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjM5Olx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xua2VybmVsL2JwZi9jb3JlLmMtMjY0MC1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ5LVxua2VybmVsL2JwZi9jb3JlLmM6MjY1MDpcdHByb2cgPSBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNjUxLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjY0PXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2NzktXHQgKiBibGluZGluZyBpcyBhY3RpdmUuIEhvd2V2ZXIsIGluIGNhc2Ugb2YgZXJyb3IgZHVyaW5nXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjgwOlx0ICogYmxpbmRpbmcsIGJwZl9pbnRfaml0X2NvbXBpbGUoKSBtdXN0IGFsd2F5cyByZXR1cm4gYVxua2VybmVsL2JwZi9jb3JlLmMtMjY4MS1cdCAqIHZhbGlkIHByb2dyYW0sIHdoaWNoIGluIHRoaXMgY2FzZSB3b3VsZCBzaW1wbHkgbm90XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzIwMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RhaWxfY2FsbF9wcm90byA9IHtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE0LS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBvbmx5IHN1cHBvcnQgY0JQRi4gZUJQRiBwcm9ncmFtcyBhcmUgaW50ZXJwcmV0ZWQuXG5rZXJuZWwvYnBmL2NvcmUuYzozMjE1OiAqIEl0IGlzIGVuY291cmFnZWQgdG8gaW1wbGVtZW50IGJwZl9pbnRfaml0X2NvbXBpbGUoKSBpbnN0ZWFkLCBzbyB0aGF0XG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE2LSAqIGVCUEYgYW5kIGltcGxpY2l0bHkgYWxzbyBjQlBGIGNhbiBnZXQgSklUZWQhXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE3LSAqL1xua2VybmVsL2JwZi9jb3JlLmM6MzIxODpzdHJ1Y3QgYnBmX3Byb2cgKiBfX3dlYWsgYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE5LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjIzLS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBzdXBwb3J0IGVCUEYuIEFsbCBjQlBGIGNvZGUgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvXG5rZXJuZWwvYnBmL2NvcmUuYzozMjI0OiAqIGVCUEYgYnkgdGhlIGtlcm5lbCBhbmQgaXMgbGF0ZXIgY29tcGlsZWQgYnkgYnBmX2ludF9qaXRfY29tcGlsZSgpLlxua2VybmVsL2JwZi9jb3JlLmMtMzIyNS0gKi9cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEwNjY9c3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyMDItXHRcdFx0ZnVuY1tpXS1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2JvdW5kYXJ5ID0gZW52LVx1MDAzZXNlZW5fZXhjZXB0aW9uO1xua2VybmVsL2JwZi9maXh1cHMuYzoxMjAzOlx0XHRmdW5jW2ldID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIGZ1bmNbaV0pO1xua2VybmVsL2JwZi9maXh1cHMuYy0xMjA0LVx0XHRpZiAoIWZ1bmNbaV0tXHUwMDNlaml0ZWQpIHtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyNDYtXHRcdG9sZF9icGZfZnVuYyA9IGZ1bmNbaV0tXHUwMDNlYnBmX2Z1bmM7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEyNDc6XHRcdHRtcCA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBmdW5jW2ldKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTI0OC1cdFx0aWYgKHRtcCAhPSBmdW5jW2ldIHx8IGZ1bmNbaV0tXHUwMDNlYnBmX2Z1bmMgIT0gb2xkX2JwZl9mdW5jKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgZnVuY3Rpb25zIGludm9sdmVkIGJlc2lkZXMgdGhpcyBvbmUuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZW1pdF9rZnVuY19yZXR1cm5gIGFuZCBtb2RpZmllcyBgZG9faml0YCB0byBjYWxsIGl0IHVuZGVyIHRoZSBjb25kaXRpb24gYHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMYC4gVGhpcyBpcyBvYnZpb3VzbHkgcmVsYXRlZCB0byBCUEYga2Z1bmNzLiBNYWtlcyBzZW5zZS4gSSBzaG91bGQgY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciB0aGlzLgoKYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JQRl9KSVRgIGFuZCBvZiBjb3Vyc2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgZW5hYmxlZCBhcyBleHBlY3RlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgoKSG1tLCBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgaGVyZT8gYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgY291bGQgYmUgYSBoZWxwZnVsIG9uZSB0byBmb3JjZSB0aGUgSklUIHRvIGJlIHVzZWQsIGVuc3VyaW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgZXhlcmNpc2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB4ODYgYEtjb25maWdgIGZpbGUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkaXJlY3RvcnkgZm9yIHRoZSBCUEYgY29uZmlncyB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIHdvdWxkIGJlIHRoZSBLY29uZmlnIGZpbGVzLCByaWdodD8gVGhleSYjMzk7cmUgdGhlIGJhY2tib25lIG9mIGhvdyBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQuIEdpdmVuIEJQRiYjMzk7cyBzdHJvbmcgbmV0d29ya2luZyB0aWVzLCBlaXRoZXIgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgb3IgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gdG8gZmluZCB0aGUgb3B0aW9ucyBJJiMzOTttIGFmdGVyLiBJJiMzOTtsbCBjaGVjayB0aG9zZSBmaXJzdC4gVGhleSBzaG91bGQgY29udGFpbiB0aGUgcmVsZXZhbnQgYGNvbmZpZ2AgZW50cmllcywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIEJQRiB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGtub2JzIGFuZCBsZXZlcnMgdGhhdCBjb250cm9sIEJQRiYjMzk7cyBiZWhhdmlvdXIuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG5ldyBvciBjaGFuZ2VkIG9wdGlvbnMgc2luY2UgSSBsYXN0IGxvb2tlZC4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgaXMgaW50ZWdyYXRlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBidWlsZGluZyBvciBjb25maWd1cmluZyBhIGtlcm5lbCB3aXRoIEJQRiBjYXBhYmlsaXRpZXMuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCBmb3Igc2V0dGluZyB1cCBteSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgZGV0ZXJtaW5pbmcgdGhlIGJlc3Qgc3RyYXRlZ3kgZm9yIG15IHdvcmsuIFNvLCBga2VybmVsL2JwZi9LY29uZmlnYCwgaGVyZSB3ZSBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWctMy0jIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXG5rZXJuZWwvYnBmL0tjb25maWc6NDpjb25maWcgQlBGXG5rZXJuZWwvYnBmL0tjb25maWctNS1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxua2VybmVsL2JwZi9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwOAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEpJVCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIEpJVCBjb2RlLCBzcGVjaWZpY2FsbHkgb24geDg2LCB0byBzZWUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdHMgYXJlIGZvciBmdXp6aW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9KSVRfQUxXQVlTX09OYC4gRGVmaW5pdGVseSB3YW50IHRvIGtlZXAgYW4gZXllIG9uIHRob3NlLgoKRmlyc3QgdGhpbmcgdGhhdCBqdW1wZWQgb3V0IHdhcyB0aGlzIGBlbWl0X2tmdW5jX3JldHVybmAgZnVuY3Rpb24gaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRvX2ppdGAgd2hlbiBgc3JjX3JlZ2AgaXMgYEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTGAuIFRoaXMgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgYW5kIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzLCBob3dldmVyLCBpcyB0aGUgc3ltYm9sIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYEJQRl9KSVRgIGFsb25lICpkb2VzKiBlbmFibGUgdGhlIEpJVCBjb21waWxlciwgd2hpY2ggaXMgZ29vZC4gYEJQRl9TWVNDQUxMYCBpcywgb2YgY291cnNlLCBlc3NlbnRpYWwgZm9yIGxvYWRpbmcgdGhlIEJQRiBwcm9ncmFtcyB0byBiZWdpbiB3aXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aG9zZSBlbmFibGVkLgoKSSBjaGVja2VkIGlmIEkgc2hvdWxkIGluY2x1ZGUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRvX2ppdGAsIGJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgbGlrZSB0aGUgcmVhbCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgc29saWQuIEl0JiMzOTtzIHRoZSBtYWluIGZ1bmN0aW9uIEkgbmVlZCB0byBiZSBmdXp6aW5nLgoKSSYjMzk7bSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgdGhlIHJlc3VsdHMsIGZvY3VzaW5nIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgcHJpbWFyeSBzeW1ib2w6IGBicGZfaW50X2ppdF9jb21waWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBoYW5kbGUgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBoYW5kbGUgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTdmNmY0OThmNzE4YjhkMDA1MzgwMzZmNjk0ODE4ZDE4MmZiYTU3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDIxOjQwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTE3MjYsNiAmIzQzOzE3MjYsMjMgQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywKIAlyZXR1cm4gcHJvZyAtIHN0YXJ0OwogfQogCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX3JldHVybihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pOwomIzQzOwlpZiAoIWZtKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghKGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHKSB8fCBmbS0mZ3Q7cmV0X3NpemUgPT0gOCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoZm0tJmd0O3JldF9zaXplICE9IDEgJmFtcDsmYW1wOyBmbS0mZ3Q7cmV0X3NpemUgIT0gMiAmYW1wOyZhbXA7IGZtLSZndDtyZXRfc2l6ZSAhPSA0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVtaXRfbW92c3hfcmVnKHBwcm9nLCBmbS0mZ3Q7cmV0X3NpemUgKiA4LCB0cnVlLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSwKIAkJICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZykKIHsKQEAgLTI2NjQsNiAmIzQzOzI2ODEsMTEgQEAgc3Q6CQkJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7CiAJCQlpcCAmIzQzOz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKCZhbXA7cHJvZywgZnVuYywgaXApOwogCQkJaWYgKGVtaXRfY2FsbCgmYW1wO3Byb2csIGZ1bmMsIGlwKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQkJZXJyID0gZW1pdF9rZnVuY19yZXR1cm4oYnBmX3Byb2csIGluc24sICZhbXA7cHJvZyk7CiYjNDM7CQkJCWlmIChlcnIpCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCX0KIAkJCWlmIChwcml2X2ZyYW1lX3B0cikKIAkJCQlwb3BfcjkoJmFtcDtwcm9nKTsKIAkJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwOQoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBTaWduIEV4dGVuc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0JiMzOTtzIGFkZGluZyBgZW1pdF9rZnVuY19yZXR1cm5gLCBhbmQgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgc2lnbi1leHRlbmRpbmcgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgY2FsbGVkIHZpYSBgQlBGX1BTRVVET19LRlVOQ19DQUxMYC4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgaWYgYSBrZnVuYyByZXR1cm5zIGEgc2lnbmVkIGludGVnZXIgc21hbGxlciB0aGFuIDggYnl0ZXMgKDEsIDIsIG9yIDQpLCB0aGUgSklUIGNvbXBpbGVyIHdpbGwgZW1pdCBhIGBtb3ZzeGAgaW5zdHJ1Y3Rpb24gdG8gc2lnbi1leHRlbmQgdGhhdCB2YWx1ZSBpbnRvIHRoZSBgQlBGX1JFR18wYCByZWdpc3Rlci4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgdGhpcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBrZnVuYywgaWYgaXQgd2FzbiYjMzk7dCBzaWduLWV4dGVuZGVkLCBtaWdodCBoYXZlIGhhZCBnYXJiYWdlIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZSByZWdpc3Rlci4gSWYgYSBCUEYgcHJvZ3JhbSBzdWJzZXF1ZW50bHkgcmVhZCB0aG9zZSBiaXRzLCB3ZSBjb3VsZCBoYXZlIGEga2VybmVsIG1lbW9yeSBsZWFrLCBvciBhdCBsZWFzdCBhIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZSB1c2FnZS4gSG93ZXZlciwgS01TQU4sIG91ciBwcmltYXJ5IHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIHNvcnRzIG9mIGlzc3VlcywgdHJhY2tzIG1lbW9yeSBhdCB0aGUgQyBsZXZlbC4gSXQgKmRvZXNuJiMzOTt0KiBpbnN0cnVtZW50IHRoZSBKSVQtY29tcGlsZWQgQlBGIGNvZGUgaXRzZWxmLCB3aGljaCBpcyB3aGVyZSB0aGlzIG5ldyBzaWduIGV4dGVuc2lvbiBpcyBvY2N1cnJpbmcuIEtNU0FOJiMzOTtzIHNoYWRvdyBtZW1vcnkgd291bGRuJiMzOTt0IG5lY2Vzc2FyaWx5IHRyYWNrIHRoZSBzdGF0ZSBvZiByZWdpc3RlcnMgKndpdGhpbiogdGhlIEJQRiBKSVQgY29kZS4KCldhaXQsIHRoZSB4ODYtNjQgQUJJIGZvciBDIGZ1bmN0aW9uczogSWYgYSBrZnVuYyByZXR1cm5zIGEgMzItYml0IGBpbnRgLCB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgYFJBWGAgcmVnaXN0ZXIgYXJlICpub3QqIGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIG9yIHNpZ24tZXh0ZW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBBQkkhIFNvLCBpZiB0aGUgSklUIGNvbXBpbGVyICpkaWRuJiMzOTt0KiBleHRlbmQgdGhlIHJldHVybiB2YWx1ZSwgdGhlIEJQRiBwcm9ncmFtIGNvdWxkIGJlIHNlZWluZyBnYXJiYWdlLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpwZXIgc2UqLCBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZSB2YWx1ZXMgZnJvbSB0aGUga2Z1bmNzIGFyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtLgoKU28sIGRvZXMgdGhpcyBhY3R1YWxseSBjcmVhdGUgYSBLTVNBTi1kZXRlY3RhYmxlIGJ1Zz8gTm8sIGl0JiMzOTtzIG5vdCBsaWtlIHRoZSBwYXRjaCBpcyBhbGxvY2F0aW5nIG1lbW9yeSwgd3JpdGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgbWFraW5nIGEgbG9naWMgZXJyb3IgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHByb2JsZW0gaXMgb25lIG9mIEFCSSBjb21wbGlhbmNlLiBUaGUgSklUIGNvbXBpbGVyIHdhc24mIzM5O3QgZG9pbmcgdGhlIHByb3BlciBzaWduIGV4dGVuc2lvbiBhY2NvcmRpbmcgdG8gd2hhdCB0aGUgQlBGIHByb2dyYW0gd291bGQgKmV4cGVjdCosIGluIHRoZSBzaWduZWQgdHlwZSBjYXNlLiBBIG5lZ2F0aXZlIHZhbHVlIGJlaW5nIHJldHVybmVkLCBmb3IgZXhhbXBsZSwgY291bGQgYmUgcmVhZCBhcyBhIGh1Z2UgcG9zaXRpdmUgbnVtYmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb3JyZWN0bmVzcyBpc3N1ZSwgYSBidWcgaW4gdGhlIEpJVCwgYnV0IGl0JiMzOTtzICpub3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgdXBwZXIgYml0cyBvZiBgUkFYYCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFzIEtNU0FOIGRlZmluZXMgaXQsIHRoZXkgYXJlIHNpbXBseSByZWdpc3RlciBzdGF0ZS4KCkFsc28sIHRoZSBwYXRjaCBqdXN0IGFkZHMgYSBgbW92c3hgIGluc3RydWN0aW9uLiBUaGVyZSYjMzk7cyBubyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gcGFkZGluZywgbm90aGluZyB0aGF0IGNvdWxkIGJlIGEgdmVjdG9yIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBzZWVwIHRocm91Z2guIEl0JiMzOTtzIHNvbGVseSBhIEpJVCBjb21waWxlciBtb2RpZmljYXRpb24uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBkb24mIzM5O3QgbmVlZCB0byBydW4gYSBzcGVjaWFsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcyBwYXRjaC4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBidWcgd2hlcmUgc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzIHdlcmUgKm5vdCogcHJvcGVybHkgc2lnbi1leHRlbmRlZCB0byA2NC1iaXQgd2l0aGluIHRoZSBCUEYgcmVnaXN0ZXIgYEJQRl9SRUdfMGAuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gQlBGIHByb2dyYW1zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lZ2F0aXZlIGVycm9yIGNvZGVzIG9yIG90aGVyIHNpZ25lZCB2YWx1ZXMuIEhvd2V2ZXIsIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5IHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgbWF0dGVyIG9mIHRoZSBKSVQgY29tcGlsZXImIzM5O3MgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQUJJLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgdGhlIHJldHVybiB2YWx1ZXMgb2Yga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSB0aGF0IHJldHVybiBzaWduZWQgOC0sIDE2LSwgb3IgMzItYml0IGludGVnZXJzLiBQcmV2aW91c2x5LCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IEJQRiByZWdpc3RlciAoQlBGX1JFR18wKSBtaWdodCBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBzaWduLWV4dGVuZGVkLCBsZWFkaW5nIHRvIGxvZ2ljIGJ1Z3MgaW4gQlBGIHByb2dyYW1zIChlLmcuLCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBiZWluZyBldmFsdWF0ZWQgYXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVycykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsL0FCSSBjb3JyZWN0bmVzcyBpc3N1ZSBpbiB0aGUgSklUIGNvbXBpbGVyLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIEMgbGV2ZWwgYW5kIGRvZXMgbm90IGluc3RydW1lbnQgSklUZWQgQlBGIG1hY2hpbmUgY29kZSB0byBjYXRjaCByZWdpc3RlciBzdGF0ZSBpc3N1ZXMgbGlrZSB0aGlzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoaXMgSklUIGJlaGF2aW9yLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6MzEuNTI4NjQ1NTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDc5MzY5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9KSVRfQUxXQVlTX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDozMS41Mjg2NTA3ODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc1OTQ2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2Y2ZjQ5OGY3MThiOGQwMDUzODAzNmY2OTQ4MThkMTgyZmJhNTdkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIzIDIxOjQwOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTE3MjYsNiArMTcyNiwyMyBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxcbiBcXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XFxuK1xcbitcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XFxuK1xcdGlmICghZm0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIShmbS1cXHUwMDNlcmV0X2ZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHKSB8fCBmbS1cXHUwMDNlcmV0X3NpemUgPT0gOClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChmbS1cXHUwMDNlcmV0X3NpemUgIT0gMSBcXHUwMDI2XFx1MDAyNiBmbS1cXHUwMDNlcmV0X3NpemUgIT0gMiBcXHUwMDI2XFx1MDAyNiBmbS1cXHUwMDNlcmV0X3NpemUgIT0gNClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRlbWl0X21vdnN4X3JlZyhwcHJvZywgZm0tXFx1MDAzZXJldF9zaXplICogOCwgdHJ1ZSwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbiBcXHRcXHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxcbiB7XFxuQEAgLTI2NjQsNiArMjY4MSwxMSBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0aXAgKz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFxcdTAwMjZwcm9nLCBmdW5jLCBpcCk7XFxuIFxcdFxcdFxcdGlmIChlbWl0X2NhbGwoXFx1MDAyNnByb2csIGZ1bmMsIGlwKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2tmdW5jX3JldHVybihicGZfcHJvZywgaW5zbiwgXFx1MDAyNnByb2cpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChwcml2X2ZyYW1lX3B0cilcXG4gXFx0XFx0XFx0XFx0cG9wX3I5KFxcdTAwMjZwcm9nKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjMyLjkwNjg2Njk4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5NDY1MTUxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfSklUX0FMV0FZU19PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxN2Y2ZjQ5OGY3MThiOGQwMDUzODAzNmY2OTQ4MThkMTgyZmJhNTdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMjE6NDA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE3MjYsNiArMTcyNiwyMyBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuIFx0cmV0dXJuIHByb2cgLSBzdGFydDtcbiB9XG4gXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX3JldHVybihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4rXG4rXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4rXHRpZiAoIWZtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghKGZtLVx1MDAzZXJldF9mbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHKSB8fCBmbS1cdTAwM2VyZXRfc2l6ZSA9PSA4KVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSAhPSAxIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSAyIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSA0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGVtaXRfbW92c3hfcmVnKHBwcm9nLCBmbS1cdTAwM2VyZXRfc2l6ZSAqIDgsIHRydWUsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4gXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4ge1xuQEAgLTI2NjQsNiArMjY4MSwxMSBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdGlwICs9IHg4Nl9jYWxsX2RlcHRoX2VtaXRfYWNjb3VudGluZyhcdTAwMjZwcm9nLCBmdW5jLCBpcCk7XG4gXHRcdFx0aWYgKGVtaXRfY2FsbChcdTAwMjZwcm9nLCBmdW5jLCBpcCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfcmV0dXJuKGJwZl9wcm9nLCBpbnNuLCBcdTAwMjZwcm9nKTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0fVxuIFx0XHRcdGlmIChwcml2X2ZyYW1lX3B0cilcbiBcdFx0XHRcdHBvcF9yOShcdTAwMjZwcm9nKTtcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjMyLjkwNjg2ODQ2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzcwMzE1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV3IFBhdGNoIGluIHRoZSB4ODYgQlBGIEpJVCBDb21waWxlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgbmV3IHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYGVtaXRfa2Z1bmNfcmV0dXJuYCBhbmQgYXJlIGNhbGxpbmcgaXQgZnJvbSBgZG9faml0YCB3aGVuIGBzcmNfcmVnYCBpcyBzZXQgdG8gYEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTGAuIEhtbSwgaW50ZXJlc3RpbmcuIFNlZW1zIGxpa2Ugd2UncmUgaGFuZGxpbmcgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMgbm93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIGFjdHVhbGx5LCBpbiBob3cgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIG9wZXJhdGVzLlxuXG5HaXZlbiB0aGF0IGBkb19qaXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODYsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIGNvbXBpbGF0aW9uIHByb2Nlc3MgbGlrZSB0aGlzIGlzIGEgZ29vZCB0YXJnZXQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgSklUIGlzIGVuYWJsZWQuIFJpZ2h0LCBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBiaWcgb25lLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgb3IgbWF5YmUgYGFyY2gveDg2L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHNldHRpbmdzIGFyZSBjb3JyZWN0LiBHb3R0YSBtYWtlIHN1cmUgaXQncyBldmVuIGVuYWJsZWQgdG8gYmVnaW4gd2l0aCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjM3LjQ0MzkwMjc5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg1NjI3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDozNy41MDQ3NjU1MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkzMDk0MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gdGhlIHg4NiBOZXR3b3JrIE1ha2VmaWxlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gVGhlIHRhc2sgYXQgaGFuZCBsaWtlbHkgaW52b2x2ZXMgc29tZXRoaW5nIG5ldHdvcmstcmVsYXRlZCBvbiB4ODYsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzLCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMsIG9yIG90aGVyIHg4Ni1zcGVjaWZpYyBuZXR3b3JrIGNvZGUuIEl0IHdpbGwgcHJvYmFibHkgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHNwZWNpZmljIG1vZHVsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSB4ODYgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgaW4gcGxhY2UuIFRoaXMgTWFrZWZpbGUgc2hvdWxkIHJldmVhbCBhIGxvdCBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgc3RydWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN1YnN5c3RlbSBmb3IgeDg2IHN5c3RlbXMuIEkgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoaXMgZmlsZSB0byBlaXRoZXIgdW5kZXJzdGFuZCBob3cgdGhlIG1vZHVsZXMgd29yaywgaG93IHRvIGZpeCBhIHBhcnRpY3VsYXIgcHJvYmxlbSwgb3IgYmVnaW4gd29ya2luZyBvbiB0aGUgc29sdXRpb24gdG8gYSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NDAuODk3ODYyMjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEFyY2gtc3BlY2lmaWMgbmV0d29yayBtb2R1bGVzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSlcXG4gICA3OlxcdCAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDMyLm9cXG4gICA4OlxcdGVsc2VcXG4gICA5OlxcdCAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuICAxMDpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo0MC44OTc5MTQyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDQ2NDEwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkJQRiBKSVQgQ29uZmlndXJhdGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBCUEYgSklUIHNpdHVhdGlvbiBhZ2Fpbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyBgQ09ORklHX0JQRl9KSVRgLiBUaGF0J3MgdGhlIHByaW1hcnkgc3dpdGNoLCBvYnZpb3VzbHkuIEJ1dCBob2xkIG9uLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhlcmUncyBhbm90aGVyIG9uZSB0aGF0IHBsYXlzIGEgcm9sZS4gQWgsIHllcywgYENPTkZJR19CUEZfU1lTQ0FMTGAhIEdvdHRhIG1ha2Ugc3VyZSB0aGF0J3MgZW5hYmxlZCB0b28uIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHZlcmlmeSB0aGUgYGRvX2ppdGAgZnVuY3Rpb24gaXMgcHJlc2VudCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgQlBGIEpJVCBjb2RlIGlzIGF2YWlsYWJsZSBpbiB0aGlzIHNjZW5hcmlvLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjQzLjkwMjU1NzcwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyMjc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19qaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZW1pdF9rZnVuY19yZXR1cm4oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzQ1LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzQ2OnN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTc0Ny1cXHRcXHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODQ9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYxLVxcdFxcdFxcdHBhZGRpbmcgPSB0cnVlO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOlxcdFxcdHByb2dsZW4gPSBkb19qaXQoZW52LCBwcm9nLCBhZGRycywgaW1hZ2UsIHJ3X2ltYWdlLCBvbGRwcm9nbGVuLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYzLVxcdFxcdFxcdFxcdCBcXHUwMDI2Y3R4LCBwYWRkaW5nKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NDMuOTQ2OTgzNjYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MTc4MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIERpdmUgaW50byB0aGUgQlBGIEpJVCBDb21waWxlcioqXG5cbk9rYXksIHNvIEknbSBzdGFydGluZyBoZXJlIHdpdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcywgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24sIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBwbGF5IGEgY3J1Y2lhbCByb2xlLiBBaGEsIEkgc2VlIGBlbWl0X2tmdW5jX3JldHVybmAgYW5kIGBkb19qaXRgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHNvIHRoZXkncmUgbGlrZWx5IGludGVybmFsIHRvIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtYWtlcyBgYnBmX2ludF9qaXRfY29tcGlsZWAgZXZlbiBtb3JlIGltcG9ydGFudCBhcyB0aGUgcHJpbWFyeSBleHBvc2VkIGVudHJ5LiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uOyBpdCdzIHByb2JhYmx5IGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NDcuNzg4NzY2NjMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc4MDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk3Mj1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTgzLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTg0OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5ODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo0Ny44MzU1NTM0OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NTEzMjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEl0IHNlZW1zIGxpa2UgYSBkZWNlbnQgZW50cnkgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgdGhpcy4gTm93LCBhcmUgdGhlcmUgYW55ICpvdGhlciogZW50cnkgcG9pbnRzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBnbGFuY2UgYXQgYGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbGAg4oCTIHRoYXQgbmFtZSByaW5ncyBhIGJlbGwsIGFuZCBJIHRoaW5rIGl0J3MgbGlrZWx5IHJlc2lkaW5nIHdpdGhpbiBga2VybmVsL2JwZi9jb3JlLmNgIG9yIGEgcmVsYXRlZCBmaWxlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaGF0J2xsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBmcmFtZXdvcmsuIExldCdzIHN0YXJ0IHRyYWNpbmcgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo1MS4yMzA2ODg0NjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njc5Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM4LVxcdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjM5OlxcdFxcdHJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XFxua2VybmVsL2JwZi9jb3JlLmMtMjY0MC1cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NDktXFxua2VybmVsL2JwZi9jb3JlLmM6MjY1MDpcXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NTEtXFx0aWYgKHByb2ctXFx1MDAzZWppdGVkKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjY0PXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjY3OS1cXHQgKiBibGluZGluZyBpcyBhY3RpdmUuIEhvd2V2ZXIsIGluIGNhc2Ugb2YgZXJyb3IgZHVyaW5nXFxua2VybmVsL2JwZi9jb3JlLmM6MjY4MDpcXHQgKiBibGluZGluZywgYnBmX2ludF9qaXRfY29tcGlsZSgpIG11c3QgYWx3YXlzIHJldHVybiBhXFxua2VybmVsL2JwZi9jb3JlLmMtMjY4MS1cXHQgKiB2YWxpZCBwcm9ncmFtLCB3aGljaCBpbiB0aGlzIGNhc2Ugd291bGQgc2ltcGx5IG5vdFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzIwMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RhaWxfY2FsbF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMTQtLyogU3R1YiBmb3IgSklUcyB0aGF0IG9ubHkgc3VwcG9ydCBjQlBGLiBlQlBGIHByb2dyYW1zIGFyZSBpbnRlcnByZXRlZC5cXG5rZXJuZWwvYnBmL2NvcmUuYzozMjE1OiAqIEl0IGlzIGVuY291cmFnZWQgdG8gaW1wbGVtZW50IGJwZl9pbnRfaml0X2NvbXBpbGUoKSBpbnN0ZWFkLCBzbyB0aGF0XFxua2VybmVsL2JwZi9jb3JlLmMtMzIxNi0gKiBlQlBGIGFuZCBpbXBsaWNpdGx5IGFsc28gY0JQRiBjYW4gZ2V0IEpJVGVkIVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMTctICovXFxua2VybmVsL2JwZi9jb3JlLmM6MzIxODpzdHJ1Y3QgYnBmX3Byb2cgKiBfX3dlYWsgYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9jb3JlLmMtMzIxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjIzLS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBzdXBwb3J0IGVCUEYuIEFsbCBjQlBGIGNvZGUgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvXFxua2VybmVsL2JwZi9jb3JlLmM6MzIyNDogKiBlQlBGIGJ5IHRoZSBrZXJuZWwgYW5kIGlzIGxhdGVyIGNvbXBpbGVkIGJ5IGJwZl9pbnRfaml0X2NvbXBpbGUoKS5cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjI1LSAqL1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMDY2PXN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyMDItXFx0XFx0XFx0ZnVuY1tpXS1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fYm91bmRhcnkgPSBlbnYtXFx1MDAzZXNlZW5fZXhjZXB0aW9uO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTIwMzpcXHRcXHRmdW5jW2ldID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIGZ1bmNbaV0pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTIwNC1cXHRcXHRpZiAoIWZ1bmNbaV0tXFx1MDAzZWppdGVkKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyNDYtXFx0XFx0b2xkX2JwZl9mdW5jID0gZnVuY1tpXS1cXHUwMDNlYnBmX2Z1bmM7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxMjQ3OlxcdFxcdHRtcCA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBmdW5jW2ldKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyNDgtXFx0XFx0aWYgKHRtcCAhPSBmdW5jW2ldIHx8IGZ1bmNbaV0tXFx1MDAzZWJwZl9mdW5jICE9IG9sZF9icGZfZnVuYykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo1MS4yNzYzNzAyMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk0MzczNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBmdW5jdGlvbnMgaW52b2x2ZWQgYmVzaWRlcyB0aGlzIG9uZS5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYGVtaXRfa2Z1bmNfcmV0dXJuYCBhbmQgbW9kaWZpZXMgYGRvX2ppdGAgdG8gY2FsbCBpdCB1bmRlciB0aGUgY29uZGl0aW9uIGBzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTGAuIFRoaXMgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gQlBGIGtmdW5jcy4gTWFrZXMgc2Vuc2UuIEkgc2hvdWxkIGNoZWNrIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBmb3IgdGhpcy5cblxuYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgYENPTkZJR19CUEZfSklUYCBhbmQgb2YgY291cnNlIGBDT05GSUdfQlBGX1NZU0NBTExgIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGVuYWJsZWQgYXMgZXhwZWN0ZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuSG1tLCBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgaGVyZT8gYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgY291bGQgYmUgYSBoZWxwZnVsIG9uZSB0byBmb3JjZSB0aGUgSklUIHRvIGJlIHVzZWQsIGVuc3VyaW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgZXhlcmNpc2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHg4NiBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yeSBmb3IgdGhlIEJQRiBjb25maWdzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NTYuMDcwNzQ2MjQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE5NTIwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo1Ni4xMTY5NDkxMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NTMyMjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyB3b3VsZCBiZSB0aGUgS2NvbmZpZyBmaWxlcywgcmlnaHQ/IFRoZXkncmUgdGhlIGJhY2tib25lIG9mIGhvdyBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQuIEdpdmVuIEJQRidzIHN0cm9uZyBuZXR3b3JraW5nIHRpZXMsIGVpdGhlciB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBvciB0aGUgYG5ldC9LY29uZmlnYCBmaWxlIHNlZW1zIHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbiB0byBmaW5kIHRoZSBvcHRpb25zIEknbSBhZnRlci4gSSdsbCBjaGVjayB0aG9zZSBmaXJzdC4gVGhleSBzaG91bGQgY29udGFpbiB0aGUgcmVsZXZhbnQgYGNvbmZpZ2AgZW50cmllcywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NTkuODcyMjczODUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMwNzMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjU5LjkxNTU4Njg3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA5ODM0NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIExldCdzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBCUEYgd2l0aGluIHRoZSBrZXJuZWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGtub2JzIGFuZCBsZXZlcnMgdGhhdCBjb250cm9sIEJQRidzIGJlaGF2aW91ci4gSSB3YW50IHRvIHNlZSB3aGF0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGF0IHJlcXVpcmVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBvcHRpb25zIHNpbmNlIEkgbGFzdCBsb29rZWQuIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdW5kZXJzdGFuZGluZyBob3cgQlBGIGlzIGludGVncmF0ZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYnVpbGRpbmcgb3IgY29uZmlndXJpbmcgYSBrZXJuZWwgd2l0aCBCUEYgY2FwYWJpbGl0aWVzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIHNldHRpbmcgdXAgbXkgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgYW5kIGRldGVybWluaW5nIHRoZSBiZXN0IHN0cmF0ZWd5IGZvciBteSB3b3JrLiBTbywgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGhlcmUgd2UgZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MTowMy4yMjU0MjM5NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODIxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZy0zLSMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cXG5rZXJuZWwvYnBmL0tjb25maWc6NDpjb25maWcgQlBGXFxua2VybmVsL2JwZi9LY29uZmlnLTUtXFx0Ym9vbFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cXG5rZXJuZWwvYnBmL0tjb25maWc6NzM6Y29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXFx0Ym9vbCBcXFwiRGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctOTEtXFxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXFxua2VybmVsL2JwZi9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MDMuMjcwMjU0MDM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjc0NDMxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBKSVQgY29kZSwgc3BlY2lmaWNhbGx5IG9uIHg4NiwgdG8gc2VlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZSBmb3IgZnV6emluZy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9KSVRfQUxXQVlTX09OYC4gRGVmaW5pdGVseSB3YW50IHRvIGtlZXAgYW4gZXllIG9uIHRob3NlLlxuXG5GaXJzdCB0aGluZyB0aGF0IGp1bXBlZCBvdXQgd2FzIHRoaXMgYGVtaXRfa2Z1bmNfcmV0dXJuYCBmdW5jdGlvbiBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBkb19qaXRgIHdoZW4gYHNyY19yZWdgIGlzIGBCUEZfUFNFVURPX0tGVU5DX0NBTExgLiBUaGlzIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIGFuZCBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzLCBob3dldmVyLCBpcyB0aGUgc3ltYm9sIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgQlBGX0pJVGAgYWxvbmUgKmRvZXMqIGVuYWJsZSB0aGUgSklUIGNvbXBpbGVyLCB3aGljaCBpcyBnb29kLiBgQlBGX1NZU0NBTExgIGlzLCBvZiBjb3Vyc2UsIGVzc2VudGlhbCBmb3IgbG9hZGluZyB0aGUgQlBGIHByb2dyYW1zIHRvIGJlZ2luIHdpdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRob3NlIGVuYWJsZWQuXG5cbkkgY2hlY2tlZCBpZiBJIHNob3VsZCBpbmNsdWRlIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkb19qaXRgLCBidXQgc2luY2UgaXQncyBzdGF0aWMsIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgbGlrZSB0aGUgcmVhbCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgc29saWQuIEl0J3MgdGhlIG1haW4gZnVuY3Rpb24gSSBuZWVkIHRvIGJlIGZ1enppbmcuXG5cbkknbSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgdGhlIHJlc3VsdHMsIGZvY3VzaW5nIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgcHJpbWFyeSBzeW1ib2w6IGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwOCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MTIuMjk3NzAwMzkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzMTU0NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfSklUX0FMV0FZU19PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfSklUX0FMV0FZU19PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MToxMi4zNzIwMjEzNDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzA0NTUyNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MTIuMzcyNDE5MjQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MzA0MTUxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgdGhlIHJldHVybiB2YWx1ZXMgb2Yga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSB0aGF0IHJldHVybiBzaWduZWQgOC0sIDE2LSwgb3IgMzItYml0IGludGVnZXJzLiBQcmV2aW91c2x5LCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IEJQRiByZWdpc3RlciAoQlBGX1JFR18wKSBtaWdodCBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBzaWduLWV4dGVuZGVkLCBsZWFkaW5nIHRvIGxvZ2ljIGJ1Z3MgaW4gQlBGIHByb2dyYW1zIChlLmcuLCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBiZWluZyBldmFsdWF0ZWQgYXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVycykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsL0FCSSBjb3JyZWN0bmVzcyBpc3N1ZSBpbiB0aGUgSklUIGNvbXBpbGVyLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIEMgbGV2ZWwgYW5kIGRvZXMgbm90IGluc3RydW1lbnQgSklUZWQgQlBGIG1hY2hpbmUgY29kZSB0byBjYXRjaCByZWdpc3RlciBzdGF0ZSBpc3N1ZXMgbGlrZSB0aGlzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoaXMgSklUIGJlaGF2aW9yLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ZjZmNDk4ZjcxOGI4ZDAwNTM4MDM2ZjY5NDgxOGQxODJmYmE1N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAyMTo0MDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMWE5ZmI1MzBhZGMzYy4uNzEzYWM3MDYxM2ZmNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTcyNiw2ICsxNzI2LDIzIEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4gXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xuIH1cbiBcbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbitcbitcdGZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGJwZl9wcm9nLCBpbnNuKTtcbitcdGlmICghZm0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCEoZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcpIHx8IGZtLVx1MDAzZXJldF9zaXplID09IDgpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKGZtLVx1MDAzZXJldF9zaXplICE9IDEgXHUwMDI2XHUwMDI2IGZtLVx1MDAzZXJldF9zaXplICE9IDIgXHUwMDI2XHUwMDI2IGZtLVx1MDAzZXJldF9zaXplICE9IDQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZW1pdF9tb3ZzeF9yZWcocHByb2csIGZtLVx1MDAzZXJldF9zaXplICogOCwgdHJ1ZSwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjY2NCw2ICsyNjgxLDExIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0aXAgKz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFx1MDAyNnByb2csIGZ1bmMsIGlwKTtcbiBcdFx0XHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGZ1bmMsIGlwKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuK1x0XHRcdFx0ZXJyID0gZW1pdF9rZnVuY19yZXR1cm4oYnBmX3Byb2csIGluc24sIFx1MDAyNnByb2cpO1xuK1x0XHRcdFx0aWYgKGVycilcbitcdFx0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHR9XG4gXHRcdFx0aWYgKHByaXZfZnJhbWVfcHRyKVxuIFx0XHRcdFx0cG9wX3I5KFx1MDAyNnByb2cpO1xuIFx0XHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MTIuMzcyNDIwMTQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MzA0MTMwMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBTaWduIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCdzIGFkZGluZyBgZW1pdF9rZnVuY19yZXR1cm5gLCBhbmQgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGFsbCBhYm91dCBzaWduLWV4dGVuZGluZyB0aGUgcmV0dXJuIHZhbHVlIGZyb20ga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSBjYWxsZWQgdmlhIGBCUEZfUFNFVURPX0tGVU5DX0NBTExgLiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCBpZiBhIGtmdW5jIHJldHVybnMgYSBzaWduZWQgaW50ZWdlciBzbWFsbGVyIHRoYW4gOCBieXRlcyAoMSwgMiwgb3IgNCksIHRoZSBKSVQgY29tcGlsZXIgd2lsbCBlbWl0IGEgYG1vdnN4YCBpbnN0cnVjdGlvbiB0byBzaWduLWV4dGVuZCB0aGF0IHZhbHVlIGludG8gdGhlIGBCUEZfUkVHXzBgIHJlZ2lzdGVyLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIHRoaXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUga2Z1bmMsIGlmIGl0IHdhc24ndCBzaWduLWV4dGVuZGVkLCBtaWdodCBoYXZlIGhhZCBnYXJiYWdlIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZSByZWdpc3Rlci4gSWYgYSBCUEYgcHJvZ3JhbSBzdWJzZXF1ZW50bHkgcmVhZCB0aG9zZSBiaXRzLCB3ZSBjb3VsZCBoYXZlIGEga2VybmVsIG1lbW9yeSBsZWFrLCBvciBhdCBsZWFzdCBhIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZSB1c2FnZS4gSG93ZXZlciwgS01TQU4sIG91ciBwcmltYXJ5IHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIHNvcnRzIG9mIGlzc3VlcywgdHJhY2tzIG1lbW9yeSBhdCB0aGUgQyBsZXZlbC4gSXQgKmRvZXNuJ3QqIGluc3RydW1lbnQgdGhlIEpJVC1jb21waWxlZCBCUEYgY29kZSBpdHNlbGYsIHdoaWNoIGlzIHdoZXJlIHRoaXMgbmV3IHNpZ24gZXh0ZW5zaW9uIGlzIG9jY3VycmluZy4gS01TQU4ncyBzaGFkb3cgbWVtb3J5IHdvdWxkbid0IG5lY2Vzc2FyaWx5IHRyYWNrIHRoZSBzdGF0ZSBvZiByZWdpc3RlcnMgKndpdGhpbiogdGhlIEJQRiBKSVQgY29kZS5cblxuV2FpdCwgdGhlIHg4Ni02NCBBQkkgZm9yIEMgZnVuY3Rpb25zOiBJZiBhIGtmdW5jIHJldHVybnMgYSAzMi1iaXQgYGludGAsIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBgUkFYYCByZWdpc3RlciBhcmUgKm5vdCogZ3VhcmFudGVlZCB0byBiZSB6ZXJvZWQgb3Igc2lnbi1leHRlbmRlZCBhY2NvcmRpbmcgdG8gdGhlIEFCSSEgU28sIGlmIHRoZSBKSVQgY29tcGlsZXIgKmRpZG4ndCogZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWUsIHRoZSBCUEYgcHJvZ3JhbSBjb3VsZCBiZSBzZWVpbmcgZ2FyYmFnZS4gSG93ZXZlciwgdGhlIHBhdGNoIGlzbid0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpwZXIgc2UqLCBpdCdzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBrZnVuY3MgYXJlIGNvcnJlY3RseSBpbnRlcnByZXRlZCBieSB0aGUgQlBGIHByb2dyYW0uXG5cblNvLCBkb2VzIHRoaXMgYWN0dWFsbHkgY3JlYXRlIGEgS01TQU4tZGV0ZWN0YWJsZSBidWc/IE5vLCBpdCdzIG5vdCBsaWtlIHRoZSBwYXRjaCBpcyBhbGxvY2F0aW5nIG1lbW9yeSwgd3JpdGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgbWFraW5nIGEgbG9naWMgZXJyb3IgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHByb2JsZW0gaXMgb25lIG9mIEFCSSBjb21wbGlhbmNlLiBUaGUgSklUIGNvbXBpbGVyIHdhc24ndCBkb2luZyB0aGUgcHJvcGVyIHNpZ24gZXh0ZW5zaW9uIGFjY29yZGluZyB0byB3aGF0IHRoZSBCUEYgcHJvZ3JhbSB3b3VsZCAqZXhwZWN0KiwgaW4gdGhlIHNpZ25lZCB0eXBlIGNhc2UuIEEgbmVnYXRpdmUgdmFsdWUgYmVpbmcgcmV0dXJuZWQsIGZvciBleGFtcGxlLCBjb3VsZCBiZSByZWFkIGFzIGEgaHVnZSBwb3NpdGl2ZSBudW1iZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvcnJlY3RuZXNzIGlzc3VlLCBhIGJ1ZyBpbiB0aGUgSklULCBidXQgaXQncyAqbm90KiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gVGhlIHVwcGVyIGJpdHMgb2YgYFJBWGAgYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhcyBLTVNBTiBkZWZpbmVzIGl0LCB0aGV5IGFyZSBzaW1wbHkgcmVnaXN0ZXIgc3RhdGUuXG5cbkFsc28sIHRoZSBwYXRjaCBqdXN0IGFkZHMgYSBgbW92c3hgIGluc3RydWN0aW9uLiBUaGVyZSdzIG5vIG1lbW9yeSBhbGxvY2F0aW9uLCBubyBwYWRkaW5nLCBub3RoaW5nIHRoYXQgY291bGQgYmUgYSB2ZWN0b3IgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNlZXAgdGhyb3VnaC4gSXQncyBzb2xlbHkgYSBKSVQgY29tcGlsZXIgbW9kaWZpY2F0aW9uLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBkb24ndCBuZWVkIHRvIHJ1biBhIHNwZWNpYWwgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzIHBhdGNoLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgYnVnIHdoZXJlIHNpZ25lZCA4LSwgMTYtLCBvciAzMi1iaXQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcyB3ZXJlICpub3QqIHByb3Blcmx5IHNpZ24tZXh0ZW5kZWQgdG8gNjQtYml0IHdpdGhpbiB0aGUgQlBGIHJlZ2lzdGVyIGBCUEZfUkVHXzBgLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGJlaGF2aW9yIGluIEJQRiBwcm9ncmFtcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBvciBvdGhlciBzaWduZWQgdmFsdWVzLiBIb3dldmVyLCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5IHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgbWF0dGVyIG9mIHRoZSBKSVQgY29tcGlsZXIncyBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBQkkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiB0ZXN0IHN1aXRlcyBzaG91bGQgYmUgYWRlcXVhdGUgdG8gdmVyaWZ5IHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDksIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQxOjMwLjY3NjU1Mzg5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgdGhlIHJldHVybiB2YWx1ZXMgb2Yga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSB0aGF0IHJldHVybiBzaWduZWQgOC0sIDE2LSwgb3IgMzItYml0IGludGVnZXJzLiBQcmV2aW91c2x5LCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IEJQRiByZWdpc3RlciAoQlBGX1JFR18wKSBtaWdodCBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBzaWduLWV4dGVuZGVkLCBsZWFkaW5nIHRvIGxvZ2ljIGJ1Z3MgaW4gQlBGIHByb2dyYW1zIChlLmcuLCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBiZWluZyBldmFsdWF0ZWQgYXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVycykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsL0FCSSBjb3JyZWN0bmVzcyBpc3N1ZSBpbiB0aGUgSklUIGNvbXBpbGVyLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIEMgbGV2ZWwgYW5kIGRvZXMgbm90IGluc3RydW1lbnQgSklUZWQgQlBGIG1hY2hpbmUgY29kZSB0byBjYXRjaCByZWdpc3RlciBzdGF0ZSBpc3N1ZXMgbGlrZSB0aGlzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoaXMgSklUIGJlaGF2aW9yLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 20:46:47 +0000 UTC FinishedAt: 2026-08-23 21:41:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cf5b96d9554815780f864d6f0014ac384e9be59c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_JIT_ALWAYS_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cf5b96d9554815780f864d6f0014ac384e9be59c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_JIT_ALWAYS_ON" ], "series_id": "2436bfbf-b17a-48fa-afe5-db01ef083e8b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGhhbmRsZSBzaWduIGV4dGVuc2lvbiBmb3Iga2Z1bmMgcmV0dXJucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBKSVQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgdGhhdCBjYWxsIGtmdW5jcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3ZjZmNDk4ZjcxOGI4ZDAwNTM4MDM2ZjY5NDgxOGQxODJmYmE1N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAyMTo0MDoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE3MjYsNiAmIzQzOzE3MjYsMjMgQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcbiBcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbiYjNDM7XG4mIzQzO1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xuJiM0MztcdGlmICghZm0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIShmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRykgfHwgZm0tXHUwMDNlcmV0X3NpemUgPT0gOClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSAhPSAxIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSAyIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSA0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGVtaXRfbW92c3hfcmVnKHBwcm9nLCBmbS1cdTAwM2VyZXRfc2l6ZSAqIDgsIHRydWUsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4gXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4ge1xuQEAgLTI2NjQsNiAmIzQzOzI2ODEsMTEgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRpcCAmIzQzOz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFx1MDAyNnByb2csIGZ1bmMsIGlwKTtcbiBcdFx0XHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGZ1bmMsIGlwKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSBlbWl0X2tmdW5jX3JldHVybihicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAocHJpdl9mcmFtZV9wdHIpXG4gXHRcdFx0XHRwb3BfcjkoXHUwMDI2cHJvZyk7XG4gXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBoYW5kbGUgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxN2Y2ZjQ5OGY3MThiOGQwMDUzODAzNmY2OTQ4MThkMTgyZmJhNTdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMjE6NDA6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggMWE5ZmI1MzBhZGMzYy4uNzEzYWM3MDYxM2ZmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTcyNiw2ICYjNDM7MTcyNiwyMyBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLAogCXJldHVybiBwcm9nIC0gc3RhcnQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwomIzQzOwlmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7CiYjNDM7CWlmICghZm0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCEoZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcpIHx8IGZtLSZndDtyZXRfc2l6ZSA9PSA4KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChmbS0mZ3Q7cmV0X3NpemUgIT0gMSAmYW1wOyZhbXA7IGZtLSZndDtyZXRfc2l6ZSAhPSAyICZhbXA7JmFtcDsgZm0tJmd0O3JldF9zaXplICE9IDQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZW1pdF9tb3ZzeF9yZWcocHByb2csIGZtLSZndDtyZXRfc2l6ZSAqIDgsIHRydWUsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLAogCQkgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKQogewpAQCAtMjY2NCw2ICYjNDM7MjY4MSwxMSBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCWlwICYjNDM7PSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoJmFtcDtwcm9nLCBmdW5jLCBpcCk7CiAJCQlpZiAoZW1pdF9jYWxsKCZhbXA7cHJvZywgZnVuYywgaXApKQogCQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkgewomIzQzOwkJCQllcnIgPSBlbWl0X2tmdW5jX3JldHVybihicGZfcHJvZywgaW5zbiwgJmFtcDtwcm9nKTsKJiM0MzsJCQkJaWYgKGVycikKJiM0MzsJCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJfQogCQkJaWYgKHByaXZfZnJhbWVfcHRyKQogCQkJCXBvcF9yOSgmYW1wO3Byb2cpOwogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV3IFBhdGNoIGluIHRoZSB4ODYgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGBlbWl0X2tmdW5jX3JldHVybmAgYW5kIGFyZSBjYWxsaW5nIGl0IGZyb20gYGRvX2ppdGAgd2hlbiBgc3JjX3JlZ2AgaXMgc2V0IHRvIGBCUEZfUFNFVURPX0tGVU5DX0NBTExgLiBIbW0sIGludGVyZXN0aW5nLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyBzaWduIGV4dGVuc2lvbiBmb3Iga2Z1bmMgcmV0dXJucyBub3cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSwgYWN0dWFsbHksIGluIGhvdyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgb3BlcmF0ZXMuCgpHaXZlbiB0aGF0IGBkb19qaXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODYsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIGNvbXBpbGF0aW9uIHByb2Nlc3MgbGlrZSB0aGlzIGlzIGEgZ29vZCB0YXJnZXQuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEpJVCBpcyBlbmFibGVkLiBSaWdodCwgYENPTkZJR19CUEZfSklUYCBpcyB0aGUgYmlnIG9uZS4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGluIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgIG9yIG1heWJlIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBjb25maXJtIHRoZSBzZXR0aW5ncyBhcmUgY29ycmVjdC4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGV2ZW4gZW5hYmxlZCB0byBiZWdpbiB3aXRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIHg4NiBOZXR3b3JrIE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQgb24geDg2LCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgYnVpbGQgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIG5ldHdvcmsgZHJpdmVycywgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLCBvciBvdGhlciB4ODYtc3BlY2lmaWMgbmV0d29yayBjb2RlLiBJdCB3aWxsIHByb2JhYmx5IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBtb2R1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJlIGluIHBsYWNlLiBUaGlzIE1ha2VmaWxlIHNob3VsZCByZXZlYWwgYSBsb3QgYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29yayBzdWJzeXN0ZW0gZm9yIHg4NiBzeXN0ZW1zLiBJIGNhbiB1c2UgdGhlIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0aGlzIGZpbGUgdG8gZWl0aGVyIHVuZGVyc3RhbmQgaG93IHRoZSBtb2R1bGVzIHdvcmssIGhvdyB0byBmaXggYSBwYXJ0aWN1bGFyIHByb2JsZW0sIG9yIGJlZ2luIHdvcmtpbmcgb24gdGhlIHNvbHV0aW9uIHRvIGEgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBBcmNoLXNwZWNpZmljIG5ldHdvcmsgbW9kdWxlc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRpZmVxICgkKENPTkZJR19YODZfMzIpLHkpXG4gICA3Olx0ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDMyLm9cbiAgIDg6XHRlbHNlXG4gICA5Olx0ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG4gIDEwOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQlBGIEpJVCBDb25maWd1cmF0aW9uIC0gQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgQlBGIEpJVCBzaXR1YXRpb24gYWdhaW4uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgYENPTkZJR19CUEZfSklUYC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBzd2l0Y2gsIG9idmlvdXNseS4gQnV0IGhvbGQgb24sIEkgc2VlbSB0byByZW1lbWJlciB0aGVyZSYjMzk7cyBhbm90aGVyIG9uZSB0aGF0IHBsYXlzIGEgcm9sZS4gQWgsIHllcywgYENPTkZJR19CUEZfU1lTQ0FMTGAhIEdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgdG9vLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgdmVyaWZ5IHRoZSBgZG9faml0YCBmdW5jdGlvbiBpcyBwcmVzZW50IGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBCUEYgSklUIGNvZGUgaXMgYXZhaWxhYmxlIGluIHRoaXMgc2NlbmFyaW8uIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19qaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBlbWl0X2tmdW5jX3JldHVybihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzQ1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3NDY6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3NDctXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODQ9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDA2MS1cdFx0XHRwYWRkaW5nID0gdHJ1ZTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOlx0XHRwcm9nbGVuID0gZG9faml0KGVudiwgcHJvZywgYWRkcnMsIGltYWdlLCByd19pbWFnZSwgb2xkcHJvZ2xlbixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYzLVx0XHRcdFx0IFx1MDAyNmN0eCwgcGFkZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIERpdmUgaW50byB0aGUgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIGhlcmUgd2l0aCBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLCBvciBpZiB0aGVyZSBhcmUgb3RoZXIsIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgcGxheSBhIGNydWNpYWwgcm9sZS4gQWhhLCBJIHNlZSBgZW1pdF9rZnVuY19yZXR1cm5gIGFuZCBgZG9faml0YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBsaWtlbHkgaW50ZXJuYWwgdG8gdGhpcyBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1ha2VzIGBicGZfaW50X2ppdF9jb21waWxlYCBldmVuIG1vcmUgaW1wb3J0YW50IGFzIHRoZSBwcmltYXJ5IGV4cG9zZWQgZW50cnkuIExldCYjMzk7cyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbjsgaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk3Mj1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk4My1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTg0OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJdCBzZWVtcyBsaWtlIGEgZGVjZW50IGVudHJ5IHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoaXMuIE5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gZ2xhbmNlIGF0IGBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWxgIOKAkyB0aGF0IG5hbWUgcmluZ3MgYSBiZWxsLCBhbmQgSSB0aGluayBpdCYjMzk7cyBsaWtlbHkgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvYnBmL2NvcmUuY2Agb3IgYSByZWxhdGVkIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaGF0JiMzOTtsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc3RhcnQgdHJhY2luZyB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jPTI2MzM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2MzgtXHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjM5Olx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xua2VybmVsL2JwZi9jb3JlLmMtMjY0MC1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ5LVxua2VybmVsL2JwZi9jb3JlLmM6MjY1MDpcdHByb2cgPSBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNjUxLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjY0PXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2NzktXHQgKiBibGluZGluZyBpcyBhY3RpdmUuIEhvd2V2ZXIsIGluIGNhc2Ugb2YgZXJyb3IgZHVyaW5nXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjgwOlx0ICogYmxpbmRpbmcsIGJwZl9pbnRfaml0X2NvbXBpbGUoKSBtdXN0IGFsd2F5cyByZXR1cm4gYVxua2VybmVsL2JwZi9jb3JlLmMtMjY4MS1cdCAqIHZhbGlkIHByb2dyYW0sIHdoaWNoIGluIHRoaXMgY2FzZSB3b3VsZCBzaW1wbHkgbm90XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzIwMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RhaWxfY2FsbF9wcm90byA9IHtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE0LS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBvbmx5IHN1cHBvcnQgY0JQRi4gZUJQRiBwcm9ncmFtcyBhcmUgaW50ZXJwcmV0ZWQuXG5rZXJuZWwvYnBmL2NvcmUuYzozMjE1OiAqIEl0IGlzIGVuY291cmFnZWQgdG8gaW1wbGVtZW50IGJwZl9pbnRfaml0X2NvbXBpbGUoKSBpbnN0ZWFkLCBzbyB0aGF0XG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE2LSAqIGVCUEYgYW5kIGltcGxpY2l0bHkgYWxzbyBjQlBGIGNhbiBnZXQgSklUZWQhXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE3LSAqL1xua2VybmVsL2JwZi9jb3JlLmM6MzIxODpzdHJ1Y3QgYnBmX3Byb2cgKiBfX3dlYWsgYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjE5LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjIzLS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBzdXBwb3J0IGVCUEYuIEFsbCBjQlBGIGNvZGUgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvXG5rZXJuZWwvYnBmL2NvcmUuYzozMjI0OiAqIGVCUEYgYnkgdGhlIGtlcm5lbCBhbmQgaXMgbGF0ZXIgY29tcGlsZWQgYnkgYnBmX2ludF9qaXRfY29tcGlsZSgpLlxua2VybmVsL2JwZi9jb3JlLmMtMzIyNS0gKi9cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEwNjY9c3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyMDItXHRcdFx0ZnVuY1tpXS1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2JvdW5kYXJ5ID0gZW52LVx1MDAzZXNlZW5fZXhjZXB0aW9uO1xua2VybmVsL2JwZi9maXh1cHMuYzoxMjAzOlx0XHRmdW5jW2ldID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIGZ1bmNbaV0pO1xua2VybmVsL2JwZi9maXh1cHMuYy0xMjA0LVx0XHRpZiAoIWZ1bmNbaV0tXHUwMDNlaml0ZWQpIHtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyNDYtXHRcdG9sZF9icGZfZnVuYyA9IGZ1bmNbaV0tXHUwMDNlYnBmX2Z1bmM7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEyNDc6XHRcdHRtcCA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBmdW5jW2ldKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTI0OC1cdFx0aWYgKHRtcCAhPSBmdW5jW2ldIHx8IGZ1bmNbaV0tXHUwMDNlYnBmX2Z1bmMgIT0gb2xkX2JwZl9mdW5jKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNydWNpYWwgZnVuY3Rpb25zIGludm9sdmVkIGJlc2lkZXMgdGhpcyBvbmUuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBgZW1pdF9rZnVuY19yZXR1cm5gIGFuZCBtb2RpZmllcyBgZG9faml0YCB0byBjYWxsIGl0IHVuZGVyIHRoZSBjb25kaXRpb24gYHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMYC4gVGhpcyBpcyBvYnZpb3VzbHkgcmVsYXRlZCB0byBCUEYga2Z1bmNzLiBNYWtlcyBzZW5zZS4gSSBzaG91bGQgY2hlY2sgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciB0aGlzLgoKYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JQRl9KSVRgIGFuZCBvZiBjb3Vyc2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgZW5hYmxlZCBhcyBleHBlY3RlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgoKSG1tLCBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgaGVyZT8gYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgY291bGQgYmUgYSBoZWxwZnVsIG9uZSB0byBmb3JjZSB0aGUgSklUIHRvIGJlIHVzZWQsIGVuc3VyaW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgZXhlcmNpc2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB4ODYgYEtjb25maWdgIGZpbGUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkaXJlY3RvcnkgZm9yIHRoZSBCUEYgY29uZmlncyB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIHdvdWxkIGJlIHRoZSBLY29uZmlnIGZpbGVzLCByaWdodD8gVGhleSYjMzk7cmUgdGhlIGJhY2tib25lIG9mIGhvdyBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQuIEdpdmVuIEJQRiYjMzk7cyBzdHJvbmcgbmV0d29ya2luZyB0aWVzLCBlaXRoZXIgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgb3IgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gdG8gZmluZCB0aGUgb3B0aW9ucyBJJiMzOTttIGFmdGVyLiBJJiMzOTtsbCBjaGVjayB0aG9zZSBmaXJzdC4gVGhleSBzaG91bGQgY29udGFpbiB0aGUgcmVsZXZhbnQgYGNvbmZpZ2AgZW50cmllcywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIEJQRiB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGtub2JzIGFuZCBsZXZlcnMgdGhhdCBjb250cm9sIEJQRiYjMzk7cyBiZWhhdmlvdXIuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG5ldyBvciBjaGFuZ2VkIG9wdGlvbnMgc2luY2UgSSBsYXN0IGxvb2tlZC4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgaXMgaW50ZWdyYXRlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBidWlsZGluZyBvciBjb25maWd1cmluZyBhIGtlcm5lbCB3aXRoIEJQRiBjYXBhYmlsaXRpZXMuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCBmb3Igc2V0dGluZyB1cCBteSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgZGV0ZXJtaW5pbmcgdGhlIGJlc3Qgc3RyYXRlZ3kgZm9yIG15IHdvcmsuIFNvLCBga2VybmVsL2JwZi9LY29uZmlnYCwgaGVyZSB3ZSBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWctMy0jIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXG5rZXJuZWwvYnBmL0tjb25maWc6NDpjb25maWcgQlBGXG5rZXJuZWwvYnBmL0tjb25maWctNS1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxua2VybmVsL2JwZi9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwOAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEpJVCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIEpJVCBjb2RlLCBzcGVjaWZpY2FsbHkgb24geDg2LCB0byBzZWUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdHMgYXJlIGZvciBmdXp6aW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9KSVRfQUxXQVlTX09OYC4gRGVmaW5pdGVseSB3YW50IHRvIGtlZXAgYW4gZXllIG9uIHRob3NlLgoKRmlyc3QgdGhpbmcgdGhhdCBqdW1wZWQgb3V0IHdhcyB0aGlzIGBlbWl0X2tmdW5jX3JldHVybmAgZnVuY3Rpb24gaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRvX2ppdGAgd2hlbiBgc3JjX3JlZ2AgaXMgYEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTGAuIFRoaXMgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgYW5kIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzLCBob3dldmVyLCBpcyB0aGUgc3ltYm9sIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYEJQRl9KSVRgIGFsb25lICpkb2VzKiBlbmFibGUgdGhlIEpJVCBjb21waWxlciwgd2hpY2ggaXMgZ29vZC4gYEJQRl9TWVNDQUxMYCBpcywgb2YgY291cnNlLCBlc3NlbnRpYWwgZm9yIGxvYWRpbmcgdGhlIEJQRiBwcm9ncmFtcyB0byBiZWdpbiB3aXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aG9zZSBlbmFibGVkLgoKSSBjaGVja2VkIGlmIEkgc2hvdWxkIGluY2x1ZGUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRvX2ppdGAsIGJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgbGlrZSB0aGUgcmVhbCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgc29saWQuIEl0JiMzOTtzIHRoZSBtYWluIGZ1bmN0aW9uIEkgbmVlZCB0byBiZSBmdXp6aW5nLgoKSSYjMzk7bSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgdGhlIHJlc3VsdHMsIGZvY3VzaW5nIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgcHJpbWFyeSBzeW1ib2w6IGBicGZfaW50X2ppdF9jb21waWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBoYW5kbGUgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0pJVF9BTFdBWVNfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBoYW5kbGUgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDIxOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTdmNmY0OThmNzE4YjhkMDA1MzgwMzZmNjk0ODE4ZDE4MmZiYTU3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDIxOjQwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTE3MjYsNiAmIzQzOzE3MjYsMjMgQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywKIAlyZXR1cm4gcHJvZyAtIHN0YXJ0OwogfQogCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX3JldHVybihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pOwomIzQzOwlpZiAoIWZtKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghKGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHKSB8fCBmbS0mZ3Q7cmV0X3NpemUgPT0gOCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoZm0tJmd0O3JldF9zaXplICE9IDEgJmFtcDsmYW1wOyBmbS0mZ3Q7cmV0X3NpemUgIT0gMiAmYW1wOyZhbXA7IGZtLSZndDtyZXRfc2l6ZSAhPSA0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVtaXRfbW92c3hfcmVnKHBwcm9nLCBmbS0mZ3Q7cmV0X3NpemUgKiA4LCB0cnVlLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSwKIAkJICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZykKIHsKQEAgLTI2NjQsNiAmIzQzOzI2ODEsMTEgQEAgc3Q6CQkJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7CiAJCQlpcCAmIzQzOz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKCZhbXA7cHJvZywgZnVuYywgaXApOwogCQkJaWYgKGVtaXRfY2FsbCgmYW1wO3Byb2csIGZ1bmMsIGlwKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQkJZXJyID0gZW1pdF9rZnVuY19yZXR1cm4oYnBmX3Byb2csIGluc24sICZhbXA7cHJvZyk7CiYjNDM7CQkJCWlmIChlcnIpCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCX0KIAkJCWlmIChwcml2X2ZyYW1lX3B0cikKIAkJCQlwb3BfcjkoJmFtcDtwcm9nKTsKIAkJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwOQoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBTaWduIEV4dGVuc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0JiMzOTtzIGFkZGluZyBgZW1pdF9rZnVuY19yZXR1cm5gLCBhbmQgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgc2lnbi1leHRlbmRpbmcgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgY2FsbGVkIHZpYSBgQlBGX1BTRVVET19LRlVOQ19DQUxMYC4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgaWYgYSBrZnVuYyByZXR1cm5zIGEgc2lnbmVkIGludGVnZXIgc21hbGxlciB0aGFuIDggYnl0ZXMgKDEsIDIsIG9yIDQpLCB0aGUgSklUIGNvbXBpbGVyIHdpbGwgZW1pdCBhIGBtb3ZzeGAgaW5zdHJ1Y3Rpb24gdG8gc2lnbi1leHRlbmQgdGhhdCB2YWx1ZSBpbnRvIHRoZSBgQlBGX1JFR18wYCByZWdpc3Rlci4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgdGhpcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBrZnVuYywgaWYgaXQgd2FzbiYjMzk7dCBzaWduLWV4dGVuZGVkLCBtaWdodCBoYXZlIGhhZCBnYXJiYWdlIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZSByZWdpc3Rlci4gSWYgYSBCUEYgcHJvZ3JhbSBzdWJzZXF1ZW50bHkgcmVhZCB0aG9zZSBiaXRzLCB3ZSBjb3VsZCBoYXZlIGEga2VybmVsIG1lbW9yeSBsZWFrLCBvciBhdCBsZWFzdCBhIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZSB1c2FnZS4gSG93ZXZlciwgS01TQU4sIG91ciBwcmltYXJ5IHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIHNvcnRzIG9mIGlzc3VlcywgdHJhY2tzIG1lbW9yeSBhdCB0aGUgQyBsZXZlbC4gSXQgKmRvZXNuJiMzOTt0KiBpbnN0cnVtZW50IHRoZSBKSVQtY29tcGlsZWQgQlBGIGNvZGUgaXRzZWxmLCB3aGljaCBpcyB3aGVyZSB0aGlzIG5ldyBzaWduIGV4dGVuc2lvbiBpcyBvY2N1cnJpbmcuIEtNU0FOJiMzOTtzIHNoYWRvdyBtZW1vcnkgd291bGRuJiMzOTt0IG5lY2Vzc2FyaWx5IHRyYWNrIHRoZSBzdGF0ZSBvZiByZWdpc3RlcnMgKndpdGhpbiogdGhlIEJQRiBKSVQgY29kZS4KCldhaXQsIHRoZSB4ODYtNjQgQUJJIGZvciBDIGZ1bmN0aW9uczogSWYgYSBrZnVuYyByZXR1cm5zIGEgMzItYml0IGBpbnRgLCB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgYFJBWGAgcmVnaXN0ZXIgYXJlICpub3QqIGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIG9yIHNpZ24tZXh0ZW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBBQkkhIFNvLCBpZiB0aGUgSklUIGNvbXBpbGVyICpkaWRuJiMzOTt0KiBleHRlbmQgdGhlIHJldHVybiB2YWx1ZSwgdGhlIEJQRiBwcm9ncmFtIGNvdWxkIGJlIHNlZWluZyBnYXJiYWdlLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpwZXIgc2UqLCBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZSB2YWx1ZXMgZnJvbSB0aGUga2Z1bmNzIGFyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtLgoKU28sIGRvZXMgdGhpcyBhY3R1YWxseSBjcmVhdGUgYSBLTVNBTi1kZXRlY3RhYmxlIGJ1Zz8gTm8sIGl0JiMzOTtzIG5vdCBsaWtlIHRoZSBwYXRjaCBpcyBhbGxvY2F0aW5nIG1lbW9yeSwgd3JpdGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgbWFraW5nIGEgbG9naWMgZXJyb3IgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHByb2JsZW0gaXMgb25lIG9mIEFCSSBjb21wbGlhbmNlLiBUaGUgSklUIGNvbXBpbGVyIHdhc24mIzM5O3QgZG9pbmcgdGhlIHByb3BlciBzaWduIGV4dGVuc2lvbiBhY2NvcmRpbmcgdG8gd2hhdCB0aGUgQlBGIHByb2dyYW0gd291bGQgKmV4cGVjdCosIGluIHRoZSBzaWduZWQgdHlwZSBjYXNlLiBBIG5lZ2F0aXZlIHZhbHVlIGJlaW5nIHJldHVybmVkLCBmb3IgZXhhbXBsZSwgY291bGQgYmUgcmVhZCBhcyBhIGh1Z2UgcG9zaXRpdmUgbnVtYmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb3JyZWN0bmVzcyBpc3N1ZSwgYSBidWcgaW4gdGhlIEpJVCwgYnV0IGl0JiMzOTtzICpub3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgdXBwZXIgYml0cyBvZiBgUkFYYCBhcmUgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFzIEtNU0FOIGRlZmluZXMgaXQsIHRoZXkgYXJlIHNpbXBseSByZWdpc3RlciBzdGF0ZS4KCkFsc28sIHRoZSBwYXRjaCBqdXN0IGFkZHMgYSBgbW92c3hgIGluc3RydWN0aW9uLiBUaGVyZSYjMzk7cyBubyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gcGFkZGluZywgbm90aGluZyB0aGF0IGNvdWxkIGJlIGEgdmVjdG9yIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBzZWVwIHRocm91Z2guIEl0JiMzOTtzIHNvbGVseSBhIEpJVCBjb21waWxlciBtb2RpZmljYXRpb24uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBkb24mIzM5O3QgbmVlZCB0byBydW4gYSBzcGVjaWFsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcyBwYXRjaC4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBidWcgd2hlcmUgc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzIHdlcmUgKm5vdCogcHJvcGVybHkgc2lnbi1leHRlbmRlZCB0byA2NC1iaXQgd2l0aGluIHRoZSBCUEYgcmVnaXN0ZXIgYEJQRl9SRUdfMGAuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gQlBGIHByb2dyYW1zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lZ2F0aXZlIGVycm9yIGNvZGVzIG9yIG90aGVyIHNpZ25lZCB2YWx1ZXMuIEhvd2V2ZXIsIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5IHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgbWF0dGVyIG9mIHRoZSBKSVQgY29tcGlsZXImIzM5O3MgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQUJJLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgdGhlIHJldHVybiB2YWx1ZXMgb2Yga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSB0aGF0IHJldHVybiBzaWduZWQgOC0sIDE2LSwgb3IgMzItYml0IGludGVnZXJzLiBQcmV2aW91c2x5LCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IEJQRiByZWdpc3RlciAoQlBGX1JFR18wKSBtaWdodCBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBzaWduLWV4dGVuZGVkLCBsZWFkaW5nIHRvIGxvZ2ljIGJ1Z3MgaW4gQlBGIHByb2dyYW1zIChlLmcuLCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBiZWluZyBldmFsdWF0ZWQgYXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVycykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsL0FCSSBjb3JyZWN0bmVzcyBpc3N1ZSBpbiB0aGUgSklUIGNvbXBpbGVyLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIEMgbGV2ZWwgYW5kIGRvZXMgbm90IGluc3RydW1lbnQgSklUZWQgQlBGIG1hY2hpbmUgY29kZSB0byBjYXRjaCByZWdpc3RlciBzdGF0ZSBpc3N1ZXMgbGlrZSB0aGlzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoaXMgSklUIGJlaGF2aW9yLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6MzEuNTI4NjQ1NTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDc5MzY5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9KSVRfQUxXQVlTX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDozMS41Mjg2NTA3ODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc1OTQ2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2Y2ZjQ5OGY3MThiOGQwMDUzODAzNmY2OTQ4MThkMTgyZmJhNTdkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIzIDIxOjQwOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTE3MjYsNiArMTcyNiwyMyBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxcbiBcXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XFxuK1xcbitcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XFxuK1xcdGlmICghZm0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIShmbS1cXHUwMDNlcmV0X2ZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHKSB8fCBmbS1cXHUwMDNlcmV0X3NpemUgPT0gOClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChmbS1cXHUwMDNlcmV0X3NpemUgIT0gMSBcXHUwMDI2XFx1MDAyNiBmbS1cXHUwMDNlcmV0X3NpemUgIT0gMiBcXHUwMDI2XFx1MDAyNiBmbS1cXHUwMDNlcmV0X3NpemUgIT0gNClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRlbWl0X21vdnN4X3JlZyhwcHJvZywgZm0tXFx1MDAzZXJldF9zaXplICogOCwgdHJ1ZSwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbiBcXHRcXHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxcbiB7XFxuQEAgLTI2NjQsNiArMjY4MSwxMSBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0aXAgKz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFxcdTAwMjZwcm9nLCBmdW5jLCBpcCk7XFxuIFxcdFxcdFxcdGlmIChlbWl0X2NhbGwoXFx1MDAyNnByb2csIGZ1bmMsIGlwKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2tmdW5jX3JldHVybihicGZfcHJvZywgaW5zbiwgXFx1MDAyNnByb2cpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChwcml2X2ZyYW1lX3B0cilcXG4gXFx0XFx0XFx0XFx0cG9wX3I5KFxcdTAwMjZwcm9nKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjMyLjkwNjg2Njk4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5NDY1MTUxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfSklUX0FMV0FZU19PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxN2Y2ZjQ5OGY3MThiOGQwMDUzODAzNmY2OTQ4MThkMTgyZmJhNTdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMjE6NDA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDFhOWZiNTMwYWRjM2MuLjcxM2FjNzA2MTNmZjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE3MjYsNiArMTcyNiwyMyBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuIFx0cmV0dXJuIHByb2cgLSBzdGFydDtcbiB9XG4gXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX3JldHVybihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4rXG4rXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4rXHRpZiAoIWZtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghKGZtLVx1MDAzZXJldF9mbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHKSB8fCBmbS1cdTAwM2VyZXRfc2l6ZSA9PSA4KVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSAhPSAxIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSAyIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSAhPSA0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGVtaXRfbW92c3hfcmVnKHBwcm9nLCBmbS1cdTAwM2VyZXRfc2l6ZSAqIDgsIHRydWUsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4gXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4ge1xuQEAgLTI2NjQsNiArMjY4MSwxMSBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdGlwICs9IHg4Nl9jYWxsX2RlcHRoX2VtaXRfYWNjb3VudGluZyhcdTAwMjZwcm9nLCBmdW5jLCBpcCk7XG4gXHRcdFx0aWYgKGVtaXRfY2FsbChcdTAwMjZwcm9nLCBmdW5jLCBpcCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfcmV0dXJuKGJwZl9wcm9nLCBpbnNuLCBcdTAwMjZwcm9nKTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0fVxuIFx0XHRcdGlmIChwcml2X2ZyYW1lX3B0cilcbiBcdFx0XHRcdHBvcF9yOShcdTAwMjZwcm9nKTtcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjMyLjkwNjg2ODQ2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzcwMzE1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV3IFBhdGNoIGluIHRoZSB4ODYgQlBGIEpJVCBDb21waWxlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgbmV3IHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYGVtaXRfa2Z1bmNfcmV0dXJuYCBhbmQgYXJlIGNhbGxpbmcgaXQgZnJvbSBgZG9faml0YCB3aGVuIGBzcmNfcmVnYCBpcyBzZXQgdG8gYEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTGAuIEhtbSwgaW50ZXJlc3RpbmcuIFNlZW1zIGxpa2Ugd2UncmUgaGFuZGxpbmcgc2lnbiBleHRlbnNpb24gZm9yIGtmdW5jIHJldHVybnMgbm93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIGFjdHVhbGx5LCBpbiBob3cgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIG9wZXJhdGVzLlxuXG5HaXZlbiB0aGF0IGBkb19qaXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODYsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIGNvbXBpbGF0aW9uIHByb2Nlc3MgbGlrZSB0aGlzIGlzIGEgZ29vZCB0YXJnZXQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgSklUIGlzIGVuYWJsZWQuIFJpZ2h0LCBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBiaWcgb25lLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgb3IgbWF5YmUgYGFyY2gveDg2L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHNldHRpbmdzIGFyZSBjb3JyZWN0LiBHb3R0YSBtYWtlIHN1cmUgaXQncyBldmVuIGVuYWJsZWQgdG8gYmVnaW4gd2l0aCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjM3LjQ0MzkwMjc5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg1NjI3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDozNy41MDQ3NjU1MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkzMDk0MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gdGhlIHg4NiBOZXR3b3JrIE1ha2VmaWxlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gVGhlIHRhc2sgYXQgaGFuZCBsaWtlbHkgaW52b2x2ZXMgc29tZXRoaW5nIG5ldHdvcmstcmVsYXRlZCBvbiB4ODYsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzLCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMsIG9yIG90aGVyIHg4Ni1zcGVjaWZpYyBuZXR3b3JrIGNvZGUuIEl0IHdpbGwgcHJvYmFibHkgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHNwZWNpZmljIG1vZHVsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSB4ODYgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgaW4gcGxhY2UuIFRoaXMgTWFrZWZpbGUgc2hvdWxkIHJldmVhbCBhIGxvdCBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgc3RydWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN1YnN5c3RlbSBmb3IgeDg2IHN5c3RlbXMuIEkgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoaXMgZmlsZSB0byBlaXRoZXIgdW5kZXJzdGFuZCBob3cgdGhlIG1vZHVsZXMgd29yaywgaG93IHRvIGZpeCBhIHBhcnRpY3VsYXIgcHJvYmxlbSwgb3IgYmVnaW4gd29ya2luZyBvbiB0aGUgc29sdXRpb24gdG8gYSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NDAuODk3ODYyMjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEFyY2gtc3BlY2lmaWMgbmV0d29yayBtb2R1bGVzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSlcXG4gICA3OlxcdCAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDMyLm9cXG4gICA4OlxcdGVsc2VcXG4gICA5OlxcdCAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuICAxMDpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo0MC44OTc5MTQyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDQ2NDEwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkJQRiBKSVQgQ29uZmlndXJhdGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBCUEYgSklUIHNpdHVhdGlvbiBhZ2Fpbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyBgQ09ORklHX0JQRl9KSVRgLiBUaGF0J3MgdGhlIHByaW1hcnkgc3dpdGNoLCBvYnZpb3VzbHkuIEJ1dCBob2xkIG9uLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhlcmUncyBhbm90aGVyIG9uZSB0aGF0IHBsYXlzIGEgcm9sZS4gQWgsIHllcywgYENPTkZJR19CUEZfU1lTQ0FMTGAhIEdvdHRhIG1ha2Ugc3VyZSB0aGF0J3MgZW5hYmxlZCB0b28uIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHZlcmlmeSB0aGUgYGRvX2ppdGAgZnVuY3Rpb24gaXMgcHJlc2VudCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgQlBGIEpJVCBjb2RlIGlzIGF2YWlsYWJsZSBpbiB0aGlzIHNjZW5hcmlvLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjQzLjkwMjU1NzcwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyMjc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19qaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZW1pdF9rZnVuY19yZXR1cm4oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzQ1LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzQ2OnN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTc0Ny1cXHRcXHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODQ9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYxLVxcdFxcdFxcdHBhZGRpbmcgPSB0cnVlO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOlxcdFxcdHByb2dsZW4gPSBkb19qaXQoZW52LCBwcm9nLCBhZGRycywgaW1hZ2UsIHJ3X2ltYWdlLCBvbGRwcm9nbGVuLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYzLVxcdFxcdFxcdFxcdCBcXHUwMDI2Y3R4LCBwYWRkaW5nKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NDMuOTQ2OTgzNjYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MTc4MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIERpdmUgaW50byB0aGUgQlBGIEpJVCBDb21waWxlcioqXG5cbk9rYXksIHNvIEknbSBzdGFydGluZyBoZXJlIHdpdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcywgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24sIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBwbGF5IGEgY3J1Y2lhbCByb2xlLiBBaGEsIEkgc2VlIGBlbWl0X2tmdW5jX3JldHVybmAgYW5kIGBkb19qaXRgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHNvIHRoZXkncmUgbGlrZWx5IGludGVybmFsIHRvIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtYWtlcyBgYnBmX2ludF9qaXRfY29tcGlsZWAgZXZlbiBtb3JlIGltcG9ydGFudCBhcyB0aGUgcHJpbWFyeSBleHBvc2VkIGVudHJ5LiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uOyBpdCdzIHByb2JhYmx5IGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NDcuNzg4NzY2NjMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc4MDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk3Mj1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTgzLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTg0OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5ODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo0Ny44MzU1NTM0OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NTEzMjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEl0IHNlZW1zIGxpa2UgYSBkZWNlbnQgZW50cnkgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgdGhpcy4gTm93LCBhcmUgdGhlcmUgYW55ICpvdGhlciogZW50cnkgcG9pbnRzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBnbGFuY2UgYXQgYGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbGAg4oCTIHRoYXQgbmFtZSByaW5ncyBhIGJlbGwsIGFuZCBJIHRoaW5rIGl0J3MgbGlrZWx5IHJlc2lkaW5nIHdpdGhpbiBga2VybmVsL2JwZi9jb3JlLmNgIG9yIGEgcmVsYXRlZCBmaWxlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaGF0J2xsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBmcmFtZXdvcmsuIExldCdzIHN0YXJ0IHRyYWNpbmcgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo1MS4yMzA2ODg0NjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njc5Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM4LVxcdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjM5OlxcdFxcdHJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XFxua2VybmVsL2JwZi9jb3JlLmMtMjY0MC1cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NDktXFxua2VybmVsL2JwZi9jb3JlLmM6MjY1MDpcXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NTEtXFx0aWYgKHByb2ctXFx1MDAzZWppdGVkKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjY0PXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjY3OS1cXHQgKiBibGluZGluZyBpcyBhY3RpdmUuIEhvd2V2ZXIsIGluIGNhc2Ugb2YgZXJyb3IgZHVyaW5nXFxua2VybmVsL2JwZi9jb3JlLmM6MjY4MDpcXHQgKiBibGluZGluZywgYnBmX2ludF9qaXRfY29tcGlsZSgpIG11c3QgYWx3YXlzIHJldHVybiBhXFxua2VybmVsL2JwZi9jb3JlLmMtMjY4MS1cXHQgKiB2YWxpZCBwcm9ncmFtLCB3aGljaCBpbiB0aGlzIGNhc2Ugd291bGQgc2ltcGx5IG5vdFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzIwMj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RhaWxfY2FsbF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMTQtLyogU3R1YiBmb3IgSklUcyB0aGF0IG9ubHkgc3VwcG9ydCBjQlBGLiBlQlBGIHByb2dyYW1zIGFyZSBpbnRlcnByZXRlZC5cXG5rZXJuZWwvYnBmL2NvcmUuYzozMjE1OiAqIEl0IGlzIGVuY291cmFnZWQgdG8gaW1wbGVtZW50IGJwZl9pbnRfaml0X2NvbXBpbGUoKSBpbnN0ZWFkLCBzbyB0aGF0XFxua2VybmVsL2JwZi9jb3JlLmMtMzIxNi0gKiBlQlBGIGFuZCBpbXBsaWNpdGx5IGFsc28gY0JQRiBjYW4gZ2V0IEpJVGVkIVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMTctICovXFxua2VybmVsL2JwZi9jb3JlLmM6MzIxODpzdHJ1Y3QgYnBmX3Byb2cgKiBfX3dlYWsgYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9jb3JlLmMtMzIxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjIzLS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBzdXBwb3J0IGVCUEYuIEFsbCBjQlBGIGNvZGUgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvXFxua2VybmVsL2JwZi9jb3JlLmM6MzIyNDogKiBlQlBGIGJ5IHRoZSBrZXJuZWwgYW5kIGlzIGxhdGVyIGNvbXBpbGVkIGJ5IGJwZl9pbnRfaml0X2NvbXBpbGUoKS5cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjI1LSAqL1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMDY2PXN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyMDItXFx0XFx0XFx0ZnVuY1tpXS1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fYm91bmRhcnkgPSBlbnYtXFx1MDAzZXNlZW5fZXhjZXB0aW9uO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTIwMzpcXHRcXHRmdW5jW2ldID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIGZ1bmNbaV0pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTIwNC1cXHRcXHRpZiAoIWZ1bmNbaV0tXFx1MDAzZWppdGVkKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyNDYtXFx0XFx0b2xkX2JwZl9mdW5jID0gZnVuY1tpXS1cXHUwMDNlYnBmX2Z1bmM7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxMjQ3OlxcdFxcdHRtcCA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBmdW5jW2ldKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyNDgtXFx0XFx0aWYgKHRtcCAhPSBmdW5jW2ldIHx8IGZ1bmNbaV0tXFx1MDAzZWJwZl9mdW5jICE9IG9sZF9icGZfZnVuYykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo1MS4yNzYzNzAyMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk0MzczNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBmdW5jdGlvbnMgaW52b2x2ZWQgYmVzaWRlcyB0aGlzIG9uZS5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYGVtaXRfa2Z1bmNfcmV0dXJuYCBhbmQgbW9kaWZpZXMgYGRvX2ppdGAgdG8gY2FsbCBpdCB1bmRlciB0aGUgY29uZGl0aW9uIGBzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTGAuIFRoaXMgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gQlBGIGtmdW5jcy4gTWFrZXMgc2Vuc2UuIEkgc2hvdWxkIGNoZWNrIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBmb3IgdGhpcy5cblxuYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgYENPTkZJR19CUEZfSklUYCBhbmQgb2YgY291cnNlIGBDT05GSUdfQlBGX1NZU0NBTExgIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGVuYWJsZWQgYXMgZXhwZWN0ZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuSG1tLCBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgaGVyZT8gYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgY291bGQgYmUgYSBoZWxwZnVsIG9uZSB0byBmb3JjZSB0aGUgSklUIHRvIGJlIHVzZWQsIGVuc3VyaW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgZXhlcmNpc2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHg4NiBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRpcmVjdG9yeSBmb3IgdGhlIEJQRiBjb25maWdzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NTYuMDcwNzQ2MjQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE5NTIwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MDo1Ni4xMTY5NDkxMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NTMyMjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyB3b3VsZCBiZSB0aGUgS2NvbmZpZyBmaWxlcywgcmlnaHQ/IFRoZXkncmUgdGhlIGJhY2tib25lIG9mIGhvdyBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQuIEdpdmVuIEJQRidzIHN0cm9uZyBuZXR3b3JraW5nIHRpZXMsIGVpdGhlciB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBvciB0aGUgYG5ldC9LY29uZmlnYCBmaWxlIHNlZW1zIHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbiB0byBmaW5kIHRoZSBvcHRpb25zIEknbSBhZnRlci4gSSdsbCBjaGVjayB0aG9zZSBmaXJzdC4gVGhleSBzaG91bGQgY29udGFpbiB0aGUgcmVsZXZhbnQgYGNvbmZpZ2AgZW50cmllcywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDA6NTkuODcyMjczODUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMwNzMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQwOjU5LjkxNTU4Njg3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA5ODM0NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIExldCdzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBCUEYgd2l0aGluIHRoZSBrZXJuZWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGtub2JzIGFuZCBsZXZlcnMgdGhhdCBjb250cm9sIEJQRidzIGJlaGF2aW91ci4gSSB3YW50IHRvIHNlZSB3aGF0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGF0IHJlcXVpcmVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBvcHRpb25zIHNpbmNlIEkgbGFzdCBsb29rZWQuIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdW5kZXJzdGFuZGluZyBob3cgQlBGIGlzIGludGVncmF0ZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYnVpbGRpbmcgb3IgY29uZmlndXJpbmcgYSBrZXJuZWwgd2l0aCBCUEYgY2FwYWJpbGl0aWVzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIHNldHRpbmcgdXAgbXkgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgYW5kIGRldGVybWluaW5nIHRoZSBiZXN0IHN0cmF0ZWd5IGZvciBteSB3b3JrLiBTbywgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGhlcmUgd2UgZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MTowMy4yMjU0MjM5NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODIxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZy0zLSMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cXG5rZXJuZWwvYnBmL0tjb25maWc6NDpjb25maWcgQlBGXFxua2VybmVsL2JwZi9LY29uZmlnLTUtXFx0Ym9vbFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cXG5rZXJuZWwvYnBmL0tjb25maWc6NzM6Y29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXFx0Ym9vbCBcXFwiRGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctOTEtXFxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXFxua2VybmVsL2JwZi9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MDMuMjcwMjU0MDM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjc0NDMxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBKSVQgY29kZSwgc3BlY2lmaWNhbGx5IG9uIHg4NiwgdG8gc2VlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZSBmb3IgZnV6emluZy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9KSVRfQUxXQVlTX09OYC4gRGVmaW5pdGVseSB3YW50IHRvIGtlZXAgYW4gZXllIG9uIHRob3NlLlxuXG5GaXJzdCB0aGluZyB0aGF0IGp1bXBlZCBvdXQgd2FzIHRoaXMgYGVtaXRfa2Z1bmNfcmV0dXJuYCBmdW5jdGlvbiBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBkb19qaXRgIHdoZW4gYHNyY19yZWdgIGlzIGBCUEZfUFNFVURPX0tGVU5DX0NBTExgLiBUaGlzIHNlZW1zIGxpa2UgYSBrZXkgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIGFuZCBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzLCBob3dldmVyLCBpcyB0aGUgc3ltYm9sIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgQlBGX0pJVGAgYWxvbmUgKmRvZXMqIGVuYWJsZSB0aGUgSklUIGNvbXBpbGVyLCB3aGljaCBpcyBnb29kLiBgQlBGX1NZU0NBTExgIGlzLCBvZiBjb3Vyc2UsIGVzc2VudGlhbCBmb3IgbG9hZGluZyB0aGUgQlBGIHByb2dyYW1zIHRvIGJlZ2luIHdpdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRob3NlIGVuYWJsZWQuXG5cbkkgY2hlY2tlZCBpZiBJIHNob3VsZCBpbmNsdWRlIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkb19qaXRgLCBidXQgc2luY2UgaXQncyBzdGF0aWMsIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgbGlrZSB0aGUgcmVhbCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgc29saWQuIEl0J3MgdGhlIG1haW4gZnVuY3Rpb24gSSBuZWVkIHRvIGJlIGZ1enppbmcuXG5cbkknbSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgdGhlIHJlc3VsdHMsIGZvY3VzaW5nIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgcHJpbWFyeSBzeW1ib2w6IGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwOCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MTIuMjk3NzAwMzkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzMTU0NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfSklUX0FMV0FZU19PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfSklUX0FMV0FZU19PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gaGFuZGxlIHNpZ24gZXh0ZW5zaW9uIGZvciBrZnVuYyByZXR1cm5zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QyMTo0MToxMi4zNzIwMjEzNDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzA0NTUyNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MTIuMzcyNDE5MjQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MzA0MTUxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgdGhlIHJldHVybiB2YWx1ZXMgb2Yga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSB0aGF0IHJldHVybiBzaWduZWQgOC0sIDE2LSwgb3IgMzItYml0IGludGVnZXJzLiBQcmV2aW91c2x5LCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IEJQRiByZWdpc3RlciAoQlBGX1JFR18wKSBtaWdodCBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBzaWduLWV4dGVuZGVkLCBsZWFkaW5nIHRvIGxvZ2ljIGJ1Z3MgaW4gQlBGIHByb2dyYW1zIChlLmcuLCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBiZWluZyBldmFsdWF0ZWQgYXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVycykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsL0FCSSBjb3JyZWN0bmVzcyBpc3N1ZSBpbiB0aGUgSklUIGNvbXBpbGVyLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIEMgbGV2ZWwgYW5kIGRvZXMgbm90IGluc3RydW1lbnQgSklUZWQgQlBGIG1hY2hpbmUgY29kZSB0byBjYXRjaCByZWdpc3RlciBzdGF0ZSBpc3N1ZXMgbGlrZSB0aGlzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoaXMgSklUIGJlaGF2aW9yLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ZjZmNDk4ZjcxOGI4ZDAwNTM4MDM2ZjY5NDgxOGQxODJmYmE1N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAyMTo0MDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMWE5ZmI1MzBhZGMzYy4uNzEzYWM3MDYxM2ZmNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTcyNiw2ICsxNzI2LDIzIEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4gXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xuIH1cbiBcbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfcmV0dXJuKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbitcbitcdGZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGJwZl9wcm9nLCBpbnNuKTtcbitcdGlmICghZm0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCEoZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcpIHx8IGZtLVx1MDAzZXJldF9zaXplID09IDgpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKGZtLVx1MDAzZXJldF9zaXplICE9IDEgXHUwMDI2XHUwMDI2IGZtLVx1MDAzZXJldF9zaXplICE9IDIgXHUwMDI2XHUwMDI2IGZtLVx1MDAzZXJldF9zaXplICE9IDQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZW1pdF9tb3ZzeF9yZWcocHByb2csIGZtLVx1MDAzZXJldF9zaXplICogOCwgdHJ1ZSwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjY2NCw2ICsyNjgxLDExIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0aXAgKz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFx1MDAyNnByb2csIGZ1bmMsIGlwKTtcbiBcdFx0XHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGZ1bmMsIGlwKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuK1x0XHRcdFx0ZXJyID0gZW1pdF9rZnVuY19yZXR1cm4oYnBmX3Byb2csIGluc24sIFx1MDAyNnByb2cpO1xuK1x0XHRcdFx0aWYgKGVycilcbitcdFx0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHR9XG4gXHRcdFx0aWYgKHByaXZfZnJhbWVfcHRyKVxuIFx0XHRcdFx0cG9wX3I5KFx1MDAyNnByb2cpO1xuIFx0XHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMjE6NDE6MTIuMzcyNDIwMTQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MzA0MTMwMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBTaWduIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCdzIGFkZGluZyBgZW1pdF9rZnVuY19yZXR1cm5gLCBhbmQgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGFsbCBhYm91dCBzaWduLWV4dGVuZGluZyB0aGUgcmV0dXJuIHZhbHVlIGZyb20ga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSBjYWxsZWQgdmlhIGBCUEZfUFNFVURPX0tGVU5DX0NBTExgLiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCBpZiBhIGtmdW5jIHJldHVybnMgYSBzaWduZWQgaW50ZWdlciBzbWFsbGVyIHRoYW4gOCBieXRlcyAoMSwgMiwgb3IgNCksIHRoZSBKSVQgY29tcGlsZXIgd2lsbCBlbWl0IGEgYG1vdnN4YCBpbnN0cnVjdGlvbiB0byBzaWduLWV4dGVuZCB0aGF0IHZhbHVlIGludG8gdGhlIGBCUEZfUkVHXzBgIHJlZ2lzdGVyLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIHRoaXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUga2Z1bmMsIGlmIGl0IHdhc24ndCBzaWduLWV4dGVuZGVkLCBtaWdodCBoYXZlIGhhZCBnYXJiYWdlIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZSByZWdpc3Rlci4gSWYgYSBCUEYgcHJvZ3JhbSBzdWJzZXF1ZW50bHkgcmVhZCB0aG9zZSBiaXRzLCB3ZSBjb3VsZCBoYXZlIGEga2VybmVsIG1lbW9yeSBsZWFrLCBvciBhdCBsZWFzdCBhIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZSB1c2FnZS4gSG93ZXZlciwgS01TQU4sIG91ciBwcmltYXJ5IHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIHNvcnRzIG9mIGlzc3VlcywgdHJhY2tzIG1lbW9yeSBhdCB0aGUgQyBsZXZlbC4gSXQgKmRvZXNuJ3QqIGluc3RydW1lbnQgdGhlIEpJVC1jb21waWxlZCBCUEYgY29kZSBpdHNlbGYsIHdoaWNoIGlzIHdoZXJlIHRoaXMgbmV3IHNpZ24gZXh0ZW5zaW9uIGlzIG9jY3VycmluZy4gS01TQU4ncyBzaGFkb3cgbWVtb3J5IHdvdWxkbid0IG5lY2Vzc2FyaWx5IHRyYWNrIHRoZSBzdGF0ZSBvZiByZWdpc3RlcnMgKndpdGhpbiogdGhlIEJQRiBKSVQgY29kZS5cblxuV2FpdCwgdGhlIHg4Ni02NCBBQkkgZm9yIEMgZnVuY3Rpb25zOiBJZiBhIGtmdW5jIHJldHVybnMgYSAzMi1iaXQgYGludGAsIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBgUkFYYCByZWdpc3RlciBhcmUgKm5vdCogZ3VhcmFudGVlZCB0byBiZSB6ZXJvZWQgb3Igc2lnbi1leHRlbmRlZCBhY2NvcmRpbmcgdG8gdGhlIEFCSSEgU28sIGlmIHRoZSBKSVQgY29tcGlsZXIgKmRpZG4ndCogZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWUsIHRoZSBCUEYgcHJvZ3JhbSBjb3VsZCBiZSBzZWVpbmcgZ2FyYmFnZS4gSG93ZXZlciwgdGhlIHBhdGNoIGlzbid0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpwZXIgc2UqLCBpdCdzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBrZnVuY3MgYXJlIGNvcnJlY3RseSBpbnRlcnByZXRlZCBieSB0aGUgQlBGIHByb2dyYW0uXG5cblNvLCBkb2VzIHRoaXMgYWN0dWFsbHkgY3JlYXRlIGEgS01TQU4tZGV0ZWN0YWJsZSBidWc/IE5vLCBpdCdzIG5vdCBsaWtlIHRoZSBwYXRjaCBpcyBhbGxvY2F0aW5nIG1lbW9yeSwgd3JpdGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgbWFraW5nIGEgbG9naWMgZXJyb3IgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHByb2JsZW0gaXMgb25lIG9mIEFCSSBjb21wbGlhbmNlLiBUaGUgSklUIGNvbXBpbGVyIHdhc24ndCBkb2luZyB0aGUgcHJvcGVyIHNpZ24gZXh0ZW5zaW9uIGFjY29yZGluZyB0byB3aGF0IHRoZSBCUEYgcHJvZ3JhbSB3b3VsZCAqZXhwZWN0KiwgaW4gdGhlIHNpZ25lZCB0eXBlIGNhc2UuIEEgbmVnYXRpdmUgdmFsdWUgYmVpbmcgcmV0dXJuZWQsIGZvciBleGFtcGxlLCBjb3VsZCBiZSByZWFkIGFzIGEgaHVnZSBwb3NpdGl2ZSBudW1iZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvcnJlY3RuZXNzIGlzc3VlLCBhIGJ1ZyBpbiB0aGUgSklULCBidXQgaXQncyAqbm90KiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gVGhlIHVwcGVyIGJpdHMgb2YgYFJBWGAgYXJlIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhcyBLTVNBTiBkZWZpbmVzIGl0LCB0aGV5IGFyZSBzaW1wbHkgcmVnaXN0ZXIgc3RhdGUuXG5cbkFsc28sIHRoZSBwYXRjaCBqdXN0IGFkZHMgYSBgbW92c3hgIGluc3RydWN0aW9uLiBUaGVyZSdzIG5vIG1lbW9yeSBhbGxvY2F0aW9uLCBubyBwYWRkaW5nLCBub3RoaW5nIHRoYXQgY291bGQgYmUgYSB2ZWN0b3IgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNlZXAgdGhyb3VnaC4gSXQncyBzb2xlbHkgYSBKSVQgY29tcGlsZXIgbW9kaWZpY2F0aW9uLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBkb24ndCBuZWVkIHRvIHJ1biBhIHNwZWNpYWwgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzIHBhdGNoLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgYnVnIHdoZXJlIHNpZ25lZCA4LSwgMTYtLCBvciAzMi1iaXQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcyB3ZXJlICpub3QqIHByb3Blcmx5IHNpZ24tZXh0ZW5kZWQgdG8gNjQtYml0IHdpdGhpbiB0aGUgQlBGIHJlZ2lzdGVyIGBCUEZfUkVHXzBgLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGJlaGF2aW9yIGluIEJQRiBwcm9ncmFtcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBvciBvdGhlciBzaWduZWQgdmFsdWVzLiBIb3dldmVyLCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5IHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgbWF0dGVyIG9mIHRoZSBKSVQgY29tcGlsZXIncyBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBQkkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiB0ZXN0IHN1aXRlcyBzaG91bGQgYmUgYWRlcXVhdGUgdG8gdmVyaWZ5IHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDksIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDIxOjQxOjMwLjY3NjU1Mzg5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGtlcm5lbCBmdW5jdGlvbnMgKGtmdW5jcykgdGhhdCByZXR1cm4gc2lnbmVkIDgtLCAxNi0sIG9yIDMyLWJpdCBpbnRlZ2Vycy4gUHJldmlvdXNseSwgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCBCUEYgcmVnaXN0ZXIgKEJQRl9SRUdfMCkgbWlnaHQgbm90IGhhdmUgYmVlbiBjb3JyZWN0bHkgc2lnbi1leHRlbmRlZCwgbGVhZGluZyB0byBsb2dpYyBidWdzIGluIEJQRiBwcm9ncmFtcyAoZS5nLiwgbmVnYXRpdmUgZXJyb3IgY29kZXMgYmVpbmcgZXZhbHVhdGVkIGFzIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbC9BQkkgY29ycmVjdG5lc3MgaXNzdWUgaW4gdGhlIEpJVCBjb21waWxlciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IHBhZGRpbmcgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBDIGxldmVsIGFuZCBkb2VzIG5vdCBpbnN0cnVtZW50IEpJVGVkIEJQRiBtYWNoaW5lIGNvZGUgdG8gY2F0Y2ggcmVnaXN0ZXIgc3RhdGUgaXNzdWVzIGxpa2UgdGhpcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHRlc3Qgc3VpdGVzIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGlzIEpJVCBiZWhhdmlvci4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgdGhlIHJldHVybiB2YWx1ZXMgb2Yga2VybmVsIGZ1bmN0aW9ucyAoa2Z1bmNzKSB0aGF0IHJldHVybiBzaWduZWQgOC0sIDE2LSwgb3IgMzItYml0IGludGVnZXJzLiBQcmV2aW91c2x5LCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IEJQRiByZWdpc3RlciAoQlBGX1JFR18wKSBtaWdodCBub3QgaGF2ZSBiZWVuIGNvcnJlY3RseSBzaWduLWV4dGVuZGVkLCBsZWFkaW5nIHRvIGxvZ2ljIGJ1Z3MgaW4gQlBGIHByb2dyYW1zIChlLmcuLCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBiZWluZyBldmFsdWF0ZWQgYXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVycykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsL0FCSSBjb3JyZWN0bmVzcyBpc3N1ZSBpbiB0aGUgSklUIGNvbXBpbGVyLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggcGFkZGluZyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIEMgbGV2ZWwgYW5kIGRvZXMgbm90IGluc3RydW1lbnQgSklUZWQgQlBGIG1hY2hpbmUgY29kZSB0byBjYXRjaCByZWdpc3RlciBzdGF0ZSBpc3N1ZXMgbGlrZSB0aGlzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoaXMgSklUIGJlaGF2aW9yLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[1] Phase: Succeeded StartedAt: 2026-08-23 21:41:41 +0000 UTC FinishedAt: 2026-08-23 21:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 21:41:41 +0000 UTC FinishedAt: 2026-08-23 21:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2] Phase: Succeeded StartedAt: 2026-08-23 21:41:41 +0000 UTC FinishedAt: 2026-08-24 01:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 21:41:41 +0000 UTC FinishedAt: 2026-08-24 01:19:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 21:41:41 +0000 UTC FinishedAt: 2026-08-23 21:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 21:41:41 +0000 UTC FinishedAt: 2026-08-23 21:41:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowffpvt/series-workflowffpvt-convert-artifact-296346347/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 21:41:53 +0000 UTC FinishedAt: 2026-08-23 21:58:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 21:41:53 +0000 UTC FinishedAt: 2026-08-23 21:58:05 +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:*90ddeee6-84a1-45c0-b895-954cccd7175e,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-workflowffpvt/series-workflowffpvt-convert-artifact-296346347/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": "24759a91-76be-4377-94f2-6536da3d999b", "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-workflowffpvt/series-workflowffpvt-build-action-3637270249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 21:41:53 +0000 UTC FinishedAt: 2026-08-23 21:57:55 +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:*90ddeee6-84a1-45c0-b895-954cccd7175e,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-workflowffpvt/series-workflowffpvt-convert-artifact-296346347/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": "24759a91-76be-4377-94f2-6536da3d999b", "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-workflowffpvt/series-workflowffpvt-build-action-3637270249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 21:58:05 +0000 UTC FinishedAt: 2026-08-23 21:58:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 21:58:05 +0000 UTC FinishedAt: 2026-08-23 21:58:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 21:58:05 +0000 UTC FinishedAt: 2026-08-23 21:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 21:58:05 +0000 UTC FinishedAt: 2026-08-23 21:58:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowffpvt/series-workflowffpvt-convert-artifact-591518658/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 21:58:15 +0000 UTC FinishedAt: 2026-08-23 22:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 21:58:15 +0000 UTC FinishedAt: 2026-08-23 22:00:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24759a91-76be-4377-94f2-6536da3d999b,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-workflowffpvt/series-workflowffpvt-build-action-3637270249/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-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 22:00:12 +0000 UTC FinishedAt: 2026-08-23 22:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 22:00:12 +0000 UTC FinishedAt: 2026-08-23 22:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 22:00:12 +0000 UTC FinishedAt: 2026-08-23 22:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 22:00:12 +0000 UTC FinishedAt: 2026-08-23 22:16:19 +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:*90ddeee6-84a1-45c0-b895-954cccd7175e,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-workflowffpvt/series-workflowffpvt-convert-artifact-591518658/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": "b5132176-e57c-4bd2-944f-705ee6d44bf5", "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-workflowffpvt/series-workflowffpvt-build-action-1447071254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 22:00:12 +0000 UTC FinishedAt: 2026-08-23 22:16:09 +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:*90ddeee6-84a1-45c0-b895-954cccd7175e,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-workflowffpvt/series-workflowffpvt-convert-artifact-591518658/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": "b5132176-e57c-4bd2-944f-705ee6d44bf5", "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-workflowffpvt/series-workflowffpvt-build-action-1447071254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 22:16:19 +0000 UTC FinishedAt: 2026-08-23 22:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 22:16:19 +0000 UTC FinishedAt: 2026-08-23 22:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 22:16:19 +0000 UTC FinishedAt: 2026-08-23 22:18:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 22:16:19 +0000 UTC FinishedAt: 2026-08-23 22:18:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b5132176-e57c-4bd2-944f-705ee6d44bf5,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-workflowffpvt/series-workflowffpvt-build-action-1447071254/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-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 22:18:20 +0000 UTC FinishedAt: 2026-08-24 01:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 22:18:20 +0000 UTC FinishedAt: 2026-08-24 01:19:38 +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":["bpf_int_jit_compile"],"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:*24759a91-76be-4377-94f2-6536da3d999b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b5132176-e57c-4bd2-944f-705ee6d44bf5,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-workflowffpvt/series-workflowffpvt-build-action-3637270249/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-workflowffpvt/series-workflowffpvt-build-action-1447071254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 22:18:20 +0000 UTC FinishedAt: 2026-08-23 22:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 22:18:20 +0000 UTC FinishedAt: 2026-08-23 22:18:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"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-workflowffpvt/series-workflowffpvt-convert-artifact-2074437879/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 22:18:20 +0000 UTC FinishedAt: 2026-08-23 22:18:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 22:18:20 +0000 UTC FinishedAt: 2026-08-23 22:18:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 22:18:20 +0000 UTC FinishedAt: 2026-08-23 22:18:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 22:18:30 +0000 UTC FinishedAt: 2026-08-24 01:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowffpvt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cf5b96d9554815780f864d6f0014ac384e9be59c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_JIT_ALWAYS_ON"],"series_id":"2436bfbf-b17a-48fa-afe5-db01ef083e8b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 22:18:30 +0000 UTC FinishedAt: 2026-08-24 01:19:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24759a91-76be-4377-94f2-6536da3d999b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b5132176-e57c-4bd2-944f-705ee6d44bf5,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-workflowffpvt/series-workflowffpvt-build-action-3637270249/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-workflowffpvt/series-workflowffpvt-build-action-1447071254/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-workflowffpvt/series-workflowffpvt-convert-artifact-2074437879/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,}