Name: series-workflow527xt Phase: Succeeded StartedAt: 2026-08-20 02:37:39 +0000 UTC FinishedAt: 2026-08-20 06:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[0] Phase: Succeeded StartedAt: 2026-08-20 02:37:39 +0000 UTC FinishedAt: 2026-08-20 03:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 02:37:39 +0000 UTC FinishedAt: 2026-08-20 03:00:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "PREEMPT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "PREEMPT" ], "series_id": "6d1f46b4-c7d8-4103-807e-24176131003c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_link_prog", "bpf_trampoline_unlink_prog" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UFJFRU1QVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzAxZmRmNDA0NDkxZDhmN2Y2ZTMwNGJjN2ZlNmU3NDZjYzM0YzI2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDAyOjU5OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3NzE5ZjY1Mjg0NDU2Li5iYWNiNmJjMmUyN2JkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTEzNzYsNiAmIzQzOzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0fTtcbiYjNDM7I2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4mIzQzO1x0LyogUHJvZ3JhbXMgY2FsbGVkIGZyb20gdGhpcyBpbWFnZSBtdXN0IG91dGxpdmUgZGVmZXJyZWQgaW1hZ2UgZnJlZWluZy4gKi9cbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdO1xuJiM0MztcdGludCBucl9wcm9ncztcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYuLjMzMzgzZDFkYzFlMDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC01MjksOCAmIzQzOzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3Moc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTlxuJiM0MztcdGludCBpLCBraW5kO1xuJiM0MztcbiYjNDM7XHRmb3IgKGtpbmQgPSAwOyBraW5kIFx1MDAzYyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOylcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gdG5vZGVzW2tpbmRdLm5vZGVzW2ldLVx1MDAzZWxpbmstXHUwMDNlcHJvZztcbiYjNDM7XG4mIzQzO1x0XHRcdGJwZl9wcm9nX2luYyhwcm9nKTtcbiYjNDM7XHRcdFx0aW0tXHUwMDNlcHJvZ3NbaW0tXHUwMDNlbnJfcHJvZ3MmIzQzOyYjNDM7XSA9IHByb2c7XG4mIzQzO1x0XHR9XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTlxuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbS1cdTAwM2Vucl9wcm9nczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRicGZfcHJvZ19wdXQoaW0tXHUwMDNlcHJvZ3NbaV0pO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbiB7XG4mIzQzO1x0YnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhpbSk7XG4mIzQzO1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuIFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VzaXplKTtcbiBcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKGltLVx1MDAzZXNpemUpO1xuQEAgLTc0MCw2ICYjNDM7NzY4LDggQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0YnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhpbSwgdG5vZGVzKTtcbiYjNDM7XG4gXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VpbWFnZSAmIzQzOyBzaXplLFxuIFx0XHRcdFx0XHQgIFx1MDAyNnRyLVx1MDAzZWZ1bmMubW9kZWwsIHRyLVx1MDAzZWZsYWdzLCB0bm9kZXMsXG4gXHRcdFx0XHRcdCAgdHItXHUwMDNlZnVuYy5hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGhvbGQgcmVmZXJlbmNlcyB0byBCUEYgcHJvZ3JhbXMgd2hpbGUgdGhlIHRyYW1wb2xpbmUgaW1hZ2UgaXMgYWxpdmUsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGluIHByZWVtcHRpYmxlIGtlcm5lbHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcvZGV0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDI6NTk6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3NzE5ZjY1Mjg0NDU2Li5iYWNiNmJjMmUyN2JkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTEzNzYsNiAmIzQzOzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7CiAJCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCX07CiYjNDM7I2lmZGVmIENPTkZJR19QUkVFTVBUSU9OCiYjNDM7CS8qIFByb2dyYW1zIGNhbGxlZCBmcm9tIHRoaXMgaW1hZ2UgbXVzdCBvdXRsaXZlIGRlZmVycmVkIGltYWdlIGZyZWVpbmcuICovCiYjNDM7CXN0cnVjdCBicGZfcHJvZyAqcHJvZ3NbQlBGX01BWF9UUkFNUF9MSU5LU107CiYjNDM7CWludCBucl9wcm9nczsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCBicGZfdHJhbXBvbGluZSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCmluZGV4IDFhNzIxZmM0YmVmNTYuLjMzMzgzZDFkYzFlMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCkBAIC01MjksOCAmIzQzOzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYQogCXJldHVybiB0bm9kZXM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTgomIzQzOwlpbnQgaSwga2luZDsKJiM0MzsKJiM0MzsJZm9yIChraW5kID0gMDsga2luZCAmbHQ7IEJQRl9UUkFNUF9NQVg7IGtpbmQmIzQzOyYjNDM7KQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSB0bm9kZXNba2luZF0ubm9kZXNbaV0tJmd0O2xpbmstJmd0O3Byb2c7CiYjNDM7CiYjNDM7CQkJYnBmX3Byb2dfaW5jKHByb2cpOwomIzQzOwkJCWltLSZndDtwcm9nc1tpbS0mZ3Q7bnJfcHJvZ3MmIzQzOyYjNDM7XSA9IHByb2c7CiYjNDM7CQl9CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3Moc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTgomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGltLSZndDtucl9wcm9nczsgaSYjNDM7JiM0MzspCiYjNDM7CQlicGZfcHJvZ19wdXQoaW0tJmd0O3Byb2dzW2ldKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSkKIHsKJiM0MzsJYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhpbSk7CiYjNDM7CiAJYnBmX2ltYWdlX2tzeW1fZGVsKCZhbXA7aW0tJmd0O2tzeW0pOwogCWFyY2hfZnJlZV9icGZfdHJhbXBvbGluZShpbS0mZ3Q7aW1hZ2UsIGltLSZndDtzaXplKTsKIAlicGZfaml0X3VuY2hhcmdlX21vZG1lbShpbS0mZ3Q7c2l6ZSk7CkBAIC03NDAsNiAmIzQzOzc2OCw4IEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0CiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKGltLCB0bm9kZXMpOwomIzQzOwogCWVyciA9IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgaW0tJmd0O2ltYWdlLCBpbS0mZ3Q7aW1hZ2UgJiM0Mzsgc2l6ZSwKIAkJCQkJICAmYW1wO3RyLSZndDtmdW5jLm1vZGVsLCB0ci0mZ3Q7ZmxhZ3MsIHRub2RlcywKIAkJCQkJICB0ci0mZ3Q7ZnVuYy5hZGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgSW1hZ2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXTigJlzIGZvY3VzZWQgb24gQlBGIHRyYW1wb2xpbmVzLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgQlBGIHByb2dyYW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2VzIGFyZSBoYW5kbGVkLiBUaGUgYWRkaXRpb24gb2YgYHByb2dzYCBhbmQgYG5yX3Byb2dzYCB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdW5kZXIgYENPTkZJR19QUkVFTVBUSU9OYCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgZml4OyBJIGV4cGVjdCB0byBzZWUgcmVmZXJlbmNlIGNvdW50aW5nIGludHJvZHVjZWQgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBvZiBCUEYgcHJvZ3JhbXMgY29ycmVjdGx5LCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4KClRoZSBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9nc2AgYW5kIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzYCBmdW5jdGlvbnMgY29uZmlybSBteSBoeXBvdGhlc2lzLCBzZXJ2aW5nIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRzLiBUaGUgY2FsbHMgd2l0aGluIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX2ZyZWVgIGFyZSBleGFjdGx5IHdoZXJlIEnigJlkIGV4cGVjdCB0aGVtOiB0aGUgdXBkYXRlIGZ1bmN0aW9uIG5lZWRzIHRvIGtlZXAgdGhlIHByb2dyYW1zIGFyb3VuZCBkdXJpbmcgdGhlIHVwZGF0ZSBwcm9jZXNzLCBhbmQgd2hlbiBmcmVlaW5nIHRoZSBpbWFnZSwgd2Ugb2J2aW91c2x5IHdhbnQgdG8gZnJlZSB0aGUgcHJvZ3JhbXMgb25seSBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyB0aGVtLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBCUEYgdHJhbXBvbGluZSBsaWZldGltZSwgZXNwZWNpYWxseSBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzIHdoZXJlIGRlZmVycmVkIGZyZWVpbmcgY291bGQgYmUgYSBwcm9ibGVtLiBUaGlzIGlzIHNtYXJ0LgoKSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgYW5kIGBicGZfdHJhbXBfaW1hZ2VfZnJlZWAgYXJlIHJlYWNoYWJsZS4gVGhleSBhcmUgdGhlIGtleSB0byB2YWxpZGF0aW5nIHRoZSBlbnRpcmUgbG9naWMuIEFjdHVhbGx5LCBJIHNob3VsZCBsaXN0IHRob3NlIHR3byBmdW5jdGlvbnMgYXMgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OywgYXMgdGhhdCBzZWVtcyB0byBiZSB3aGVyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gcGxheS4gT3IgbWF5YmUgdGhlIG5ldyBzdGF0aWMgZnVuY3Rpb25zIGBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzYCBhbmQgYGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3NgLi4uIHdhaXQsIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGlzIHN0YXRpYz8gTm8sIHdhaXQgYSBtaW51dGUsIGxldCBtZSBkb3VibGUtY2hlY2suIEkgdGhvdWdodCBzbywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIEkgaGF2ZSB0byBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OS0jaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTYtXHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NzpcdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzLVx0XHRpZiAodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjQ6XHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NS1cdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Mz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MTAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0MTE6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVx0XHRcdFx0XHR2b2lkICpvbGRfYWRkciwgdm9pZCAqbmV3X2FkZHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDMyPXN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVx0ZWxzZVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQwOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCBvcmlnX2ZsYWdzLCBvbGRfYWRkciwgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDUwPXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ2MDpcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXHRcdFx0XHRcdFx0ICAgbmV3X2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDkxOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCAwLCBOVUxMLCBuZXdfYWRkcik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTItXHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjU5PXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICpicGZfdHJhbXBfaW1hZ2VfYWxsb2ModTY0IGtleSwgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzAwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzAxOnN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkzNT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjktXHRcdHJldHVybiBlcnI7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NzA6XHRlcnIgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIHRydWUgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sIG9wcywgZGF0YSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4OD1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDgtXHRicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyh0ciwgbm9kZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDA5Olx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgLiBJdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCBvYnNlcnZhdGlvbi4gTm93LCBzaW5jZSBpdCYjMzk7cyBgc3RhdGljYCwgbXkgbmV4dCB0aG91Z2h0IGlzIGFsd2F5cyAmIzM0O09rYXksIHdoYXQgYWJvdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHRyYW1wb2xpbmUgbWVjaGFuaXNtPyYjMzQ7IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmthZ2VzIGFuZCB1bi1saW5rYWdlcy4gQXJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIG9yIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AgdGhlIGtleSBjb21wYW5pb25zIGhlcmU/IFRoZXNlIG11c3QgYmUgdGhlIG9uZXMgdGhhdCwgYXQgYSBoaWdoIGxldmVsLCBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEJQRiBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhbXBvbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYHVwZGF0ZWAgYW5kIHRob3NlIGxpbmsvdW5saW5rIGZ1bmN0aW9ucyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0IGNhbGxzIHdoYXQsIHdoZXJlLCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgdXAgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdHJhbXBvbGluZSwgYW5kIHdoYXQga2luZCBvZiBlcnJvciBjb25kaXRpb25zIHRoZXkgaGFuZGxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkxNj1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkzNC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkzNTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkzNi1cdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTc1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTc2OmludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTc3LVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODItXHR0cmFtcG9saW5lX2xvY2sodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTgzOlx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODQtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEwNj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE0OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExNDk6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZzaGltX2xpbmstXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE1MC1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTY0MT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5MC1cdFx0ZGF0YS1cdTAwM2VlbnRyeSA9IFx1MDAyNm1ub2RlLVx1MDAzZWVudHJ5O1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5MTpcdFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTItXHRcdFx0XHRcdFx0IFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggQlBGOgoKKipNeSBCUEYgQnJhaW5zdG9ybSoqCgpSaWdodCwgc28gYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AgYXJlIGNsZWFybHkgKm91dCB0aGVyZSosIHZpc2libGUsIG5vdCBoaWRkZW4gYmVoaW5kIHN0YXRpYyBkZWNsYXJhdGlvbnMuIFRoYXTigJlzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYC4gVW5kZXJzdGFuZGluZyBob3cgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcyBpcyBsaWtlbHkgdG8gaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCB0cmFtcG9saW5lIG1lY2hhbmlzbS4gVGltZSB0byBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgbWFrZXMgaXQgdGljay4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NzY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg3LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTg4OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODktXHRcdFx0XHRcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxMS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTI6LyogYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coKSBzaG91bGQgbmV2ZXIgZmFpbC4gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTM6aW50IGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTQtXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxOS1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDIwOlx0ZXJyID0gX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMjEtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyNj1zdGF0aWMgdm9pZCBicGZfc2hpbV90cmFtcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDM1Olx0V0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNnNoaW1fbGluay1cdTAwM2VsaW5rLm5vZGUsIHNoaW1fbGluay1cdTAwM2V0cmFtcG9saW5lLCBOVUxMKSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDM2LVx0YnBmX3RyYW1wb2xpbmVfcHV0KHNoaW1fbGluay1cdTAwM2V0cmFtcG9saW5lKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzQxPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzUxLVx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTI6XHRcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzUzLVx0XHRcdFx0XHROVUxMLCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBUcmFtcG9saW5lIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHksIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgIGp1bXAgb3V0IGFzIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gb3VyIEZvY3VzU3ltYm9sIGxpc3QuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIGxpbmtpbmcgYW5kIHVubGlua2luZyBCUEYgcHJvZ3JhbXMgd2l0aGluIHRoZSB0cmFtcG9saW5lIHN5c3RlbSwgc28gdGhleSBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgpBbmQgdGhlIHBhdGNoIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBhbiBgI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OYCBjaGVjay4gQWxyaWdodCwgc28gd2UgaGF2ZSBhIGRlcGVuZGVuY3kgb24gYFBSRUVNUFRJT05gLiBJdCYjMzk7cyBhIGtleSByZXF1aXJlbWVudC4gTm93LCB3YWl0IGEgbWludXRlLCBgQ09ORklHX1BSRUVNUFRJT05gIGlzLCBtb3JlIG9yIGxlc3MsIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBldmVuIHNvLCBpdCYjMzk7cyBzb21ldGhpbmcgd2Ugc2hvdWxkIGV4cGxpY2l0bHkgaW5jbHVkZS4gSG9sZCBvbuKApiBgUFJFRU1QVElPTmAgaXNuJiMzOTt0IGFsd2F5cyBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGU7IGl0JiMzOTtzIG9mdGVuIGEgY29uc2VxdWVuY2Ugb2Ygc2V0dGluZyBgUFJFRU1QVGAgb3IgYFBSRUVNUFRfUlRgLiBCdXQgYFBSRUVNUFRJT05gICppcyogZGVmaW5lZCBieSB0aG9zZSwgc28gdGhleSBhcmUgdGhlIHJlYWwgY29uZmlnIG9wdGlvbnMsIGFuZCB0aGF0IHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBJ4oCZbGwgbWFrZSBhIG5vdGUgdG8gZXhhbWluZSBga2VybmVsL0tjb25maWcucHJlZW1wdGAgdG8gY29uZmlybSB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTEyMj1jb25maWcgUFJFRU1QVF9DT1VOVFxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTI0LVxua2VybmVsL0tjb25maWcucHJlZW1wdDoxMjU6Y29uZmlnIFBSRUVNUFRJT05cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTI2LSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJhdmVsaW5nIHRoZSBNeXN0ZXJ5IG9mIFBSRUVNUFRJT04qKgoKT2theSwgc28gYFBSRUVNUFRJT05gIGlzIG9uZSBvZiB0aG9zZSBiZWhpbmQtdGhlLXNjZW5lcyBib29sZWFucywgaXNuJiMzOTt0IGl0PyBTb21ldGhpbmcgdGhhdCYjMzk7cyBhY3RpdmF0ZWQsIG9yLCB3ZWxsLCAqcHJlZW1wdGVkKiBieSBlaXRoZXIgYFBSRUVNUFRgIG9yIGBQUkVFTVBUX1JUYC4gUmlnaHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHdoYXQgZXhhY3RseSB0cmlnZ2VycyB0aGlzIGZsYWcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYFBSRUVNUFRJT05gIHRvIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqYWN0dWFsbHkqIHNlbGVjdGluZyBpdC4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBwdWxsZWQgaW4gZnJvbT8gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBQUkVFTVBUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTk9Y29uZmlnIFBSRUVNUFRfQlVJTERcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTAtXHRib29sXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjExOlx0c2VsZWN0IFBSRUVNUFRJT05cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTItXHRzZWxlY3QgVU5JTkxJTkVfU1BJTl9VTkxPQ0sgaWYgIUFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdD05Mj1jb25maWcgUFJFRU1QVF9SVFxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTQtXHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgQVJDSF9TVVBQT1JUU19SVCBcdTAwMjZcdTAwMjYgIUNPTVBJTEVfVEVTVFxua2VybmVsL0tjb25maWcucHJlZW1wdDo5NTpcdHNlbGVjdCBQUkVFTVBUSU9OXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTk2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB5b3UmIzM5O3JlIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRlYnVnZ2luZyBhIEJ1aWxkIFByZWVtcHRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtIGFuZCB0aGUgYFBSRUVNUFRfQlVJTERgIGZsYWcgaXMgc2V0LiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdC4gQnV0Li4uIHdoYXQmIzM5O3MgKnRyaWdnZXJpbmcqIHRoYXQgZmxhZz8gV2hhdCYjMzk7cyB0aGUgZGVjaXNpb24gcHJvY2VzcyB0aGF0JiMzOTtzIG1ha2luZyB0aGlzIHNlbGVjdGlvbj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50LiBJIGtub3cgKml0JiMzOTtzKiBiZWVuIHNlbGVjdGVkIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBiZWVuIHNlbGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHZhcmlhYmxlIGJlaW5nIHNldCwgb3RoZXJ3aXNlIEkgY2FuJiMzOTt0IGJlIGNvbmZpZGVudCBpbiB0aGUgYnVpbGQmIzM5O3MgYmVoYXZpb3Igb3IgdHJvdWJsZXNob290IGFueSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nIGl0JiMzOTtzICp0aGVyZSo7IEkgaGF2ZSB0byBrbm93ICp3aHkqIGl0JiMzOTtzIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGUgYW50ZWNlZGVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBQUkVFTVBUX0JVSUxEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTU5PWNvbmZpZyBQUkVFTVBUXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC02MS1cdGRlcGVuZHMgb24gIUFSQ0hfTk9fUFJFRU1QVFxua2VybmVsL0tjb25maWcucHJlZW1wdDo2MjpcdHNlbGVjdCBQUkVFTVBUX0JVSUxEIGlmICFQUkVFTVBUX0RZTkFNSUNcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtNjMtXHRoZWxwXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdD03OD1jb25maWcgUFJFRU1QVF9MQVpZXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC04MS1cdGRlcGVuZHMgb24gQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjgyOlx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xua2VybmVsL0tjb25maWcucHJlZW1wdC04My1cdGhlbHBcbi0tXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTEyOT1jb25maWcgUFJFRU1QVF9EWU5BTUlDXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMzItXHRzZWxlY3QgSlVNUF9MQUJFTCBpZiBIQVZFX1BSRUVNUFRfRFlOQU1JQ19LRVlcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTMzOlx0c2VsZWN0IFBSRUVNUFRfQlVJTERcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTM0LVx0ZGVmYXVsdCB5IGlmIEhBVkVfUFJFRU1QVF9EWU5BTUlDX0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwcmVlbXB0aW9uLiBUaGUgb3B0aW9ucyBhcmUgYFBSRUVNUFRgLCBgUFJFRU1QVF9EWU5BTUlDYCwgb3IgYFBSRUVNUFRfUlRgLCBhbmQgYW55IG9mIHRoZXNlIGVuYWJsZSBhY3R1YWwgYFBSRUVNUFRJT05gLiBJdCBzZWVtcyBsb2dpY2FsIHRvIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgYFBSRUVNUFRgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCBoYW5nIG9uLi4uaXNuJiMzOTt0IGBQUkVFTVBUSU9OYCB0aGUgYWN0dWFsIGNvbmZpZyB1c2VkIGluIHRoZSBgI2lmZGVmYD8gU28sIHNob3VsZCBJIGp1c3QgbGlzdCBgUFJFRU1QVElPTmAgZGlyZWN0bHk/IE5vLCB0aGF0JiMzOTtzIG5vdCB1c2VyLXNlbGVjdGFibGUgZGlyZWN0bHkuIEJ1dCBtYXliZSwganVzdCBtYXliZSwgdGhlIHN5emthbGxlciBjb25maWcgZ2VuZXJhdGlvbiBjYW4gaGFuZGxlIGl0IGlmIEkgc3BlY2lmeSBgUFJFRU1QVGAuIEkmIzM5O2xsIGdvIHdpdGggYFBSRUVNUFRgIGZvciBub3cgYW5kIHNlZSB3aGF0IGhhcHBlbnMuCgpOb3csIHNoaWZ0aW5nIGdlYXJzLiBJIGtub3cgQlBGIHRyYW1wb2xpbmVzIGFyZSBoZWF2aWx5IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgaW4gQlBGIHRyYWNpbmcuIFNvIHRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAgYXJlIGVuYWJsZWQgYXMgd2VsbC4gSnVzdCB0byBiZSBjZXJ0YWluLCBJIHNob3VsZCByZWFsbHkgY2hlY2sgb3V0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBjb21waWxlZCBjb3JyZWN0bHkuIEFuZCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQsIGlmIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgZXZlbiBjb21waWxlZCBjb25kaXRpb25hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFtcG9saW5lLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgQlBGIEpJVCBSZWFjaGFiaWxpdHkgdmlhIFN5c3RlbSBDYWxscyoqCgpBbHJpZ2h0LCBzbyB0aGUgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlciAoYEJQRl9KSVRgKSBpcyBkZWZpbml0ZWx5IGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSByZWFjaGFibGUgYW5kIGhvdy4gTXkgaW5pdGlhbCBsaW5lIG9mIGludmVzdGlnYXRpb24gd2lsbCBiZSBmb2N1c2VkIG9uIHRoZSBzdGFuZGFyZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBkaXJlY3QgcGF0aCBmcm9tIHN5c3RlbSBjYWxscy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgIHBhdGggb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgaXMgZ29vZCB0byBrbm93LCBhbmQgaXQgaW5mb3JtcyB0aGUgbmV4dCBzZXQgb2YgcXVlc3Rpb25zIEkgbmVlZCB0byBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM2ODk9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5NS1cdFx0ICogQWxsb3cgcmUtYXR0YWNoIGZvciBUUkFDSU5HIGFuZCBMU00gcHJvZ3JhbXMuIElmIGl0JiMzOTtzXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzk2Olx0XHQgKiBjdXJyZW50bHkgbGlua2VkLCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2cgd2lsbCBmYWlsLlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5Ny1cdFx0ICogRVhUIHByb2dyYW1zIG5lZWQgdG8gc3BlY2lmeSB0Z3RfcHJvZ19mZCwgc28gdGhleVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4NjktXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozODcwOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNmxpbmstXHUwMDNlbGluay5ub2RlLCB0ciwgdGd0X3Byb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzg3MS1cdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MTY9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MzU6c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MzYtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3NS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk3NjppbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3Ny1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTgyLVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk4MzpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg0LVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMDY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNDgtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTQ5Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNTAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2NDE9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTAtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTE6XHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkyLVx0XHRcdFx0XHRcdCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTUKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBUcmFtcG9saW5lIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgd2hlbiBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhYnNvbHV0ZWx5IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LgoKSGVyZSYjMzk7cyBteSBkaXN0aWxsZWQgZnV6emluZyBwbGFuOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGEgaGlnaC1wcmlvcml0eSBhcmVhLgoqICAgKipGb2N1c1N5bWJvbHM6KiogSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLiBUaGV5IGFyZSBjbGVhcmx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBiYXNlZCBvbiB0aGUgJiMzNDtub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMmIzM0OyBndWlkYW5jZS4gV2hpbGUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LiBJIGNvbnNpZGVyZWQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAsIGJ1dCB0aG9zZSBhcmUgbGVzcyBkaXJlY3QuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBuZWVkIHRvIGVuYWJsZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGV4cG9zZSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgaW5jbHVkZSBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXMgb2J2aW91cyBjaG9pY2VzLiBBbmQsIHNpbmNlIHRoZSBwYXRjaCBkZWFscyB3aXRoIHByZWVtcHRpb24gY29uY2VybnMsIEkmIzM5O2xsIGRlZmluaXRlbHkgZW5hYmxlIGBQUkVFTVBUYCDigJMgY29uZmlybWVkIHRoYXQgaXQgY29ycmVjdGx5IHRyYW5zbGF0ZXMgdG8gYENPTkZJR19QUkVFTVBUSU9OYC4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBrZXJuZWwgcGF0Y2ggbW9kaWZpZXMgaG93IEJQRiBwcm9ncmFtcyBhcmUgcmVmZXJlbmNlZCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbG9naWMsIHBhcnRpY3VsYXJseSB0byBoYW5kbGUgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIGFsbCB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UFJFRU1QVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BSRUVNUFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9saW5rX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGlsZSB0aGUgdHJhbXBvbGluZSBpbWFnZSBpcyBhbGl2ZSwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbCB3aGVuIGF0dGFjaGluZy9kZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGFycmF5IG9mIHBvaW50ZXJzIGFuZCBhIGNvdW50ZXIgdG8gYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgIHRvIGhvbGQgcmVmZXJlbmNlcyB0byBCUEYgcHJvZ3JhbXMgd2hlbiBgQ09ORklHX1BSRUVNUFRJT05gIGlzIGVuYWJsZWQuIFRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ld2x5IGFkZGVkIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcgKGluY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIGBicGZfcHJvZ2AgcmVmY291bnRzKSBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzAxZmRmNDA0NDkxZDhmN2Y2ZTMwNGJjN2ZlNmU3NDZjYzM0YzI2YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDAyOjU5OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oCkBAIC0xMzc2LDYgJiM0MzsxMzc2LDExIEBAIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgewogCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAl9OwomIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTgomIzQzOwkvKiBQcm9ncmFtcyBjYWxsZWQgZnJvbSB0aGlzIGltYWdlIG11c3Qgb3V0bGl2ZSBkZWZlcnJlZCBpbWFnZSBmcmVlaW5nLiAqLwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdOwomIzQzOwlpbnQgbnJfcHJvZ3M7CiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtNTI5LDggJiM0Mzs1MjksMzYgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2EKIAlyZXR1cm4gdG5vZGVzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRJT04KJiM0MzsJaW50IGksIGtpbmQ7CiYjNDM7CiYjNDM7CWZvciAoa2luZCA9IDA7IGtpbmQgJmx0OyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOykKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB0bm9kZXNba2luZF0ubnJfbm9kZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IGJwZl9wcm9nICpwcm9nID0gdG5vZGVzW2tpbmRdLm5vZGVzW2ldLSZndDtsaW5rLSZndDtwcm9nOwomIzQzOwomIzQzOwkJCWJwZl9wcm9nX2luYyhwcm9nKTsKJiM0MzsJCQlpbS0mZ3Q7cHJvZ3NbaW0tJmd0O25yX3Byb2dzJiM0MzsmIzQzO10gPSBwcm9nOwomIzQzOwkJfQomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRJT04KJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpbS0mZ3Q7bnJfcHJvZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJYnBmX3Byb2dfcHV0KGltLSZndDtwcm9nc1tpXSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pCiB7CiYjNDM7CWJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pOwomIzQzOwogCWJwZl9pbWFnZV9rc3ltX2RlbCgmYW1wO2ltLSZndDtrc3ltKTsKIAlhcmNoX2ZyZWVfYnBmX3RyYW1wb2xpbmUoaW0tJmd0O2ltYWdlLCBpbS0mZ3Q7c2l6ZSk7CiAJYnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oaW0tJmd0O3NpemUpOwpAQCAtNzQwLDYgJiM0Mzs3NjgsOCBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhpbSwgdG5vZGVzKTsKJiM0MzsKIAllcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLSZndDtpbWFnZSwgaW0tJmd0O2ltYWdlICYjNDM7IHNpemUsCiAJCQkJCSAgJmFtcDt0ci0mZ3Q7ZnVuYy5tb2RlbCwgdHItJmd0O2ZsYWdzLCB0bm9kZXMsCiAJCQkJCSAgdHItJmd0O2Z1bmMuYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgSW1hZ2UgU3RydWN0dXJlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBjb3VwbGUgb2YgaW1wb3J0YW50IGFkZGl0aW9ucyB0byB0aGUgYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBDT05GSUdfUFJFRU1QVElPTmAgY29uZGl0aW9uYWwuIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIGBwcm9nc2AgYXJyYXkgYW5kIGEgYG5yX3Byb2dzYCBpbnRlZ2VyLiBUaGF0IGBwcm9nc2AgYXJyYXkgaXMgcHJvYmFibHkgbWVhbnQgdG8gaG9sZCB0aGUgQlBGIHByb2dyYW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UsIGFuZCBgbnJfcHJvZ3NgIGlzIHRoZSBvYnZpb3VzIGNvdW50IG9mIHRob3NlIHByb2dyYW1zLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlIGNvbmNlcHR1YWxseS4KCk5vdywgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncygpYCBhbmQgYGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoKWAuIFRoZXNlIGFyZSBjbGFzc2ljIHJlZmVyZW5jZSBjb3VudGluZyBmdW5jdGlvbnM7IGBnZXRgIGluY3JlbWVudHMsIGBwdXRgIGRlY3JlbWVudHMuIEFuZCBpdCBsb29rcyBsaWtlIGBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKClgIGlzIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIHRoZSBwcm9ncmFtcyBpbiBgaW0tJmd0O3Byb2dzYC4gVGhhdOKAmXMgdGhlIHBhdHRlcm4gSSBleHBlY3RlZC4gU28sIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgaXMgZ29pbmcgdG8gYmUgd2hlcmUgdGhlIHByb2dyYW1zIGFyZSBlZmZlY3RpdmVseSAmIzM0O2JvcnJvd2VkJiMzNDsuIFRoZW4sIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzKClgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBpbiBgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoKWAsIHRvIHJlbGlucXVpc2ggdGhlIHByb2dyYW1zLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIG5vdyBpcywgaXMgYGltLSZndDtucl9wcm9nc2AgaW5pdGlhbGl6ZWQgc29tZXdoZXJlPyBJdCYjMzk7cyBjcnVjaWFsIHdlIGtub3cgdGhpcy4gV2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvdW50IHN0YXJ0cyBhdCB6ZXJvLCBvciB3ZSBjb3VsZCBoYXZlIGFsbCBzb3J0cyBvZiB3ZWlyZG5lc3MuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBpbWAgaXMgYWxsb2NhdGVkLiBJcyBpdCBpbiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIG9yIHNvbWV3aGVyZSBlbHNlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZS4gVGhpcyBpcyBhbiBhcmVhIHdoZXJlIGEgc3VidGxlIGJ1ZyBjYW4gcmVhbGx5IGJpdGUgeW91LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBfaW1hZ2VfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjEwPXN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9wdXQoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjU4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjU5OnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICpicGZfdHJhbXBfaW1hZ2VfYWxsb2ModTY0IGtleSwgaW50IHNpemUpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02NjAte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcwMT1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2NC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2NTpcdGltID0gYnBmX3RyYW1wX2ltYWdlX2FsbG9jKHRyLVx1MDAzZWtleSwgc2l6ZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjYtXHRpZiAoSVNfRVJSKGltKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnBmX3RyYW1wX2ltYWdlX2FsbG9jYCBmdW5jdGlvbi4gSSYjMzk7dmUgZW5jb3VudGVyZWQgc2ltaWxhciBhbGxvY2F0aW9uIHJvdXRpbmVzIGJlZm9yZSwgYnV0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGhlcmUgaXMgY3J1Y2lhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBraW5kIG9mIGltYWdlIGFyZSB3ZSBhbGxvY2F0aW5nPyYjMzQ7IFRoaXMgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lcyDigJMgd2hpY2ggaW1tZWRpYXRlbHkgaW1wbGllcyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbiBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIGtlcm5lbCBzcGFjZSwgd2hpY2ggYWx3YXlzIGRlbWFuZHMgYSBoaWdoIGxldmVsIG9mIHNjcnV0aW55LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IGxheW91dC4gSXMgdGhpcyBhbGxvY2F0aW9uIHBhZ2UtYWxpZ25lZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjb250aWd1b3VzIHBoeXNpY2FsIHBhZ2VzPyBEb2VzIHRoZSBhbGxvY2F0b3IgaGF2ZSBhbnkgc3BlY2lmaWMgYXR0cmlidXRlcywgc3VjaCBhcyBjYWNoZSBjb2hlcmVuY2UgY29uc2lkZXJhdGlvbnMgb3IgbWVtb3J5IHByb3RlY3Rpb24gZmxhZ3M/IEdpdmVuIGl0IGlzIHJlbGF0ZWQgdG8gdHJhbXBvbGluZXMsIGl0IGlzIGxpa2VseSB0aGUgaW1hZ2Ugd2lsbCBiZSBpbmplY3RlZCBpbnRvIGtlcm5lbCBzcGFjZSB3aXRoIGV4ZWN1dGlvbiBwcml2aWxlZ2VzLCBtZWFuaW5nIHdlIG11c3QgYmUgZXh0cmVtZWx5IGNhcmVmdWwgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGRldGFpbHMgbWF0dGVyLiBXaGF0JiMzOTtzIHRoZSBzaXplIGFyZ3VtZW50PyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBzcGVjaWZ5aW5nIG1lbW9yeSBhbGlnbm1lbnQ/IElzIHRoaXMgYSBzaW1wbGUgYGttYWxsb2NgLXN0eWxlIGFsbG9jYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgZGVzaWduZWQgZm9yIEJQRi1zcGVjaWZpYyBuZWVkcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBmYWlsdXJlPyBIb3cgaXMgdGhpcyBhbGxvY2F0aW9uIGxpbmtlZCB0byB0aGUgb3ZlcmFsbCBCUEYgcHJvZ3JhbSBsaWZlY3ljbGU/CgpJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEFyZSB3ZSBwcm90ZWN0ZWQgYWdhaW5zdCBtZW1vcnkgZXhoYXVzdGlvbj8gSXMgdGhlIGFsbG9jYXRpb24gdGhyZWFkLXNhZmUsIHBhcnRpY3VsYXJseSBpZiBtdWx0aXBsZSBCUEYgcHJvZ3JhbXMgbWlnaHQgYmUgbG9hZGluZyBjb25jdXJyZW50bHk/IElzIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIGJlaW5nIHN0b3JlZCBhbG9uZ3NpZGUgdGhlIGltYWdlPyBEb2VzIHRoZSBmdW5jdGlvbiByZXR1cm4gYSByYXcgcG9pbnRlciwgb3IgYSBtb3JlIG9wYXF1ZSBoYW5kbGU/IEFuZCwgbW9zdCBjcml0aWNhbGx5LCBob3cgaXMgdGhpcyBtZW1vcnkgKmZyZWVkKj8gSXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGBicGZfdHJhbXBfaW1hZ2VfZnJlZWAgZnVuY3Rpb24sIGFuZCBkb2VzIGl0IGFkZHJlc3MgYWxsIHRoZSBwb3RlbnRpYWwgY2xlYW51cCBpc3N1ZXM/IE1lbW9yeSBsZWFrcyBoZXJlIHdvdWxkIGJlIGNhdGFzdHJvcGhpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjU1Olx0XHQgKi9cbiA2NTY6XHRcdGNhbGxfcmN1X3Rhc2tzX3RyYWNlKFx1MDAyNmltLVx1MDAzZXJjdSwgX19icGZfdHJhbXBfaW1hZ2VfcHV0X3JjdV90YXNrcyk7XG4gNjU3Olx0fVxuIDY1ODpcdFxuIDY1OTpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICpicGZfdHJhbXBfaW1hZ2VfYWxsb2ModTY0IGtleSwgaW50IHNpemUpXG4gNjYwOlx0e1xuIDY2MTpcdFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW07XG4gNjYyOlx0XHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XG4gNjYzOlx0XHR2b2lkICppbWFnZTtcbiA2NjQ6XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuIDY2NTpcdFxuIDY2NjpcdFx0aW0gPSBremFsbG9jX29iaigqaW0pO1xuIDY2NzpcdFx0aWYgKCFpbSlcbiA2Njg6XHRcdFx0Z290byBvdXQ7XG4gNjY5Olx0XG4gNjcwOlx0XHRlcnIgPSBicGZfaml0X2NoYXJnZV9tb2RtZW0oc2l6ZSk7XG4gNjcxOlx0XHRpZiAoZXJyKVxuIDY3MjpcdFx0XHRnb3RvIG91dF9mcmVlX2ltO1xuIDY3MzpcdFx0aW0tXHUwMDNlc2l6ZSA9IHNpemU7XG4gNjc0Olx0XG4gNjc1Olx0XHRlcnIgPSAtRU5PTUVNO1xuIDY3NjpcdFx0aW0tXHUwMDNlaW1hZ2UgPSBpbWFnZSA9IGFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUoc2l6ZSk7XG4gNjc3Olx0XHRpZiAoIWltYWdlKVxuIDY3ODpcdFx0XHRnb3RvIG91dF91bmNoYXJnZTtcbiA2Nzk6XHRcbiA2ODA6XHRcdGVyciA9IHBlcmNwdV9yZWZfaW5pdChcdTAwMjZpbS1cdTAwM2VwY3JlZiwgX19icGZfdHJhbXBfaW1hZ2VfcmVsZWFzZSwgMCwgR0ZQX0tFUk5FTCk7XG4gNjgxOlx0XHRpZiAoZXJyKVxuIDY4MjpcdFx0XHRnb3RvIG91dF9mcmVlX2ltYWdlO1xuIDY4MzpcdFxuIDY4NDpcdFx0a3N5bSA9IFx1MDAyNmltLVx1MDAzZWtzeW07XG4gNjg1Olx0XHRJTklUX0xJU1RfSEVBRF9SQ1UoXHUwMDI2a3N5bS1cdTAwM2Vsbm9kZSk7XG4gNjg2Olx0XHRzbnByaW50Zihrc3ltLVx1MDAzZW5hbWUsIEtTWU1fTkFNRV9MRU4sIFwmIzM0O2JwZl90cmFtcG9saW5lXyVsbHVcJiMzNDssIGtleSk7XG4gNjg3Olx0XHRicGZfaW1hZ2Vfa3N5bV9pbml0KGltYWdlLCBzaXplLCBrc3ltKTtcbiA2ODg6XHRcdGJwZl9pbWFnZV9rc3ltX2FkZChrc3ltKTtcbiA2ODk6XHRcdHJldHVybiBpbTtcbiA2OTA6XHRcbiA2OTE6XHRvdXRfZnJlZV9pbWFnZTpcbiA2OTI6XHRcdGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZShpbS1cdTAwM2VpbWFnZSwgaW0tXHUwMDNlc2l6ZSk7XG4gNjkzOlx0b3V0X3VuY2hhcmdlOlxuIDY5NDpcdFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgd2l0aCBgYnBmX3Byb2dgcywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwcmVlbXB0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBpbWAgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyBjb3JyZWN0bHksIGlzIGp1c3QgYSBtYWNybyBmb3IgYGt6YWxsb2NgLiBUaGlzIHplcm9lcyBvdXQgZXZlcnl0aGluZywgc28gYG5yX3Byb2dzYCBzdGFydHMgYXQgMCBhbmQgdGhlIGBwcm9nc2AgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9zLgoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYGJwZl9wcm9nYHMsIGEgY291bnRlciwgaW5jcmVtZW50aW5nIHRoZSByZWZjb3VudHMgb2YgdGhlIHByb2dyYW1zLCBzdG9yaW5nIHRoZW0gaW4gdGhlIGFycmF5LCBhbmQgZGVjcmVtZW50aW5nIHRoZW0gb24gZnJlZS4gSXQmIzM5O3MgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlIG5hc3R5IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBwcm9ibGVtcyB0aGF0IGNhbiBwb3AgdXAgd2hlbiBwcmVlbXB0aW9uIGlzIGVuYWJsZWQuCgpNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHNhZmUuIFRoZXJlJiMzOTtzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFraW5nIHRvIHVzZXJzcGFjZSBoZXJlLiBBbmQgSSBjYW4mIzM5O3Qgc2VlIGFueSBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgdXNlZCBpbiBhIGNvbnRyb2wgZmxvdyBpc3N1ZSwgZWl0aGVyLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSBiZWNhdXNlIGl0IG1lYW5zIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBLTVNBTiBzZWVtcyB1bm5lY2Vzc2FyeSBoZXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt6YWxsb2Nfb2JqYCBtYWNybyBqdXN0IHRvIGJlIDEwMCUgY29uZmlkZW50LCBidXQgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYSBjbGVhbiwgd2VsbC1yZWFzb25lZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1MjojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTMtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDcKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBpbnRvIHRoaXMuIFRoZSBmdW5jdGlvbiBga3phbGxvY19vYmpgICpkZWZpbml0ZWx5KiByZWxpZXMgb24gYGt6YWxsb2NgLiBBbmQgdGhhdCYjMzk7cyBjcnVjaWFsLiBga3phbGxvY2AsIGJ5IGl0cyB2ZXJ5IG5hdHVyZSwgZ3VhcmFudGVlcyB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZCBvdXQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgdG8gYXZvaWQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcywgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbGV2ZXJhZ2VzIGBremFsbG9jYCBpbiB0aGlzIHdheSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCB0aGUgcHJvcG9zZWQgY2hhbmdlICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgY2FuIHJlbWFpbiBzZXQgdG8gYGZhbHNlYC4gVGhhdCBzZXR0bGVzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBhcnJheSBvZiBwb2ludGVycyBhbmQgYSBjb3VudGVyIHRvIGBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlYCB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoZW4gYENPTkZJR19QUkVFTVBUSU9OYCBpcyBlbmFibGVkLiBUaGlzIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpLCBlbnN1cmluZyB0aGF0IHRoZSBuZXdseSBhZGRlZCBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nIChpbmNyZW1lbnRpbmcgYW5kIGRlY3JlbWVudGluZyBgYnBmX3Byb2dgIHJlZmNvdW50cykgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjA3LjY3MTIzMjc4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTAyMjUwMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQUkVFTVBUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBhcnJheSBvZiBwb2ludGVycyBhbmQgYSBjb3VudGVyIHRvIGBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlYCB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoZW4gYENPTkZJR19QUkVFTVBUSU9OYCBpcyBlbmFibGVkLiBUaGlzIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpLCBlbnN1cmluZyB0aGF0IHRoZSBuZXdseSBhZGRlZCBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nIChpbmNyZW1lbnRpbmcgYW5kIGRlY3JlbWVudGluZyBgYnBmX3Byb2dgIHJlZmNvdW50cykgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGlsZSB0aGUgdHJhbXBvbGluZSBpbWFnZSBpcyBhbGl2ZSwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbCB3aGVuIGF0dGFjaGluZy9kZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MDcuNjcxMjQ4MTY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE3NzU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDAyOjU5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0xMzc2LDYgKzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XFxuIFxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiBcXHR9O1xcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRJT05cXG4rXFx0LyogUHJvZ3JhbXMgY2FsbGVkIGZyb20gdGhpcyBpbWFnZSBtdXN0IG91dGxpdmUgZGVmZXJyZWQgaW1hZ2UgZnJlZWluZy4gKi9cXG4rXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nc1tCUEZfTUFYX1RSQU1QX0xJTktTXTtcXG4rXFx0aW50IG5yX3Byb2dzO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfdHJhbXBvbGluZSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5AQCAtNTI5LDggKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxcbiBcXHRyZXR1cm4gdG5vZGVzO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXFxuK1xcdGludCBpLCBraW5kO1xcbitcXG4rXFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKylcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IHRub2Rlc1traW5kXS5ub2Rlc1tpXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZztcXG4rXFxuK1xcdFxcdFxcdGJwZl9wcm9nX2luYyhwcm9nKTtcXG4rXFx0XFx0XFx0aW0tXFx1MDAzZXByb2dzW2ltLVxcdTAwM2Vucl9wcm9ncysrXSA9IHByb2c7XFxuK1xcdFxcdH1cXG4rI2VuZGlmXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3Moc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXFxuK3tcXG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGltLVxcdTAwM2Vucl9wcm9nczsgaSsrKVxcbitcXHRcXHRicGZfcHJvZ19wdXQoaW0tXFx1MDAzZXByb2dzW2ldKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxcbiB7XFxuK1xcdGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pO1xcbitcXG4gXFx0YnBmX2ltYWdlX2tzeW1fZGVsKFxcdTAwMjZpbS1cXHUwMDNla3N5bSk7XFxuIFxcdGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZShpbS1cXHUwMDNlaW1hZ2UsIGltLVxcdTAwM2VzaXplKTtcXG4gXFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oaW0tXFx1MDAzZXNpemUpO1xcbkBAIC03NDAsNiArNzY4LDggQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoaW0sIHRub2Rlcyk7XFxuK1xcbiBcXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVxcdTAwM2VpbWFnZSwgaW0tXFx1MDAzZWltYWdlICsgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHItXFx1MDAzZWZ1bmMubW9kZWwsIHRyLVxcdTAwM2VmbGFncywgdG5vZGVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHRyLVxcdTAwM2VmdW5jLmFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTowOC4zMTQyNjcxMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzI1OTAwMzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJFRU1QVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NTk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMzc2LDYgKzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0fTtcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRJT05cbitcdC8qIFByb2dyYW1zIGNhbGxlZCBmcm9tIHRoaXMgaW1hZ2UgbXVzdCBvdXRsaXZlIGRlZmVycmVkIGltYWdlIGZyZWVpbmcuICovXG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdO1xuK1x0aW50IG5yX3Byb2dzO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGJwZl90cmFtcG9saW5lIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDggKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcylcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaSwga2luZDtcbitcbitcdGZvciAoa2luZCA9IDA7IGtpbmQgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKylcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpKyspIHtcbitcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSB0bm9kZXNba2luZF0ubm9kZXNbaV0tXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuK1xuK1x0XHRcdGJwZl9wcm9nX2luYyhwcm9nKTtcbitcdFx0XHRpbS1cdTAwM2Vwcm9nc1tpbS1cdTAwM2Vucl9wcm9ncysrXSA9IHByb2c7XG4rXHRcdH1cbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGltLVx1MDAzZW5yX3Byb2dzOyBpKyspXG4rXHRcdGJwZl9wcm9nX3B1dChpbS1cdTAwM2Vwcm9nc1tpXSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbitcdGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pO1xuK1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuIFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VzaXplKTtcbiBcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKGltLVx1MDAzZXNpemUpO1xuQEAgLTc0MCw2ICs3NjgsOCBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoaW0sIHRub2Rlcyk7XG4rXG4gXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VpbWFnZSArIHNpemUsXG4gXHRcdFx0XHRcdCAgXHUwMDI2dHItXHUwMDNlZnVuYy5tb2RlbCwgdHItXHUwMDNlZmxhZ3MsIHRub2RlcyxcbiBcdFx0XHRcdFx0ICB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MDguMzE0MjcwODQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyNzA4MDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgSW1hZ2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdOKAmXMgZm9jdXNlZCBvbiBCUEYgdHJhbXBvbGluZXMsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCBpdCBoYXMgdG8gZG8gd2l0aCBob3cgdGhlIEJQRiBwcm9ncmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlcyBhcmUgaGFuZGxlZC4gVGhlIGFkZGl0aW9uIG9mIGBwcm9nc2AgYW5kIGBucl9wcm9nc2AgdG8gYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgIHVuZGVyIGBDT05GSUdfUFJFRU1QVElPTmAgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGZpeDsgSSBleHBlY3QgdG8gc2VlIHJlZmVyZW5jZSBjb3VudGluZyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgQlBGIHByb2dyYW1zIGNvcnJlY3RseSwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMuXG5cblRoZSBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9nc2AgYW5kIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzYCBmdW5jdGlvbnMgY29uZmlybSBteSBoeXBvdGhlc2lzLCBzZXJ2aW5nIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRzLiBUaGUgY2FsbHMgd2l0aGluIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX2ZyZWVgIGFyZSBleGFjdGx5IHdoZXJlIEnigJlkIGV4cGVjdCB0aGVtOiB0aGUgdXBkYXRlIGZ1bmN0aW9uIG5lZWRzIHRvIGtlZXAgdGhlIHByb2dyYW1zIGFyb3VuZCBkdXJpbmcgdGhlIHVwZGF0ZSBwcm9jZXNzLCBhbmQgd2hlbiBmcmVlaW5nIHRoZSBpbWFnZSwgd2Ugb2J2aW91c2x5IHdhbnQgdG8gZnJlZSB0aGUgcHJvZ3JhbXMgb25seSBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyB0aGVtLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBpbXByb3ZlbWVudCBpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lIGxpZmV0aW1lLCBlc3BlY2lhbGx5IGluIHByZWVtcHRpYmxlIGtlcm5lbHMgd2hlcmUgZGVmZXJyZWQgZnJlZWluZyBjb3VsZCBiZSBhIHByb2JsZW0uIFRoaXMgaXMgc21hcnQuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX2ZyZWVgIGFyZSByZWFjaGFibGUuIFRoZXkgYXJlIHRoZSBrZXkgdG8gdmFsaWRhdGluZyB0aGUgZW50aXJlIGxvZ2ljLiBBY3R1YWxseSwgSSBzaG91bGQgbGlzdCB0aG9zZSB0d28gZnVuY3Rpb25zIGFzIFwiRm9jdXNTeW1ib2xzXCIsIGFzIHRoYXQgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIHBsYXkuIE9yIG1heWJlIHRoZSBuZXcgc3RhdGljIGZ1bmN0aW9ucyBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9nc2AgYW5kIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzYC4uLiB3YWl0LCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBpcyBzdGF0aWM/IE5vLCB3YWl0IGEgbWludXRlLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJIHRob3VnaHQgc28sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBJIGhhdmUgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToxNS4yNDEzNTcxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNDY5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjktI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOnN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ni1cXHRcXHQgICAgISh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc6XFx0XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMtXFx0XFx0aWYgKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY0OlxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzczPXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQxMTpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVxcdFxcdFxcdFxcdFxcdHZvaWQgKm9sZF9hZGRyLCB2b2lkICpuZXdfYWRkcilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzMj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVxcdGVsc2VcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NDA6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1MD1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYwOlxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkodHIsIG9yaWdfZmxhZ3MsIG9sZF9hZGRyLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2MS1cXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTE6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgMCwgTlVMTCwgbmV3X2FkZHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NTk9c3RhdGljIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmJwZl90cmFtcF9pbWFnZV9hbGxvYyh1NjQga2V5LCBpbnQgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwMC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDE6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkzNT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2OS1cXHRcXHRyZXR1cm4gZXJyO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk3MDpcXHRlcnIgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIHRydWUgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sIG9wcywgZGF0YSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05ODg9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDgtXFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2codHIsIG5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDk6XFx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDEwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MTUuMjk5NTE3Njc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2OTQ5MzI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYC4gSXQncyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoYXQncyBhIGdvb2QgZmlyc3Qgb2JzZXJ2YXRpb24uIE5vdywgc2luY2UgaXQncyBgc3RhdGljYCwgbXkgbmV4dCB0aG91Z2h0IGlzIGFsd2F5cyBcIk9rYXksIHdoYXQgYWJvdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHRyYW1wb2xpbmUgbWVjaGFuaXNtP1wiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmthZ2VzIGFuZCB1bi1saW5rYWdlcy4gQXJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIG9yIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AgdGhlIGtleSBjb21wYW5pb25zIGhlcmU/IFRoZXNlIG11c3QgYmUgdGhlIG9uZXMgdGhhdCwgYXQgYSBoaWdoIGxldmVsLCBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEJQRiBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhbXBvbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYHVwZGF0ZWAgYW5kIHRob3NlIGxpbmsvdW5saW5rIGZ1bmN0aW9ucyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0IGNhbGxzIHdoYXQsIHdoZXJlLCBhbmQgd2h5LiBJJ2xsIG5lZWQgdG8gZ28gbG9vayB1cCBhbmQgZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB0cmFtcG9saW5lLCBhbmQgd2hhdCBraW5kIG9mIGVycm9yIGNvbmRpdGlvbnMgdGhleSBoYW5kbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToxOS4zNjkwMTQ2OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzMjczMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkxNj1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTM0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkzNTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NzY6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTc3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk4Mi1cXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk4MzpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg0LVxcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMDY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE0OC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTQ5OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZzaGltX2xpbmstXFx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE1MC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTY0MT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkwLVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjkxOlxcdFxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MTkuNDI5MzUxMTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzMzM0MTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIEJQRjpcblxuKipNeSBCUEYgQnJhaW5zdG9ybSoqXG5cblJpZ2h0LCBzbyBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhbmQgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCBhcmUgY2xlYXJseSAqb3V0IHRoZXJlKiwgdmlzaWJsZSwgbm90IGhpZGRlbiBiZWhpbmQgc3RhdGljIGRlY2xhcmF0aW9ucy4gVGhhdOKAmXMgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdywgc2luY2UgSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMsIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYC4gVW5kZXJzdGFuZGluZyBob3cgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcyBpcyBsaWtlbHkgdG8gaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCB0cmFtcG9saW5lIG1lY2hhbmlzbS4gVGltZSB0byBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgbWFrZXMgaXQgdGljay4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjIyLjM2MjY5OTI2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDg1MDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NzY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODctXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTg4OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDExLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTI6LyogYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coKSBzaG91bGQgbmV2ZXIgZmFpbC4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDEzOmludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxNC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTktXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDIwOlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMjEtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyNj1zdGF0aWMgdm9pZCBicGZfc2hpbV90cmFtcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAzNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDM1OlxcdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCkpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzYtXFx0YnBmX3RyYW1wb2xpbmVfcHV0KHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzQxPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTEtXFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTI6XFx0XFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzUzLVxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToyMi40NDM1NjU5NTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU3NzgxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVHJhbXBvbGluZSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSwgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AganVtcCBvdXQgYXMgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBvdXIgRm9jdXNTeW1ib2wgbGlzdC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBmb3IgbGlua2luZyBhbmQgdW5saW5raW5nIEJQRiBwcm9ncmFtcyB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgc3lzdGVtLCBzbyB0aGV5IGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuQW5kIHRoZSBwYXRjaCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYW4gYCNpZmRlZiBDT05GSUdfUFJFRU1QVElPTmAgY2hlY2suIEFscmlnaHQsIHNvIHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBQUkVFTVBUSU9OYC4gSXQncyBhIGtleSByZXF1aXJlbWVudC4gTm93LCB3YWl0IGEgbWludXRlLCBgQ09ORklHX1BSRUVNUFRJT05gIGlzLCBtb3JlIG9yIGxlc3MsIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBldmVuIHNvLCBpdCdzIHNvbWV0aGluZyB3ZSBzaG91bGQgZXhwbGljaXRseSBpbmNsdWRlLiBIb2xkIG9u4oCmIGBQUkVFTVBUSU9OYCBpc24ndCBhbHdheXMgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlOyBpdCdzIG9mdGVuIGEgY29uc2VxdWVuY2Ugb2Ygc2V0dGluZyBgUFJFRU1QVGAgb3IgYFBSRUVNUFRfUlRgLiBCdXQgYFBSRUVNUFRJT05gICppcyogZGVmaW5lZCBieSB0aG9zZSwgc28gdGhleSBhcmUgdGhlIHJlYWwgY29uZmlnIG9wdGlvbnMsIGFuZCB0aGF0IHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMuIEnigJlsbCBtYWtlIGEgbm90ZSB0byBleGFtaW5lIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YCB0byBjb25maXJtIHRoZSBleGFjdCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucywganVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToyNy4yMDEzNTY4MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDA2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVFTVBUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD0xMjI9Y29uZmlnIFBSRUVNUFRfQ09VTlRcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTI0LVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTI1OmNvbmZpZyBQUkVFTVBUSU9OXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMjYtICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MjcuMjgzNzc1MDkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY5NDQ1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yYXZlbGluZyB0aGUgTXlzdGVyeSBvZiBQUkVFTVBUSU9OKipcblxuT2theSwgc28gYFBSRUVNUFRJT05gIGlzIG9uZSBvZiB0aG9zZSBiZWhpbmQtdGhlLXNjZW5lcyBib29sZWFucywgaXNuJ3QgaXQ/IFNvbWV0aGluZyB0aGF0J3MgYWN0aXZhdGVkLCBvciwgd2VsbCwgKnByZWVtcHRlZCogYnkgZWl0aGVyIGBQUkVFTVBUYCBvciBgUFJFRU1QVF9SVGAuIFJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhpcyBmbGFnLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBQUkVFTVBUSU9OYCB0byBpdHMgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqYWN0dWFsbHkqIHNlbGVjdGluZyBpdC4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBwdWxsZWQgaW4gZnJvbT8gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjMxLjQzMDcyNTU0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyMTI4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFBSRUVNUFRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTk9Y29uZmlnIFBSRUVNUFRfQlVJTERcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEwLVxcdGJvb2xcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjExOlxcdHNlbGVjdCBQUkVFTVBUSU9OXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMi1cXHRzZWxlY3QgVU5JTkxJTkVfU1BJTl9VTkxPQ0sgaWYgIUFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTkyPWNvbmZpZyBQUkVFTVBUX1JUXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTk0LVxcdGRlcGVuZHMgb24gRVhQRVJUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6OTU6XFx0c2VsZWN0IFBSRUVNUFRJT05cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTk2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MzEuNDk1OTU3NTc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODg4OTc4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHlvdSdyZSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlYnVnZ2luZyBhIEJ1aWxkIFByZWVtcHRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIGBQUkVFTVBUX0JVSUxEYCBmbGFnIGlzIHNldC4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0LiBCdXQuLi4gd2hhdCdzICp0cmlnZ2VyaW5nKiB0aGF0IGZsYWc/IFdoYXQncyB0aGUgZGVjaXNpb24gcHJvY2VzcyB0aGF0J3MgbWFraW5nIHRoaXMgc2VsZWN0aW9uPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQuIEkga25vdyAqaXQncyogYmVlbiBzZWxlY3RlZCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBiZWVuIHNlbGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHZhcmlhYmxlIGJlaW5nIHNldCwgb3RoZXJ3aXNlIEkgY2FuJ3QgYmUgY29uZmlkZW50IGluIHRoZSBidWlsZCdzIGJlaGF2aW9yIG9yIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nIGl0J3MgKnRoZXJlKjsgSSBoYXZlIHRvIGtub3cgKndoeSogaXQncyB0aGVyZS4gTGV0J3MgZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGUgYW50ZWNlZGVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTozNC42ODQ4NjI4MzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTM2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBQUkVFTVBUX0JVSUxEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD01OT1jb25maWcgUFJFRU1QVFxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC02MS1cXHRkZXBlbmRzIG9uICFBUkNIX05PX1BSRUVNUFRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjYyOlxcdHNlbGVjdCBQUkVFTVBUX0JVSUxEIGlmICFQUkVFTVBUX0RZTkFNSUNcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTYzLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ9Nzg9Y29uZmlnIFBSRUVNUFRfTEFaWVxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC04MS1cXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6ODI6XFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtODMtXFx0aGVscFxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdD0xMjk9Y29uZmlnIFBSRUVNUFRfRFlOQU1JQ1xcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMzItXFx0c2VsZWN0IEpVTVBfTEFCRUwgaWYgSEFWRV9QUkVFTVBUX0RZTkFNSUNfS0VZXFxua2VybmVsL0tjb25maWcucHJlZW1wdDoxMzM6XFx0c2VsZWN0IFBSRUVNUFRfQlVJTERcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEzNC1cXHRkZWZhdWx0IHkgaWYgSEFWRV9QUkVFTVBUX0RZTkFNSUNfQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTozNC43NDcwMDczMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NTgyNzAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgcHJlZW1wdGlvbi4gVGhlIG9wdGlvbnMgYXJlIGBQUkVFTVBUYCwgYFBSRUVNUFRfRFlOQU1JQ2AsIG9yIGBQUkVFTVBUX1JUYCwgYW5kIGFueSBvZiB0aGVzZSBlbmFibGUgYWN0dWFsIGBQUkVFTVBUSU9OYC4gSXQgc2VlbXMgbG9naWNhbCB0byBzdGFydCBieSBzcGVjaWZ5aW5nIGBQUkVFTVBUYCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBCdXQgaGFuZyBvbi4uLmlzbid0IGBQUkVFTVBUSU9OYCB0aGUgYWN0dWFsIGNvbmZpZyB1c2VkIGluIHRoZSBgI2lmZGVmYD8gU28sIHNob3VsZCBJIGp1c3QgbGlzdCBgUFJFRU1QVElPTmAgZGlyZWN0bHk/IE5vLCB0aGF0J3Mgbm90IHVzZXItc2VsZWN0YWJsZSBkaXJlY3RseS4gQnV0IG1heWJlLCBqdXN0IG1heWJlLCB0aGUgc3l6a2FsbGVyIGNvbmZpZyBnZW5lcmF0aW9uIGNhbiBoYW5kbGUgaXQgaWYgSSBzcGVjaWZ5IGBQUkVFTVBUYC4gSSdsbCBnbyB3aXRoIGBQUkVFTVBUYCBmb3Igbm93IGFuZCBzZWUgd2hhdCBoYXBwZW5zLlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLiBJIGtub3cgQlBGIHRyYW1wb2xpbmVzIGFyZSBoZWF2aWx5IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgaW4gQlBGIHRyYWNpbmcuIFNvIHRoYXQgbWVhbnMgSSdtIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgZW5hYmxlZCBhcyB3ZWxsLiBKdXN0IHRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgbWFrZSBzdXJlIGl0J3MgY29tcGlsZWQgY29ycmVjdGx5LiBBbmQgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0LCBpZiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGV2ZW4gY29tcGlsZWQgY29uZGl0aW9uYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTozOS40OTI4NDAwNDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTEzMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjM5LjU1MTM3NDczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQwMzg4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEJQRiBKSVQgUmVhY2hhYmlsaXR5IHZpYSBTeXN0ZW0gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlciAoYEJQRl9KSVRgKSBpcyBkZWZpbml0ZWx5IGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBhbmQgaG93LiBNeSBpbml0aWFsIGxpbmUgb2YgaW52ZXN0aWdhdGlvbiB3aWxsIGJlIGZvY3VzZWQgb24gdGhlIHN0YW5kYXJkIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lLCBzcGVjaWZpY2FsbHkgd2hldGhlciB0aGVyZSdzIGEgZGlyZWN0IHBhdGggZnJvbSBzeXN0ZW0gY2FsbHMuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoYCBwYXRoIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGlzIGlzIGdvb2QgdG8ga25vdywgYW5kIGl0IGluZm9ybXMgdGhlIG5leHQgc2V0IG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8gYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NDIuODQ1NDIwOTI4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM1NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MzY4OT1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3OTUtXFx0XFx0ICogQWxsb3cgcmUtYXR0YWNoIGZvciBUUkFDSU5HIGFuZCBMU00gcHJvZ3JhbXMuIElmIGl0J3NcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzk2OlxcdFxcdCAqIGN1cnJlbnRseSBsaW5rZWQsIGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyB3aWxsIGZhaWwuXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5Ny1cXHRcXHQgKiBFWFQgcHJvZ3JhbXMgbmVlZCB0byBzcGVjaWZ5IHRndF9wcm9nX2ZkLCBzbyB0aGV5XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zODY5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM4NzA6XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLm5vZGUsIHRyLCB0Z3RfcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzg3MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MTY9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkzNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MzU6c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTM2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTc2OmludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3Ny1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODItXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5ODM6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk4NC1cXHR0cmFtcG9saW5lX3VubG9jayh0cik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMTA2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNDgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE0OTpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNTAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2NDE9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5MC1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5MTpcXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUsIG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTItXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjQyLjkwNTc5MDQ0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTEyOTE3MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBUcmFtcG9saW5lIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyBkaXJlY3RseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IHdoZW4gYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcywgd2hpY2ggbWVhbnMgaXQncyBhYnNvbHV0ZWx5IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuXG5IZXJlJ3MgbXkgZGlzdGlsbGVkIGZ1enppbmcgcGxhbjpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGEgaGlnaC1wcmlvcml0eSBhcmVhLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLiBUaGV5IGFyZSBjbGVhcmx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBiYXNlZCBvbiB0aGUgXCJub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnNcIiBndWlkYW5jZS4gV2hpbGUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIGl0J3Mgc3RhdGljLCBzbyBpdCdzIG5vdCB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBhbmQgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW1gLCBidXQgdGhvc2UgYXJlIGxlc3MgZGlyZWN0LlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gZW5hYmxlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZXhwb3NlIHRoZSByZWxldmFudCBjb2RlIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJJ2xsIGluY2x1ZGUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGFzIG9idmlvdXMgY2hvaWNlcy4gQW5kLCBzaW5jZSB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBwcmVlbXB0aW9uIGNvbmNlcm5zLCBJJ2xsIGRlZmluaXRlbHkgZW5hYmxlIGBQUkVFTVBUYCDigJMgY29uZmlybWVkIHRoYXQgaXQgY29ycmVjdGx5IHRyYW5zbGF0ZXMgdG8gYENPTkZJR19QUkVFTVBUSU9OYC5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUga2VybmVsIHBhdGNoIG1vZGlmaWVzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSB0cmFtcG9saW5lIGxvZ2ljLCBwYXJ0aWN1bGFybHkgdG8gaGFuZGxlIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyBhbGwgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGBicGZgIHN5c2NhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjUxLjQxODcxNTM5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDU0NDQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBSRUVNUFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3VubGlua19wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGlsZSB0aGUgdHJhbXBvbGluZSBpbWFnZSBpcyBhbGl2ZSwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbCB3aGVuIGF0dGFjaGluZy9kZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJFRU1QVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTo1MS41NzMyODM3MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjAwMTg0NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NTEuNTc0MjE5OTk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0MTk5MjQzMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGFycmF5IG9mIHBvaW50ZXJzIGFuZCBhIGNvdW50ZXIgdG8gYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgIHRvIGhvbGQgcmVmZXJlbmNlcyB0byBCUEYgcHJvZ3JhbXMgd2hlbiBgQ09ORklHX1BSRUVNUFRJT05gIGlzIGVuYWJsZWQuIFRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ld2x5IGFkZGVkIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcgKGluY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIGBicGZfcHJvZ2AgcmVmY291bnRzKSBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NTk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMzc2LDYgKzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0fTtcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRJT05cbitcdC8qIFByb2dyYW1zIGNhbGxlZCBmcm9tIHRoaXMgaW1hZ2UgbXVzdCBvdXRsaXZlIGRlZmVycmVkIGltYWdlIGZyZWVpbmcuICovXG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdO1xuK1x0aW50IG5yX3Byb2dzO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGJwZl90cmFtcG9saW5lIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDggKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcylcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaSwga2luZDtcbitcbitcdGZvciAoa2luZCA9IDA7IGtpbmQgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKylcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpKyspIHtcbitcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSB0bm9kZXNba2luZF0ubm9kZXNbaV0tXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuK1xuK1x0XHRcdGJwZl9wcm9nX2luYyhwcm9nKTtcbitcdFx0XHRpbS1cdTAwM2Vwcm9nc1tpbS1cdTAwM2Vucl9wcm9ncysrXSA9IHByb2c7XG4rXHRcdH1cbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGltLVx1MDAzZW5yX3Byb2dzOyBpKyspXG4rXHRcdGJwZl9wcm9nX3B1dChpbS1cdTAwM2Vwcm9nc1tpXSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbitcdGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pO1xuK1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuIFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VzaXplKTtcbiBcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKGltLVx1MDAzZXNpemUpO1xuQEAgLTc0MCw2ICs3NjgsOCBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoaW0sIHRub2Rlcyk7XG4rXG4gXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VpbWFnZSArIHNpemUsXG4gXHRcdFx0XHRcdCAgXHUwMDI2dHItXHUwMDNlZnVuYy5tb2RlbCwgdHItXHUwMDNlZmxhZ3MsIHRub2RlcyxcbiBcdFx0XHRcdFx0ICB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NTEuNTc0MjIyNzA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzgwOTA4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBJbWFnZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY291cGxlIG9mIGltcG9ydGFudCBhZGRpdGlvbnMgdG8gdGhlIGBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlYCwgc3BlY2lmaWNhbGx5IHVuZGVyIHRoZSBgQ09ORklHX1BSRUVNUFRJT05gIGNvbmRpdGlvbmFsLiBJIHNlZSBpdCdzIGFkZGluZyBhIGBwcm9nc2AgYXJyYXkgYW5kIGEgYG5yX3Byb2dzYCBpbnRlZ2VyLiBUaGF0IGBwcm9nc2AgYXJyYXkgaXMgcHJvYmFibHkgbWVhbnQgdG8gaG9sZCB0aGUgQlBGIHByb2dyYW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UsIGFuZCBgbnJfcHJvZ3NgIGlzIHRoZSBvYnZpb3VzIGNvdW50IG9mIHRob3NlIHByb2dyYW1zLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlIGNvbmNlcHR1YWxseS5cblxuTm93LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKClgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncygpYC4gVGhlc2UgYXJlIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIGZ1bmN0aW9uczsgYGdldGAgaW5jcmVtZW50cywgYHB1dGAgZGVjcmVtZW50cy4gQW5kIGl0IGxvb2tzIGxpa2UgYGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoKWAgaXMgcmVzcG9uc2libGUgZm9yIHN0b3JpbmcgdGhlIHByb2dyYW1zIGluIGBpbS1cdTAwM2Vwcm9nc2AuIFRoYXTigJlzIHRoZSBwYXR0ZXJuIEkgZXhwZWN0ZWQuIFNvLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGlzIGdvaW5nIHRvIGJlIHdoZXJlIHRoZSBwcm9ncmFtcyBhcmUgZWZmZWN0aXZlbHkgXCJib3Jyb3dlZFwiLiBUaGVuLCBgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncygpYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgaW4gYGJwZl90cmFtcF9pbWFnZV9mcmVlKClgLCB0byByZWxpbnF1aXNoIHRoZSBwcm9ncmFtcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIG5vdyBpcywgaXMgYGltLVx1MDAzZW5yX3Byb2dzYCBpbml0aWFsaXplZCBzb21ld2hlcmU/IEl0J3MgY3J1Y2lhbCB3ZSBrbm93IHRoaXMuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBjb3VudCBzdGFydHMgYXQgemVybywgb3Igd2UgY291bGQgaGF2ZSBhbGwgc29ydHMgb2Ygd2VpcmRuZXNzLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgaW1gIGlzIGFsbG9jYXRlZC4gSXMgaXQgaW4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpYCBvciBzb21ld2hlcmUgZWxzZT8gTGV0J3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZS4gVGhpcyBpcyBhbiBhcmVhIHdoZXJlIGEgc3VidGxlIGJ1ZyBjYW4gcmVhbGx5IGJpdGUgeW91LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NTYuNzEyMzI3MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDcyNjkyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wX2ltYWdlX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYxMD1zdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfcHV0KHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjU4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY1OTpzdGF0aWMgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqYnBmX3RyYW1wX2ltYWdlX2FsbG9jKHU2NCBrZXksIGludCBzaXplKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY2MC17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MDE9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjU6XFx0aW0gPSBicGZfdHJhbXBfaW1hZ2VfYWxsb2ModHItXFx1MDAzZWtleSwgc2l6ZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzY2LVxcdGlmIChJU19FUlIoaW0pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjU4LjY1OTYwMzYzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2ODQ4OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX3RyYW1wX2ltYWdlX2FsbG9jYCBmdW5jdGlvbi4gSSd2ZSBlbmNvdW50ZXJlZCBzaW1pbGFyIGFsbG9jYXRpb24gcm91dGluZXMgYmVmb3JlLCBidXQgdGhlIHNwZWNpZmljIGNvbnRleHQgaGVyZSBpcyBjcnVjaWFsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGtpbmQgb2YgaW1hZ2UgYXJlIHdlIGFsbG9jYXRpbmc/XCIgVGhpcyBmdW5jdGlvbidzIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lcyDigJMgd2hpY2ggaW1tZWRpYXRlbHkgaW1wbGllcyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbiBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIGtlcm5lbCBzcGFjZSwgd2hpY2ggYWx3YXlzIGRlbWFuZHMgYSBoaWdoIGxldmVsIG9mIHNjcnV0aW55LlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lbW9yeSBsYXlvdXQuIElzIHRoaXMgYWxsb2NhdGlvbiBwYWdlLWFsaWduZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggY29udGlndW91cyBwaHlzaWNhbCBwYWdlcz8gRG9lcyB0aGUgYWxsb2NhdG9yIGhhdmUgYW55IHNwZWNpZmljIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgY2FjaGUgY29oZXJlbmNlIGNvbnNpZGVyYXRpb25zIG9yIG1lbW9yeSBwcm90ZWN0aW9uIGZsYWdzPyBHaXZlbiBpdCBpcyByZWxhdGVkIHRvIHRyYW1wb2xpbmVzLCBpdCBpcyBsaWtlbHkgdGhlIGltYWdlIHdpbGwgYmUgaW5qZWN0ZWQgaW50byBrZXJuZWwgc3BhY2Ugd2l0aCBleGVjdXRpb24gcHJpdmlsZWdlcywgbWVhbmluZyB3ZSBtdXN0IGJlIGV4dHJlbWVseSBjYXJlZnVsIHRvIGF2b2lkIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGRldGFpbHMgbWF0dGVyLiBXaGF0J3MgdGhlIHNpemUgYXJndW1lbnQ/IElzIHRoZXJlIGFueSBtZWNoYW5pc20gZm9yIHNwZWNpZnlpbmcgbWVtb3J5IGFsaWdubWVudD8gSXMgdGhpcyBhIHNpbXBsZSBga21hbGxvY2Atc3R5bGUgYWxsb2NhdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBkZXNpZ25lZCBmb3IgQlBGLXNwZWNpZmljIG5lZWRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGZhaWx1cmU/IEhvdyBpcyB0aGlzIGFsbG9jYXRpb24gbGlua2VkIHRvIHRoZSBvdmVyYWxsIEJQRiBwcm9ncmFtIGxpZmVjeWNsZT9cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEFyZSB3ZSBwcm90ZWN0ZWQgYWdhaW5zdCBtZW1vcnkgZXhoYXVzdGlvbj8gSXMgdGhlIGFsbG9jYXRpb24gdGhyZWFkLXNhZmUsIHBhcnRpY3VsYXJseSBpZiBtdWx0aXBsZSBCUEYgcHJvZ3JhbXMgbWlnaHQgYmUgbG9hZGluZyBjb25jdXJyZW50bHk/IElzIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIGJlaW5nIHN0b3JlZCBhbG9uZ3NpZGUgdGhlIGltYWdlPyBEb2VzIHRoZSBmdW5jdGlvbiByZXR1cm4gYSByYXcgcG9pbnRlciwgb3IgYSBtb3JlIG9wYXF1ZSBoYW5kbGU/IEFuZCwgbW9zdCBjcml0aWNhbGx5LCBob3cgaXMgdGhpcyBtZW1vcnkgKmZyZWVkKj8gSXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGBicGZfdHJhbXBfaW1hZ2VfZnJlZWAgZnVuY3Rpb24sIGFuZCBkb2VzIGl0IGFkZHJlc3MgYWxsIHRoZSBwb3RlbnRpYWwgY2xlYW51cCBpc3N1ZXM/IE1lbW9yeSBsZWFrcyBoZXJlIHdvdWxkIGJlIGNhdGFzdHJvcGhpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAzOjAwOjAyLjc0NjQ1NzUxM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjU1OlxcdFxcdCAqL1xcbiA2NTY6XFx0XFx0Y2FsbF9yY3VfdGFza3NfdHJhY2UoXFx1MDAyNmltLVxcdTAwM2VyY3UsIF9fYnBmX3RyYW1wX2ltYWdlX3B1dF9yY3VfdGFza3MpO1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRzdGF0aWMgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqYnBmX3RyYW1wX2ltYWdlX2FsbG9jKHU2NCBrZXksIGludCBzaXplKVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW07XFxuIDY2MjpcXHRcXHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XFxuIDY2MzpcXHRcXHR2b2lkICppbWFnZTtcXG4gNjY0OlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiA2NjU6XFx0XFxuIDY2NjpcXHRcXHRpbSA9IGt6YWxsb2Nfb2JqKCppbSk7XFxuIDY2NzpcXHRcXHRpZiAoIWltKVxcbiA2Njg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdGVyciA9IGJwZl9qaXRfY2hhcmdlX21vZG1lbShzaXplKTtcXG4gNjcxOlxcdFxcdGlmIChlcnIpXFxuIDY3MjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2ltO1xcbiA2NzM6XFx0XFx0aW0tXFx1MDAzZXNpemUgPSBzaXplO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA2NzY6XFx0XFx0aW0tXFx1MDAzZWltYWdlID0gaW1hZ2UgPSBhcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHNpemUpO1xcbiA2Nzc6XFx0XFx0aWYgKCFpbWFnZSlcXG4gNjc4OlxcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlO1xcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHRlcnIgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNmltLVxcdTAwM2VwY3JlZiwgX19icGZfdHJhbXBfaW1hZ2VfcmVsZWFzZSwgMCwgR0ZQX0tFUk5FTCk7XFxuIDY4MTpcXHRcXHRpZiAoZXJyKVxcbiA2ODI6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9pbWFnZTtcXG4gNjgzOlxcdFxcbiA2ODQ6XFx0XFx0a3N5bSA9IFxcdTAwMjZpbS1cXHUwMDNla3N5bTtcXG4gNjg1OlxcdFxcdElOSVRfTElTVF9IRUFEX1JDVShcXHUwMDI2a3N5bS1cXHUwMDNlbG5vZGUpO1xcbiA2ODY6XFx0XFx0c25wcmludGYoa3N5bS1cXHUwMDNlbmFtZSwgS1NZTV9OQU1FX0xFTiwgXFxcImJwZl90cmFtcG9saW5lXyVsbHVcXFwiLCBrZXkpO1xcbiA2ODc6XFx0XFx0YnBmX2ltYWdlX2tzeW1faW5pdChpbWFnZSwgc2l6ZSwga3N5bSk7XFxuIDY4ODpcXHRcXHRicGZfaW1hZ2Vfa3N5bV9hZGQoa3N5bSk7XFxuIDY4OTpcXHRcXHRyZXR1cm4gaW07XFxuIDY5MDpcXHRcXG4gNjkxOlxcdG91dF9mcmVlX2ltYWdlOlxcbiA2OTI6XFx0XFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVxcdTAwM2VpbWFnZSwgaW0tXFx1MDAzZXNpemUpO1xcbiA2OTM6XFx0b3V0X3VuY2hhcmdlOlxcbiA2OTQ6XFx0XFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAzOjAwOjAyLjc0NjU5OTY5M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTczMzgxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgU2FmZXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgd2l0aCBgYnBmX3Byb2dgcywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwcmVlbXB0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBpbWAgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCwgaWYgSSdtIHJlbWVtYmVyaW5nIGNvcnJlY3RseSwgaXMganVzdCBhIG1hY3JvIGZvciBga3phbGxvY2AuIFRoaXMgemVyb2VzIG91dCBldmVyeXRoaW5nLCBzbyBgbnJfcHJvZ3NgIHN0YXJ0cyBhdCAwIGFuZCB0aGUgYHByb2dzYCBhcnJheSBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIGBicGZfcHJvZ2BzLCBhIGNvdW50ZXIsIGluY3JlbWVudGluZyB0aGUgcmVmY291bnRzIG9mIHRoZSBwcm9ncmFtcywgc3RvcmluZyB0aGVtIGluIHRoZSBhcnJheSwgYW5kIGRlY3JlbWVudGluZyB0aGVtIG9uIGZyZWUuIEl0J3MgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlIG5hc3R5IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBwcm9ibGVtcyB0aGF0IGNhbiBwb3AgdXAgd2hlbiBwcmVlbXB0aW9uIGlzIGVuYWJsZWQuXG5cbk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2FmZS4gVGhlcmUncyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2luZyB0byB1c2Vyc3BhY2UgaGVyZS4gQW5kIEkgY2FuJ3Qgc2VlIGFueSBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgdXNlZCBpbiBhIGNvbnRyb2wgZmxvdyBpc3N1ZSwgZWl0aGVyLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSBiZWNhdXNlIGl0IG1lYW5zIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBLTVNBTiBzZWVtcyB1bm5lY2Vzc2FyeSBoZXJlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBremFsbG9jX29iamAgbWFjcm8ganVzdCB0byBiZSAxMDAlIGNvbmZpZGVudCwgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSwgaXQncyBsb29raW5nIGxpa2UgYSBjbGVhbiwgd2VsbC1yZWFzb25lZCBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMzowMDowNy45MTk5ODU1MTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDc5MjkzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGt6YWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1MS0vKiBBbGwga3phbGxvYyBhbGlhc2VzIGZvciBrbWFsbG9jXyhvYmp8b2Jqc3xmbGV4KS4gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTUyOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1My1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NDojZGVmaW5lIGt6YWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1NS1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MjAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MjExOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEyLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDM6MDA6MTAuOTI3OTIzNzA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDU1MDc3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgaW50byB0aGlzLiBUaGUgZnVuY3Rpb24gYGt6YWxsb2Nfb2JqYCAqZGVmaW5pdGVseSogcmVsaWVzIG9uIGBremFsbG9jYC4gQW5kIHRoYXQncyBjcnVjaWFsLiBga3phbGxvY2AsIGJ5IGl0cyB2ZXJ5IG5hdHVyZSwgZ3VhcmFudGVlcyB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZCBvdXQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgdG8gYXZvaWQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcywgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbGV2ZXJhZ2VzIGBremFsbG9jYCBpbiB0aGlzIHdheSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCB0aGUgcHJvcG9zZWQgY2hhbmdlICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgY2FuIHJlbWFpbiBzZXQgdG8gYGZhbHNlYC4gVGhhdCBzZXR0bGVzIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDcsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDM6MDA6MTUuNzczNDM1OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow527xt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 02:37:39 +0000 UTC FinishedAt: 2026-08-20 03:00:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "PREEMPT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "PREEMPT" ], "series_id": "6d1f46b4-c7d8-4103-807e-24176131003c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_link_prog", "bpf_trampoline_unlink_prog" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UFJFRU1QVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzAxZmRmNDA0NDkxZDhmN2Y2ZTMwNGJjN2ZlNmU3NDZjYzM0YzI2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDAyOjU5OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3NzE5ZjY1Mjg0NDU2Li5iYWNiNmJjMmUyN2JkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTEzNzYsNiAmIzQzOzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0fTtcbiYjNDM7I2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4mIzQzO1x0LyogUHJvZ3JhbXMgY2FsbGVkIGZyb20gdGhpcyBpbWFnZSBtdXN0IG91dGxpdmUgZGVmZXJyZWQgaW1hZ2UgZnJlZWluZy4gKi9cbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdO1xuJiM0MztcdGludCBucl9wcm9ncztcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYuLjMzMzgzZDFkYzFlMDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC01MjksOCAmIzQzOzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3Moc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTlxuJiM0MztcdGludCBpLCBraW5kO1xuJiM0MztcbiYjNDM7XHRmb3IgKGtpbmQgPSAwOyBraW5kIFx1MDAzYyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOylcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gdG5vZGVzW2tpbmRdLm5vZGVzW2ldLVx1MDAzZWxpbmstXHUwMDNlcHJvZztcbiYjNDM7XG4mIzQzO1x0XHRcdGJwZl9wcm9nX2luYyhwcm9nKTtcbiYjNDM7XHRcdFx0aW0tXHUwMDNlcHJvZ3NbaW0tXHUwMDNlbnJfcHJvZ3MmIzQzOyYjNDM7XSA9IHByb2c7XG4mIzQzO1x0XHR9XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTlxuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbS1cdTAwM2Vucl9wcm9nczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRicGZfcHJvZ19wdXQoaW0tXHUwMDNlcHJvZ3NbaV0pO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbiB7XG4mIzQzO1x0YnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhpbSk7XG4mIzQzO1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuIFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VzaXplKTtcbiBcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKGltLVx1MDAzZXNpemUpO1xuQEAgLTc0MCw2ICYjNDM7NzY4LDggQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0YnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhpbSwgdG5vZGVzKTtcbiYjNDM7XG4gXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VpbWFnZSAmIzQzOyBzaXplLFxuIFx0XHRcdFx0XHQgIFx1MDAyNnRyLVx1MDAzZWZ1bmMubW9kZWwsIHRyLVx1MDAzZWZsYWdzLCB0bm9kZXMsXG4gXHRcdFx0XHRcdCAgdHItXHUwMDNlZnVuYy5hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGhvbGQgcmVmZXJlbmNlcyB0byBCUEYgcHJvZ3JhbXMgd2hpbGUgdGhlIHRyYW1wb2xpbmUgaW1hZ2UgaXMgYWxpdmUsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGluIHByZWVtcHRpYmxlIGtlcm5lbHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcvZGV0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDI6NTk6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3NzE5ZjY1Mjg0NDU2Li5iYWNiNmJjMmUyN2JkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTEzNzYsNiAmIzQzOzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7CiAJCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCX07CiYjNDM7I2lmZGVmIENPTkZJR19QUkVFTVBUSU9OCiYjNDM7CS8qIFByb2dyYW1zIGNhbGxlZCBmcm9tIHRoaXMgaW1hZ2UgbXVzdCBvdXRsaXZlIGRlZmVycmVkIGltYWdlIGZyZWVpbmcuICovCiYjNDM7CXN0cnVjdCBicGZfcHJvZyAqcHJvZ3NbQlBGX01BWF9UUkFNUF9MSU5LU107CiYjNDM7CWludCBucl9wcm9nczsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCBicGZfdHJhbXBvbGluZSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCmluZGV4IDFhNzIxZmM0YmVmNTYuLjMzMzgzZDFkYzFlMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCkBAIC01MjksOCAmIzQzOzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYQogCXJldHVybiB0bm9kZXM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTgomIzQzOwlpbnQgaSwga2luZDsKJiM0MzsKJiM0MzsJZm9yIChraW5kID0gMDsga2luZCAmbHQ7IEJQRl9UUkFNUF9NQVg7IGtpbmQmIzQzOyYjNDM7KQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSB0bm9kZXNba2luZF0ubm9kZXNbaV0tJmd0O2xpbmstJmd0O3Byb2c7CiYjNDM7CiYjNDM7CQkJYnBmX3Byb2dfaW5jKHByb2cpOwomIzQzOwkJCWltLSZndDtwcm9nc1tpbS0mZ3Q7bnJfcHJvZ3MmIzQzOyYjNDM7XSA9IHByb2c7CiYjNDM7CQl9CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3Moc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTgomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGltLSZndDtucl9wcm9nczsgaSYjNDM7JiM0MzspCiYjNDM7CQlicGZfcHJvZ19wdXQoaW0tJmd0O3Byb2dzW2ldKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSkKIHsKJiM0MzsJYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhpbSk7CiYjNDM7CiAJYnBmX2ltYWdlX2tzeW1fZGVsKCZhbXA7aW0tJmd0O2tzeW0pOwogCWFyY2hfZnJlZV9icGZfdHJhbXBvbGluZShpbS0mZ3Q7aW1hZ2UsIGltLSZndDtzaXplKTsKIAlicGZfaml0X3VuY2hhcmdlX21vZG1lbShpbS0mZ3Q7c2l6ZSk7CkBAIC03NDAsNiAmIzQzOzc2OCw4IEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0CiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKGltLCB0bm9kZXMpOwomIzQzOwogCWVyciA9IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgaW0tJmd0O2ltYWdlLCBpbS0mZ3Q7aW1hZ2UgJiM0Mzsgc2l6ZSwKIAkJCQkJICAmYW1wO3RyLSZndDtmdW5jLm1vZGVsLCB0ci0mZ3Q7ZmxhZ3MsIHRub2RlcywKIAkJCQkJICB0ci0mZ3Q7ZnVuYy5hZGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgSW1hZ2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXTigJlzIGZvY3VzZWQgb24gQlBGIHRyYW1wb2xpbmVzLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgQlBGIHByb2dyYW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2VzIGFyZSBoYW5kbGVkLiBUaGUgYWRkaXRpb24gb2YgYHByb2dzYCBhbmQgYG5yX3Byb2dzYCB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdW5kZXIgYENPTkZJR19QUkVFTVBUSU9OYCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgZml4OyBJIGV4cGVjdCB0byBzZWUgcmVmZXJlbmNlIGNvdW50aW5nIGludHJvZHVjZWQgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBvZiBCUEYgcHJvZ3JhbXMgY29ycmVjdGx5LCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4KClRoZSBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9nc2AgYW5kIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzYCBmdW5jdGlvbnMgY29uZmlybSBteSBoeXBvdGhlc2lzLCBzZXJ2aW5nIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRzLiBUaGUgY2FsbHMgd2l0aGluIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX2ZyZWVgIGFyZSBleGFjdGx5IHdoZXJlIEnigJlkIGV4cGVjdCB0aGVtOiB0aGUgdXBkYXRlIGZ1bmN0aW9uIG5lZWRzIHRvIGtlZXAgdGhlIHByb2dyYW1zIGFyb3VuZCBkdXJpbmcgdGhlIHVwZGF0ZSBwcm9jZXNzLCBhbmQgd2hlbiBmcmVlaW5nIHRoZSBpbWFnZSwgd2Ugb2J2aW91c2x5IHdhbnQgdG8gZnJlZSB0aGUgcHJvZ3JhbXMgb25seSBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyB0aGVtLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBCUEYgdHJhbXBvbGluZSBsaWZldGltZSwgZXNwZWNpYWxseSBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzIHdoZXJlIGRlZmVycmVkIGZyZWVpbmcgY291bGQgYmUgYSBwcm9ibGVtLiBUaGlzIGlzIHNtYXJ0LgoKSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgYW5kIGBicGZfdHJhbXBfaW1hZ2VfZnJlZWAgYXJlIHJlYWNoYWJsZS4gVGhleSBhcmUgdGhlIGtleSB0byB2YWxpZGF0aW5nIHRoZSBlbnRpcmUgbG9naWMuIEFjdHVhbGx5LCBJIHNob3VsZCBsaXN0IHRob3NlIHR3byBmdW5jdGlvbnMgYXMgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OywgYXMgdGhhdCBzZWVtcyB0byBiZSB3aGVyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gcGxheS4gT3IgbWF5YmUgdGhlIG5ldyBzdGF0aWMgZnVuY3Rpb25zIGBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzYCBhbmQgYGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3NgLi4uIHdhaXQsIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGlzIHN0YXRpYz8gTm8sIHdhaXQgYSBtaW51dGUsIGxldCBtZSBkb3VibGUtY2hlY2suIEkgdGhvdWdodCBzbywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIEkgaGF2ZSB0byBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OS0jaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTYtXHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NzpcdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzLVx0XHRpZiAodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjQ6XHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NS1cdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Mz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MTAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0MTE6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVx0XHRcdFx0XHR2b2lkICpvbGRfYWRkciwgdm9pZCAqbmV3X2FkZHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDMyPXN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVx0ZWxzZVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQwOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCBvcmlnX2ZsYWdzLCBvbGRfYWRkciwgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDUwPXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ2MDpcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXHRcdFx0XHRcdFx0ICAgbmV3X2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDkxOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCAwLCBOVUxMLCBuZXdfYWRkcik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTItXHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjU5PXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICpicGZfdHJhbXBfaW1hZ2VfYWxsb2ModTY0IGtleSwgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzAwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzAxOnN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkzNT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjktXHRcdHJldHVybiBlcnI7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NzA6XHRlcnIgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIHRydWUgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sIG9wcywgZGF0YSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4OD1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDgtXHRicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyh0ciwgbm9kZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDA5Olx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgLiBJdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCBvYnNlcnZhdGlvbi4gTm93LCBzaW5jZSBpdCYjMzk7cyBgc3RhdGljYCwgbXkgbmV4dCB0aG91Z2h0IGlzIGFsd2F5cyAmIzM0O09rYXksIHdoYXQgYWJvdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHRyYW1wb2xpbmUgbWVjaGFuaXNtPyYjMzQ7IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmthZ2VzIGFuZCB1bi1saW5rYWdlcy4gQXJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIG9yIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AgdGhlIGtleSBjb21wYW5pb25zIGhlcmU/IFRoZXNlIG11c3QgYmUgdGhlIG9uZXMgdGhhdCwgYXQgYSBoaWdoIGxldmVsLCBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEJQRiBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhbXBvbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYHVwZGF0ZWAgYW5kIHRob3NlIGxpbmsvdW5saW5rIGZ1bmN0aW9ucyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0IGNhbGxzIHdoYXQsIHdoZXJlLCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgdXAgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdHJhbXBvbGluZSwgYW5kIHdoYXQga2luZCBvZiBlcnJvciBjb25kaXRpb25zIHRoZXkgaGFuZGxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkxNj1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkzNC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkzNTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkzNi1cdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTc1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTc2OmludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTc3LVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODItXHR0cmFtcG9saW5lX2xvY2sodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTgzOlx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODQtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEwNj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE0OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExNDk6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZzaGltX2xpbmstXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE1MC1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTY0MT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5MC1cdFx0ZGF0YS1cdTAwM2VlbnRyeSA9IFx1MDAyNm1ub2RlLVx1MDAzZWVudHJ5O1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5MTpcdFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTItXHRcdFx0XHRcdFx0IFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggQlBGOgoKKipNeSBCUEYgQnJhaW5zdG9ybSoqCgpSaWdodCwgc28gYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AgYXJlIGNsZWFybHkgKm91dCB0aGVyZSosIHZpc2libGUsIG5vdCBoaWRkZW4gYmVoaW5kIHN0YXRpYyBkZWNsYXJhdGlvbnMuIFRoYXTigJlzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYC4gVW5kZXJzdGFuZGluZyBob3cgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcyBpcyBsaWtlbHkgdG8gaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCB0cmFtcG9saW5lIG1lY2hhbmlzbS4gVGltZSB0byBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgbWFrZXMgaXQgdGljay4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NzY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg3LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTg4OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODktXHRcdFx0XHRcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxMS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTI6LyogYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coKSBzaG91bGQgbmV2ZXIgZmFpbC4gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTM6aW50IGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTQtXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxOS1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDIwOlx0ZXJyID0gX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMjEtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyNj1zdGF0aWMgdm9pZCBicGZfc2hpbV90cmFtcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDM1Olx0V0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNnNoaW1fbGluay1cdTAwM2VsaW5rLm5vZGUsIHNoaW1fbGluay1cdTAwM2V0cmFtcG9saW5lLCBOVUxMKSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDM2LVx0YnBmX3RyYW1wb2xpbmVfcHV0KHNoaW1fbGluay1cdTAwM2V0cmFtcG9saW5lKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzQxPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzUxLVx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTI6XHRcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzUzLVx0XHRcdFx0XHROVUxMLCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBUcmFtcG9saW5lIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHksIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgIGp1bXAgb3V0IGFzIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gb3VyIEZvY3VzU3ltYm9sIGxpc3QuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIGxpbmtpbmcgYW5kIHVubGlua2luZyBCUEYgcHJvZ3JhbXMgd2l0aGluIHRoZSB0cmFtcG9saW5lIHN5c3RlbSwgc28gdGhleSBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuCgpBbmQgdGhlIHBhdGNoIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBhbiBgI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OYCBjaGVjay4gQWxyaWdodCwgc28gd2UgaGF2ZSBhIGRlcGVuZGVuY3kgb24gYFBSRUVNUFRJT05gLiBJdCYjMzk7cyBhIGtleSByZXF1aXJlbWVudC4gTm93LCB3YWl0IGEgbWludXRlLCBgQ09ORklHX1BSRUVNUFRJT05gIGlzLCBtb3JlIG9yIGxlc3MsIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBldmVuIHNvLCBpdCYjMzk7cyBzb21ldGhpbmcgd2Ugc2hvdWxkIGV4cGxpY2l0bHkgaW5jbHVkZS4gSG9sZCBvbuKApiBgUFJFRU1QVElPTmAgaXNuJiMzOTt0IGFsd2F5cyBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGU7IGl0JiMzOTtzIG9mdGVuIGEgY29uc2VxdWVuY2Ugb2Ygc2V0dGluZyBgUFJFRU1QVGAgb3IgYFBSRUVNUFRfUlRgLiBCdXQgYFBSRUVNUFRJT05gICppcyogZGVmaW5lZCBieSB0aG9zZSwgc28gdGhleSBhcmUgdGhlIHJlYWwgY29uZmlnIG9wdGlvbnMsIGFuZCB0aGF0IHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBJ4oCZbGwgbWFrZSBhIG5vdGUgdG8gZXhhbWluZSBga2VybmVsL0tjb25maWcucHJlZW1wdGAgdG8gY29uZmlybSB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTEyMj1jb25maWcgUFJFRU1QVF9DT1VOVFxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTI0LVxua2VybmVsL0tjb25maWcucHJlZW1wdDoxMjU6Y29uZmlnIFBSRUVNUFRJT05cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTI2LSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJhdmVsaW5nIHRoZSBNeXN0ZXJ5IG9mIFBSRUVNUFRJT04qKgoKT2theSwgc28gYFBSRUVNUFRJT05gIGlzIG9uZSBvZiB0aG9zZSBiZWhpbmQtdGhlLXNjZW5lcyBib29sZWFucywgaXNuJiMzOTt0IGl0PyBTb21ldGhpbmcgdGhhdCYjMzk7cyBhY3RpdmF0ZWQsIG9yLCB3ZWxsLCAqcHJlZW1wdGVkKiBieSBlaXRoZXIgYFBSRUVNUFRgIG9yIGBQUkVFTVBUX1JUYC4gUmlnaHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHdoYXQgZXhhY3RseSB0cmlnZ2VycyB0aGlzIGZsYWcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYFBSRUVNUFRJT05gIHRvIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqYWN0dWFsbHkqIHNlbGVjdGluZyBpdC4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBwdWxsZWQgaW4gZnJvbT8gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBQUkVFTVBUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTk9Y29uZmlnIFBSRUVNUFRfQlVJTERcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTAtXHRib29sXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjExOlx0c2VsZWN0IFBSRUVNUFRJT05cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTItXHRzZWxlY3QgVU5JTkxJTkVfU1BJTl9VTkxPQ0sgaWYgIUFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdD05Mj1jb25maWcgUFJFRU1QVF9SVFxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTQtXHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgQVJDSF9TVVBQT1JUU19SVCBcdTAwMjZcdTAwMjYgIUNPTVBJTEVfVEVTVFxua2VybmVsL0tjb25maWcucHJlZW1wdDo5NTpcdHNlbGVjdCBQUkVFTVBUSU9OXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTk2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB5b3UmIzM5O3JlIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRlYnVnZ2luZyBhIEJ1aWxkIFByZWVtcHRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtIGFuZCB0aGUgYFBSRUVNUFRfQlVJTERgIGZsYWcgaXMgc2V0LiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdC4gQnV0Li4uIHdoYXQmIzM5O3MgKnRyaWdnZXJpbmcqIHRoYXQgZmxhZz8gV2hhdCYjMzk7cyB0aGUgZGVjaXNpb24gcHJvY2VzcyB0aGF0JiMzOTtzIG1ha2luZyB0aGlzIHNlbGVjdGlvbj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50LiBJIGtub3cgKml0JiMzOTtzKiBiZWVuIHNlbGVjdGVkIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBiZWVuIHNlbGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHZhcmlhYmxlIGJlaW5nIHNldCwgb3RoZXJ3aXNlIEkgY2FuJiMzOTt0IGJlIGNvbmZpZGVudCBpbiB0aGUgYnVpbGQmIzM5O3MgYmVoYXZpb3Igb3IgdHJvdWJsZXNob290IGFueSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nIGl0JiMzOTtzICp0aGVyZSo7IEkgaGF2ZSB0byBrbm93ICp3aHkqIGl0JiMzOTtzIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGUgYW50ZWNlZGVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBQUkVFTVBUX0JVSUxEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTU5PWNvbmZpZyBQUkVFTVBUXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC02MS1cdGRlcGVuZHMgb24gIUFSQ0hfTk9fUFJFRU1QVFxua2VybmVsL0tjb25maWcucHJlZW1wdDo2MjpcdHNlbGVjdCBQUkVFTVBUX0JVSUxEIGlmICFQUkVFTVBUX0RZTkFNSUNcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtNjMtXHRoZWxwXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdD03OD1jb25maWcgUFJFRU1QVF9MQVpZXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC04MS1cdGRlcGVuZHMgb24gQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjgyOlx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xua2VybmVsL0tjb25maWcucHJlZW1wdC04My1cdGhlbHBcbi0tXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTEyOT1jb25maWcgUFJFRU1QVF9EWU5BTUlDXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMzItXHRzZWxlY3QgSlVNUF9MQUJFTCBpZiBIQVZFX1BSRUVNUFRfRFlOQU1JQ19LRVlcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTMzOlx0c2VsZWN0IFBSRUVNUFRfQlVJTERcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTM0LVx0ZGVmYXVsdCB5IGlmIEhBVkVfUFJFRU1QVF9EWU5BTUlDX0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwcmVlbXB0aW9uLiBUaGUgb3B0aW9ucyBhcmUgYFBSRUVNUFRgLCBgUFJFRU1QVF9EWU5BTUlDYCwgb3IgYFBSRUVNUFRfUlRgLCBhbmQgYW55IG9mIHRoZXNlIGVuYWJsZSBhY3R1YWwgYFBSRUVNUFRJT05gLiBJdCBzZWVtcyBsb2dpY2FsIHRvIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgYFBSRUVNUFRgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCBoYW5nIG9uLi4uaXNuJiMzOTt0IGBQUkVFTVBUSU9OYCB0aGUgYWN0dWFsIGNvbmZpZyB1c2VkIGluIHRoZSBgI2lmZGVmYD8gU28sIHNob3VsZCBJIGp1c3QgbGlzdCBgUFJFRU1QVElPTmAgZGlyZWN0bHk/IE5vLCB0aGF0JiMzOTtzIG5vdCB1c2VyLXNlbGVjdGFibGUgZGlyZWN0bHkuIEJ1dCBtYXliZSwganVzdCBtYXliZSwgdGhlIHN5emthbGxlciBjb25maWcgZ2VuZXJhdGlvbiBjYW4gaGFuZGxlIGl0IGlmIEkgc3BlY2lmeSBgUFJFRU1QVGAuIEkmIzM5O2xsIGdvIHdpdGggYFBSRUVNUFRgIGZvciBub3cgYW5kIHNlZSB3aGF0IGhhcHBlbnMuCgpOb3csIHNoaWZ0aW5nIGdlYXJzLiBJIGtub3cgQlBGIHRyYW1wb2xpbmVzIGFyZSBoZWF2aWx5IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgaW4gQlBGIHRyYWNpbmcuIFNvIHRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAgYXJlIGVuYWJsZWQgYXMgd2VsbC4gSnVzdCB0byBiZSBjZXJ0YWluLCBJIHNob3VsZCByZWFsbHkgY2hlY2sgb3V0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBjb21waWxlZCBjb3JyZWN0bHkuIEFuZCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQsIGlmIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgZXZlbiBjb21waWxlZCBjb25kaXRpb25hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFtcG9saW5lLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgQlBGIEpJVCBSZWFjaGFiaWxpdHkgdmlhIFN5c3RlbSBDYWxscyoqCgpBbHJpZ2h0LCBzbyB0aGUgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlciAoYEJQRl9KSVRgKSBpcyBkZWZpbml0ZWx5IGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSByZWFjaGFibGUgYW5kIGhvdy4gTXkgaW5pdGlhbCBsaW5lIG9mIGludmVzdGlnYXRpb24gd2lsbCBiZSBmb2N1c2VkIG9uIHRoZSBzdGFuZGFyZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBkaXJlY3QgcGF0aCBmcm9tIHN5c3RlbSBjYWxscy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgIHBhdGggb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgaXMgZ29vZCB0byBrbm93LCBhbmQgaXQgaW5mb3JtcyB0aGUgbmV4dCBzZXQgb2YgcXVlc3Rpb25zIEkgbmVlZCB0byBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM2ODk9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5NS1cdFx0ICogQWxsb3cgcmUtYXR0YWNoIGZvciBUUkFDSU5HIGFuZCBMU00gcHJvZ3JhbXMuIElmIGl0JiMzOTtzXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzk2Olx0XHQgKiBjdXJyZW50bHkgbGlua2VkLCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2cgd2lsbCBmYWlsLlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5Ny1cdFx0ICogRVhUIHByb2dyYW1zIG5lZWQgdG8gc3BlY2lmeSB0Z3RfcHJvZ19mZCwgc28gdGhleVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4NjktXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozODcwOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNmxpbmstXHUwMDNlbGluay5ub2RlLCB0ciwgdGd0X3Byb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzg3MS1cdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MTY9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MzU6c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MzYtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3NS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk3NjppbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3Ny1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTgyLVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk4MzpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg0LVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMDY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNDgtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTQ5Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNTAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2NDE9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTAtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTE6XHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkyLVx0XHRcdFx0XHRcdCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTUKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBUcmFtcG9saW5lIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgd2hlbiBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhYnNvbHV0ZWx5IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LgoKSGVyZSYjMzk7cyBteSBkaXN0aWxsZWQgZnV6emluZyBwbGFuOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGEgaGlnaC1wcmlvcml0eSBhcmVhLgoqICAgKipGb2N1c1N5bWJvbHM6KiogSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLiBUaGV5IGFyZSBjbGVhcmx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBiYXNlZCBvbiB0aGUgJiMzNDtub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMmIzM0OyBndWlkYW5jZS4gV2hpbGUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LiBJIGNvbnNpZGVyZWQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAsIGJ1dCB0aG9zZSBhcmUgbGVzcyBkaXJlY3QuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBuZWVkIHRvIGVuYWJsZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGV4cG9zZSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgaW5jbHVkZSBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXMgb2J2aW91cyBjaG9pY2VzLiBBbmQsIHNpbmNlIHRoZSBwYXRjaCBkZWFscyB3aXRoIHByZWVtcHRpb24gY29uY2VybnMsIEkmIzM5O2xsIGRlZmluaXRlbHkgZW5hYmxlIGBQUkVFTVBUYCDigJMgY29uZmlybWVkIHRoYXQgaXQgY29ycmVjdGx5IHRyYW5zbGF0ZXMgdG8gYENPTkZJR19QUkVFTVBUSU9OYC4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBrZXJuZWwgcGF0Y2ggbW9kaWZpZXMgaG93IEJQRiBwcm9ncmFtcyBhcmUgcmVmZXJlbmNlZCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbG9naWMsIHBhcnRpY3VsYXJseSB0byBoYW5kbGUgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIGFsbCB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UFJFRU1QVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BSRUVNUFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9saW5rX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGlsZSB0aGUgdHJhbXBvbGluZSBpbWFnZSBpcyBhbGl2ZSwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbCB3aGVuIGF0dGFjaGluZy9kZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGFycmF5IG9mIHBvaW50ZXJzIGFuZCBhIGNvdW50ZXIgdG8gYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgIHRvIGhvbGQgcmVmZXJlbmNlcyB0byBCUEYgcHJvZ3JhbXMgd2hlbiBgQ09ORklHX1BSRUVNUFRJT05gIGlzIGVuYWJsZWQuIFRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ld2x5IGFkZGVkIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcgKGluY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIGBicGZfcHJvZ2AgcmVmY291bnRzKSBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzAxZmRmNDA0NDkxZDhmN2Y2ZTMwNGJjN2ZlNmU3NDZjYzM0YzI2YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDAyOjU5OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oCkBAIC0xMzc2LDYgJiM0MzsxMzc2LDExIEBAIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgewogCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAl9OwomIzQzOyNpZmRlZiBDT05GSUdfUFJFRU1QVElPTgomIzQzOwkvKiBQcm9ncmFtcyBjYWxsZWQgZnJvbSB0aGlzIGltYWdlIG11c3Qgb3V0bGl2ZSBkZWZlcnJlZCBpbWFnZSBmcmVlaW5nLiAqLwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdOwomIzQzOwlpbnQgbnJfcHJvZ3M7CiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtNTI5LDggJiM0Mzs1MjksMzYgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2EKIAlyZXR1cm4gdG5vZGVzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRJT04KJiM0MzsJaW50IGksIGtpbmQ7CiYjNDM7CiYjNDM7CWZvciAoa2luZCA9IDA7IGtpbmQgJmx0OyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOykKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB0bm9kZXNba2luZF0ubnJfbm9kZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IGJwZl9wcm9nICpwcm9nID0gdG5vZGVzW2tpbmRdLm5vZGVzW2ldLSZndDtsaW5rLSZndDtwcm9nOwomIzQzOwomIzQzOwkJCWJwZl9wcm9nX2luYyhwcm9nKTsKJiM0MzsJCQlpbS0mZ3Q7cHJvZ3NbaW0tJmd0O25yX3Byb2dzJiM0MzsmIzQzO10gPSBwcm9nOwomIzQzOwkJfQomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRJT04KJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpbS0mZ3Q7bnJfcHJvZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJYnBmX3Byb2dfcHV0KGltLSZndDtwcm9nc1tpXSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pCiB7CiYjNDM7CWJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pOwomIzQzOwogCWJwZl9pbWFnZV9rc3ltX2RlbCgmYW1wO2ltLSZndDtrc3ltKTsKIAlhcmNoX2ZyZWVfYnBmX3RyYW1wb2xpbmUoaW0tJmd0O2ltYWdlLCBpbS0mZ3Q7c2l6ZSk7CiAJYnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oaW0tJmd0O3NpemUpOwpAQCAtNzQwLDYgJiM0Mzs3NjgsOCBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhpbSwgdG5vZGVzKTsKJiM0MzsKIAllcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLSZndDtpbWFnZSwgaW0tJmd0O2ltYWdlICYjNDM7IHNpemUsCiAJCQkJCSAgJmFtcDt0ci0mZ3Q7ZnVuYy5tb2RlbCwgdHItJmd0O2ZsYWdzLCB0bm9kZXMsCiAJCQkJCSAgdHItJmd0O2Z1bmMuYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgSW1hZ2UgU3RydWN0dXJlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBjb3VwbGUgb2YgaW1wb3J0YW50IGFkZGl0aW9ucyB0byB0aGUgYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBDT05GSUdfUFJFRU1QVElPTmAgY29uZGl0aW9uYWwuIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIGBwcm9nc2AgYXJyYXkgYW5kIGEgYG5yX3Byb2dzYCBpbnRlZ2VyLiBUaGF0IGBwcm9nc2AgYXJyYXkgaXMgcHJvYmFibHkgbWVhbnQgdG8gaG9sZCB0aGUgQlBGIHByb2dyYW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UsIGFuZCBgbnJfcHJvZ3NgIGlzIHRoZSBvYnZpb3VzIGNvdW50IG9mIHRob3NlIHByb2dyYW1zLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlIGNvbmNlcHR1YWxseS4KCk5vdywgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncygpYCBhbmQgYGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoKWAuIFRoZXNlIGFyZSBjbGFzc2ljIHJlZmVyZW5jZSBjb3VudGluZyBmdW5jdGlvbnM7IGBnZXRgIGluY3JlbWVudHMsIGBwdXRgIGRlY3JlbWVudHMuIEFuZCBpdCBsb29rcyBsaWtlIGBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKClgIGlzIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIHRoZSBwcm9ncmFtcyBpbiBgaW0tJmd0O3Byb2dzYC4gVGhhdOKAmXMgdGhlIHBhdHRlcm4gSSBleHBlY3RlZC4gU28sIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgaXMgZ29pbmcgdG8gYmUgd2hlcmUgdGhlIHByb2dyYW1zIGFyZSBlZmZlY3RpdmVseSAmIzM0O2JvcnJvd2VkJiMzNDsuIFRoZW4sIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzKClgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBpbiBgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoKWAsIHRvIHJlbGlucXVpc2ggdGhlIHByb2dyYW1zLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIG5vdyBpcywgaXMgYGltLSZndDtucl9wcm9nc2AgaW5pdGlhbGl6ZWQgc29tZXdoZXJlPyBJdCYjMzk7cyBjcnVjaWFsIHdlIGtub3cgdGhpcy4gV2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvdW50IHN0YXJ0cyBhdCB6ZXJvLCBvciB3ZSBjb3VsZCBoYXZlIGFsbCBzb3J0cyBvZiB3ZWlyZG5lc3MuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBpbWAgaXMgYWxsb2NhdGVkLiBJcyBpdCBpbiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIG9yIHNvbWV3aGVyZSBlbHNlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZS4gVGhpcyBpcyBhbiBhcmVhIHdoZXJlIGEgc3VidGxlIGJ1ZyBjYW4gcmVhbGx5IGJpdGUgeW91LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBfaW1hZ2VfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjEwPXN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9wdXQoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjU4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjU5OnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICpicGZfdHJhbXBfaW1hZ2VfYWxsb2ModTY0IGtleSwgaW50IHNpemUpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02NjAte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcwMT1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2NC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2NTpcdGltID0gYnBmX3RyYW1wX2ltYWdlX2FsbG9jKHRyLVx1MDAzZWtleSwgc2l6ZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjYtXHRpZiAoSVNfRVJSKGltKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnBmX3RyYW1wX2ltYWdlX2FsbG9jYCBmdW5jdGlvbi4gSSYjMzk7dmUgZW5jb3VudGVyZWQgc2ltaWxhciBhbGxvY2F0aW9uIHJvdXRpbmVzIGJlZm9yZSwgYnV0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGhlcmUgaXMgY3J1Y2lhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBraW5kIG9mIGltYWdlIGFyZSB3ZSBhbGxvY2F0aW5nPyYjMzQ7IFRoaXMgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lcyDigJMgd2hpY2ggaW1tZWRpYXRlbHkgaW1wbGllcyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbiBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIGtlcm5lbCBzcGFjZSwgd2hpY2ggYWx3YXlzIGRlbWFuZHMgYSBoaWdoIGxldmVsIG9mIHNjcnV0aW55LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IGxheW91dC4gSXMgdGhpcyBhbGxvY2F0aW9uIHBhZ2UtYWxpZ25lZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjb250aWd1b3VzIHBoeXNpY2FsIHBhZ2VzPyBEb2VzIHRoZSBhbGxvY2F0b3IgaGF2ZSBhbnkgc3BlY2lmaWMgYXR0cmlidXRlcywgc3VjaCBhcyBjYWNoZSBjb2hlcmVuY2UgY29uc2lkZXJhdGlvbnMgb3IgbWVtb3J5IHByb3RlY3Rpb24gZmxhZ3M/IEdpdmVuIGl0IGlzIHJlbGF0ZWQgdG8gdHJhbXBvbGluZXMsIGl0IGlzIGxpa2VseSB0aGUgaW1hZ2Ugd2lsbCBiZSBpbmplY3RlZCBpbnRvIGtlcm5lbCBzcGFjZSB3aXRoIGV4ZWN1dGlvbiBwcml2aWxlZ2VzLCBtZWFuaW5nIHdlIG11c3QgYmUgZXh0cmVtZWx5IGNhcmVmdWwgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGRldGFpbHMgbWF0dGVyLiBXaGF0JiMzOTtzIHRoZSBzaXplIGFyZ3VtZW50PyBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBzcGVjaWZ5aW5nIG1lbW9yeSBhbGlnbm1lbnQ/IElzIHRoaXMgYSBzaW1wbGUgYGttYWxsb2NgLXN0eWxlIGFsbG9jYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgZGVzaWduZWQgZm9yIEJQRi1zcGVjaWZpYyBuZWVkcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBmYWlsdXJlPyBIb3cgaXMgdGhpcyBhbGxvY2F0aW9uIGxpbmtlZCB0byB0aGUgb3ZlcmFsbCBCUEYgcHJvZ3JhbSBsaWZlY3ljbGU/CgpJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEFyZSB3ZSBwcm90ZWN0ZWQgYWdhaW5zdCBtZW1vcnkgZXhoYXVzdGlvbj8gSXMgdGhlIGFsbG9jYXRpb24gdGhyZWFkLXNhZmUsIHBhcnRpY3VsYXJseSBpZiBtdWx0aXBsZSBCUEYgcHJvZ3JhbXMgbWlnaHQgYmUgbG9hZGluZyBjb25jdXJyZW50bHk/IElzIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIGJlaW5nIHN0b3JlZCBhbG9uZ3NpZGUgdGhlIGltYWdlPyBEb2VzIHRoZSBmdW5jdGlvbiByZXR1cm4gYSByYXcgcG9pbnRlciwgb3IgYSBtb3JlIG9wYXF1ZSBoYW5kbGU/IEFuZCwgbW9zdCBjcml0aWNhbGx5LCBob3cgaXMgdGhpcyBtZW1vcnkgKmZyZWVkKj8gSXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGBicGZfdHJhbXBfaW1hZ2VfZnJlZWAgZnVuY3Rpb24sIGFuZCBkb2VzIGl0IGFkZHJlc3MgYWxsIHRoZSBwb3RlbnRpYWwgY2xlYW51cCBpc3N1ZXM/IE1lbW9yeSBsZWFrcyBoZXJlIHdvdWxkIGJlIGNhdGFzdHJvcGhpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjU1Olx0XHQgKi9cbiA2NTY6XHRcdGNhbGxfcmN1X3Rhc2tzX3RyYWNlKFx1MDAyNmltLVx1MDAzZXJjdSwgX19icGZfdHJhbXBfaW1hZ2VfcHV0X3JjdV90YXNrcyk7XG4gNjU3Olx0fVxuIDY1ODpcdFxuIDY1OTpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICpicGZfdHJhbXBfaW1hZ2VfYWxsb2ModTY0IGtleSwgaW50IHNpemUpXG4gNjYwOlx0e1xuIDY2MTpcdFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW07XG4gNjYyOlx0XHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XG4gNjYzOlx0XHR2b2lkICppbWFnZTtcbiA2NjQ6XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuIDY2NTpcdFxuIDY2NjpcdFx0aW0gPSBremFsbG9jX29iaigqaW0pO1xuIDY2NzpcdFx0aWYgKCFpbSlcbiA2Njg6XHRcdFx0Z290byBvdXQ7XG4gNjY5Olx0XG4gNjcwOlx0XHRlcnIgPSBicGZfaml0X2NoYXJnZV9tb2RtZW0oc2l6ZSk7XG4gNjcxOlx0XHRpZiAoZXJyKVxuIDY3MjpcdFx0XHRnb3RvIG91dF9mcmVlX2ltO1xuIDY3MzpcdFx0aW0tXHUwMDNlc2l6ZSA9IHNpemU7XG4gNjc0Olx0XG4gNjc1Olx0XHRlcnIgPSAtRU5PTUVNO1xuIDY3NjpcdFx0aW0tXHUwMDNlaW1hZ2UgPSBpbWFnZSA9IGFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUoc2l6ZSk7XG4gNjc3Olx0XHRpZiAoIWltYWdlKVxuIDY3ODpcdFx0XHRnb3RvIG91dF91bmNoYXJnZTtcbiA2Nzk6XHRcbiA2ODA6XHRcdGVyciA9IHBlcmNwdV9yZWZfaW5pdChcdTAwMjZpbS1cdTAwM2VwY3JlZiwgX19icGZfdHJhbXBfaW1hZ2VfcmVsZWFzZSwgMCwgR0ZQX0tFUk5FTCk7XG4gNjgxOlx0XHRpZiAoZXJyKVxuIDY4MjpcdFx0XHRnb3RvIG91dF9mcmVlX2ltYWdlO1xuIDY4MzpcdFxuIDY4NDpcdFx0a3N5bSA9IFx1MDAyNmltLVx1MDAzZWtzeW07XG4gNjg1Olx0XHRJTklUX0xJU1RfSEVBRF9SQ1UoXHUwMDI2a3N5bS1cdTAwM2Vsbm9kZSk7XG4gNjg2Olx0XHRzbnByaW50Zihrc3ltLVx1MDAzZW5hbWUsIEtTWU1fTkFNRV9MRU4sIFwmIzM0O2JwZl90cmFtcG9saW5lXyVsbHVcJiMzNDssIGtleSk7XG4gNjg3Olx0XHRicGZfaW1hZ2Vfa3N5bV9pbml0KGltYWdlLCBzaXplLCBrc3ltKTtcbiA2ODg6XHRcdGJwZl9pbWFnZV9rc3ltX2FkZChrc3ltKTtcbiA2ODk6XHRcdHJldHVybiBpbTtcbiA2OTA6XHRcbiA2OTE6XHRvdXRfZnJlZV9pbWFnZTpcbiA2OTI6XHRcdGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZShpbS1cdTAwM2VpbWFnZSwgaW0tXHUwMDNlc2l6ZSk7XG4gNjkzOlx0b3V0X3VuY2hhcmdlOlxuIDY5NDpcdFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgd2l0aCBgYnBmX3Byb2dgcywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwcmVlbXB0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBpbWAgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCwgaWYgSSYjMzk7bSByZW1lbWJlcmluZyBjb3JyZWN0bHksIGlzIGp1c3QgYSBtYWNybyBmb3IgYGt6YWxsb2NgLiBUaGlzIHplcm9lcyBvdXQgZXZlcnl0aGluZywgc28gYG5yX3Byb2dzYCBzdGFydHMgYXQgMCBhbmQgdGhlIGBwcm9nc2AgYXJyYXkgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9zLgoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYGJwZl9wcm9nYHMsIGEgY291bnRlciwgaW5jcmVtZW50aW5nIHRoZSByZWZjb3VudHMgb2YgdGhlIHByb2dyYW1zLCBzdG9yaW5nIHRoZW0gaW4gdGhlIGFycmF5LCBhbmQgZGVjcmVtZW50aW5nIHRoZW0gb24gZnJlZS4gSXQmIzM5O3MgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlIG5hc3R5IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBwcm9ibGVtcyB0aGF0IGNhbiBwb3AgdXAgd2hlbiBwcmVlbXB0aW9uIGlzIGVuYWJsZWQuCgpNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHNhZmUuIFRoZXJlJiMzOTtzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFraW5nIHRvIHVzZXJzcGFjZSBoZXJlLiBBbmQgSSBjYW4mIzM5O3Qgc2VlIGFueSBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgdXNlZCBpbiBhIGNvbnRyb2wgZmxvdyBpc3N1ZSwgZWl0aGVyLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSBiZWNhdXNlIGl0IG1lYW5zIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBLTVNBTiBzZWVtcyB1bm5lY2Vzc2FyeSBoZXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt6YWxsb2Nfb2JqYCBtYWNybyBqdXN0IHRvIGJlIDEwMCUgY29uZmlkZW50LCBidXQgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYSBjbGVhbiwgd2VsbC1yZWFzb25lZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTUxLS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1MjojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTMtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU0OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU1LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDcKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBpbnRvIHRoaXMuIFRoZSBmdW5jdGlvbiBga3phbGxvY19vYmpgICpkZWZpbml0ZWx5KiByZWxpZXMgb24gYGt6YWxsb2NgLiBBbmQgdGhhdCYjMzk7cyBjcnVjaWFsLiBga3phbGxvY2AsIGJ5IGl0cyB2ZXJ5IG5hdHVyZSwgZ3VhcmFudGVlcyB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZCBvdXQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgdG8gYXZvaWQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcywgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbGV2ZXJhZ2VzIGBremFsbG9jYCBpbiB0aGlzIHdheSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCB0aGUgcHJvcG9zZWQgY2hhbmdlICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgY2FuIHJlbWFpbiBzZXQgdG8gYGZhbHNlYC4gVGhhdCBzZXR0bGVzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBhcnJheSBvZiBwb2ludGVycyBhbmQgYSBjb3VudGVyIHRvIGBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlYCB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoZW4gYENPTkZJR19QUkVFTVBUSU9OYCBpcyBlbmFibGVkLiBUaGlzIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpLCBlbnN1cmluZyB0aGF0IHRoZSBuZXdseSBhZGRlZCBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nIChpbmNyZW1lbnRpbmcgYW5kIGRlY3JlbWVudGluZyBgYnBmX3Byb2dgIHJlZmNvdW50cykgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjA3LjY3MTIzMjc4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTAyMjUwMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQUkVFTVBUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBhcnJheSBvZiBwb2ludGVycyBhbmQgYSBjb3VudGVyIHRvIGBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlYCB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoZW4gYENPTkZJR19QUkVFTVBUSU9OYCBpcyBlbmFibGVkLiBUaGlzIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpLCBlbnN1cmluZyB0aGF0IHRoZSBuZXdseSBhZGRlZCBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBvbmx5IGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nIChpbmNyZW1lbnRpbmcgYW5kIGRlY3JlbWVudGluZyBgYnBmX3Byb2dgIHJlZmNvdW50cykgYW5kIGRvIG5vdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGlsZSB0aGUgdHJhbXBvbGluZSBpbWFnZSBpcyBhbGl2ZSwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbCB3aGVuIGF0dGFjaGluZy9kZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MDcuNjcxMjQ4MTY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE3NzU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDAyOjU5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0xMzc2LDYgKzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XFxuIFxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiBcXHR9O1xcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRJT05cXG4rXFx0LyogUHJvZ3JhbXMgY2FsbGVkIGZyb20gdGhpcyBpbWFnZSBtdXN0IG91dGxpdmUgZGVmZXJyZWQgaW1hZ2UgZnJlZWluZy4gKi9cXG4rXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nc1tCUEZfTUFYX1RSQU1QX0xJTktTXTtcXG4rXFx0aW50IG5yX3Byb2dzO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfdHJhbXBvbGluZSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5AQCAtNTI5LDggKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxcbiBcXHRyZXR1cm4gdG5vZGVzO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXFxuK1xcdGludCBpLCBraW5kO1xcbitcXG4rXFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKylcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IHRub2Rlc1traW5kXS5ub2Rlc1tpXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZztcXG4rXFxuK1xcdFxcdFxcdGJwZl9wcm9nX2luYyhwcm9nKTtcXG4rXFx0XFx0XFx0aW0tXFx1MDAzZXByb2dzW2ltLVxcdTAwM2Vucl9wcm9ncysrXSA9IHByb2c7XFxuK1xcdFxcdH1cXG4rI2VuZGlmXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3Moc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXFxuK3tcXG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGltLVxcdTAwM2Vucl9wcm9nczsgaSsrKVxcbitcXHRcXHRicGZfcHJvZ19wdXQoaW0tXFx1MDAzZXByb2dzW2ldKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxcbiB7XFxuK1xcdGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pO1xcbitcXG4gXFx0YnBmX2ltYWdlX2tzeW1fZGVsKFxcdTAwMjZpbS1cXHUwMDNla3N5bSk7XFxuIFxcdGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZShpbS1cXHUwMDNlaW1hZ2UsIGltLVxcdTAwM2VzaXplKTtcXG4gXFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oaW0tXFx1MDAzZXNpemUpO1xcbkBAIC03NDAsNiArNzY4LDggQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoaW0sIHRub2Rlcyk7XFxuK1xcbiBcXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVxcdTAwM2VpbWFnZSwgaW0tXFx1MDAzZWltYWdlICsgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHItXFx1MDAzZWZ1bmMubW9kZWwsIHRyLVxcdTAwM2VmbGFncywgdG5vZGVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHRyLVxcdTAwM2VmdW5jLmFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTowOC4zMTQyNjcxMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzI1OTAwMzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJFRU1QVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NTk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMzc2LDYgKzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0fTtcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRJT05cbitcdC8qIFByb2dyYW1zIGNhbGxlZCBmcm9tIHRoaXMgaW1hZ2UgbXVzdCBvdXRsaXZlIGRlZmVycmVkIGltYWdlIGZyZWVpbmcuICovXG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdO1xuK1x0aW50IG5yX3Byb2dzO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGJwZl90cmFtcG9saW5lIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDggKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcylcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaSwga2luZDtcbitcbitcdGZvciAoa2luZCA9IDA7IGtpbmQgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKylcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpKyspIHtcbitcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSB0bm9kZXNba2luZF0ubm9kZXNbaV0tXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuK1xuK1x0XHRcdGJwZl9wcm9nX2luYyhwcm9nKTtcbitcdFx0XHRpbS1cdTAwM2Vwcm9nc1tpbS1cdTAwM2Vucl9wcm9ncysrXSA9IHByb2c7XG4rXHRcdH1cbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGltLVx1MDAzZW5yX3Byb2dzOyBpKyspXG4rXHRcdGJwZl9wcm9nX3B1dChpbS1cdTAwM2Vwcm9nc1tpXSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbitcdGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pO1xuK1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuIFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VzaXplKTtcbiBcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKGltLVx1MDAzZXNpemUpO1xuQEAgLTc0MCw2ICs3NjgsOCBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoaW0sIHRub2Rlcyk7XG4rXG4gXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VpbWFnZSArIHNpemUsXG4gXHRcdFx0XHRcdCAgXHUwMDI2dHItXHUwMDNlZnVuYy5tb2RlbCwgdHItXHUwMDNlZmxhZ3MsIHRub2RlcyxcbiBcdFx0XHRcdFx0ICB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MDguMzE0MjcwODQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyNzA4MDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgSW1hZ2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdOKAmXMgZm9jdXNlZCBvbiBCUEYgdHJhbXBvbGluZXMsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCBpdCBoYXMgdG8gZG8gd2l0aCBob3cgdGhlIEJQRiBwcm9ncmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlcyBhcmUgaGFuZGxlZC4gVGhlIGFkZGl0aW9uIG9mIGBwcm9nc2AgYW5kIGBucl9wcm9nc2AgdG8gYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgIHVuZGVyIGBDT05GSUdfUFJFRU1QVElPTmAgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGZpeDsgSSBleHBlY3QgdG8gc2VlIHJlZmVyZW5jZSBjb3VudGluZyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgQlBGIHByb2dyYW1zIGNvcnJlY3RseSwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMuXG5cblRoZSBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9nc2AgYW5kIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzYCBmdW5jdGlvbnMgY29uZmlybSBteSBoeXBvdGhlc2lzLCBzZXJ2aW5nIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRzLiBUaGUgY2FsbHMgd2l0aGluIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX2ZyZWVgIGFyZSBleGFjdGx5IHdoZXJlIEnigJlkIGV4cGVjdCB0aGVtOiB0aGUgdXBkYXRlIGZ1bmN0aW9uIG5lZWRzIHRvIGtlZXAgdGhlIHByb2dyYW1zIGFyb3VuZCBkdXJpbmcgdGhlIHVwZGF0ZSBwcm9jZXNzLCBhbmQgd2hlbiBmcmVlaW5nIHRoZSBpbWFnZSwgd2Ugb2J2aW91c2x5IHdhbnQgdG8gZnJlZSB0aGUgcHJvZ3JhbXMgb25seSBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyB0aGVtLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBpbXByb3ZlbWVudCBpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lIGxpZmV0aW1lLCBlc3BlY2lhbGx5IGluIHByZWVtcHRpYmxlIGtlcm5lbHMgd2hlcmUgZGVmZXJyZWQgZnJlZWluZyBjb3VsZCBiZSBhIHByb2JsZW0uIFRoaXMgaXMgc21hcnQuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX2ZyZWVgIGFyZSByZWFjaGFibGUuIFRoZXkgYXJlIHRoZSBrZXkgdG8gdmFsaWRhdGluZyB0aGUgZW50aXJlIGxvZ2ljLiBBY3R1YWxseSwgSSBzaG91bGQgbGlzdCB0aG9zZSB0d28gZnVuY3Rpb25zIGFzIFwiRm9jdXNTeW1ib2xzXCIsIGFzIHRoYXQgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIHBsYXkuIE9yIG1heWJlIHRoZSBuZXcgc3RhdGljIGZ1bmN0aW9ucyBgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9nc2AgYW5kIGBicGZfdHJhbXBfaW1hZ2VfcHV0X3Byb2dzYC4uLiB3YWl0LCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBpcyBzdGF0aWM/IE5vLCB3YWl0IGEgbWludXRlLCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJIHRob3VnaHQgc28sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBJIGhhdmUgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToxNS4yNDEzNTcxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNDY5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjktI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOnN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ni1cXHRcXHQgICAgISh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc6XFx0XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMtXFx0XFx0aWYgKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY0OlxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzczPXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQxMTpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVxcdFxcdFxcdFxcdFxcdHZvaWQgKm9sZF9hZGRyLCB2b2lkICpuZXdfYWRkcilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzMj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVxcdGVsc2VcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NDA6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1MD1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYwOlxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkodHIsIG9yaWdfZmxhZ3MsIG9sZF9hZGRyLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2MS1cXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTE6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgMCwgTlVMTCwgbmV3X2FkZHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NTk9c3RhdGljIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmJwZl90cmFtcF9pbWFnZV9hbGxvYyh1NjQga2V5LCBpbnQgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwMC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDE6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkzNT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2OS1cXHRcXHRyZXR1cm4gZXJyO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk3MDpcXHRlcnIgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIHRydWUgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sIG9wcywgZGF0YSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05ODg9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDgtXFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2codHIsIG5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDk6XFx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDEwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MTUuMjk5NTE3Njc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2OTQ5MzI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYC4gSXQncyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoYXQncyBhIGdvb2QgZmlyc3Qgb2JzZXJ2YXRpb24uIE5vdywgc2luY2UgaXQncyBgc3RhdGljYCwgbXkgbmV4dCB0aG91Z2h0IGlzIGFsd2F5cyBcIk9rYXksIHdoYXQgYWJvdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHRyYW1wb2xpbmUgbWVjaGFuaXNtP1wiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmthZ2VzIGFuZCB1bi1saW5rYWdlcy4gQXJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIG9yIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AgdGhlIGtleSBjb21wYW5pb25zIGhlcmU/IFRoZXNlIG11c3QgYmUgdGhlIG9uZXMgdGhhdCwgYXQgYSBoaWdoIGxldmVsLCBhcmUgKmFjdHVhbGx5KiByZXNwb25zaWJsZSBmb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEJQRiBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhbXBvbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYHVwZGF0ZWAgYW5kIHRob3NlIGxpbmsvdW5saW5rIGZ1bmN0aW9ucyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0IGNhbGxzIHdoYXQsIHdoZXJlLCBhbmQgd2h5LiBJJ2xsIG5lZWQgdG8gZ28gbG9vayB1cCBhbmQgZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB0cmFtcG9saW5lLCBhbmQgd2hhdCBraW5kIG9mIGVycm9yIGNvbmRpdGlvbnMgdGhleSBoYW5kbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToxOS4zNjkwMTQ2OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzMjczMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkxNj1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTM0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkzNTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NzY6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTc3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk4Mi1cXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk4MzpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg0LVxcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMDY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE0OC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTQ5OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZzaGltX2xpbmstXFx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE1MC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTY0MT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkwLVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjkxOlxcdFxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MTkuNDI5MzUxMTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzMzM0MTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIEJQRjpcblxuKipNeSBCUEYgQnJhaW5zdG9ybSoqXG5cblJpZ2h0LCBzbyBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhbmQgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCBhcmUgY2xlYXJseSAqb3V0IHRoZXJlKiwgdmlzaWJsZSwgbm90IGhpZGRlbiBiZWhpbmQgc3RhdGljIGRlY2xhcmF0aW9ucy4gVGhhdOKAmXMgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdywgc2luY2UgSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMsIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYC4gVW5kZXJzdGFuZGluZyBob3cgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcyBpcyBsaWtlbHkgdG8gaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCB0cmFtcG9saW5lIG1lY2hhbmlzbS4gVGltZSB0byBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQgbWFrZXMgaXQgdGljay4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjIyLjM2MjY5OTI2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDg1MDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NzY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODctXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTg4OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDExLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTI6LyogYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coKSBzaG91bGQgbmV2ZXIgZmFpbC4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDEzOmludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxNC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTktXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDIwOlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMjEtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyNj1zdGF0aWMgdm9pZCBicGZfc2hpbV90cmFtcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAzNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDM1OlxcdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCkpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzYtXFx0YnBmX3RyYW1wb2xpbmVfcHV0KHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzQxPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTEtXFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTI6XFx0XFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzUzLVxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToyMi40NDM1NjU5NTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU3NzgxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVHJhbXBvbGluZSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSwgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AganVtcCBvdXQgYXMgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBvdXIgRm9jdXNTeW1ib2wgbGlzdC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBmb3IgbGlua2luZyBhbmQgdW5saW5raW5nIEJQRiBwcm9ncmFtcyB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgc3lzdGVtLCBzbyB0aGV5IGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuQW5kIHRoZSBwYXRjaCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYW4gYCNpZmRlZiBDT05GSUdfUFJFRU1QVElPTmAgY2hlY2suIEFscmlnaHQsIHNvIHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBQUkVFTVBUSU9OYC4gSXQncyBhIGtleSByZXF1aXJlbWVudC4gTm93LCB3YWl0IGEgbWludXRlLCBgQ09ORklHX1BSRUVNUFRJT05gIGlzLCBtb3JlIG9yIGxlc3MsIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBldmVuIHNvLCBpdCdzIHNvbWV0aGluZyB3ZSBzaG91bGQgZXhwbGljaXRseSBpbmNsdWRlLiBIb2xkIG9u4oCmIGBQUkVFTVBUSU9OYCBpc24ndCBhbHdheXMgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlOyBpdCdzIG9mdGVuIGEgY29uc2VxdWVuY2Ugb2Ygc2V0dGluZyBgUFJFRU1QVGAgb3IgYFBSRUVNUFRfUlRgLiBCdXQgYFBSRUVNUFRJT05gICppcyogZGVmaW5lZCBieSB0aG9zZSwgc28gdGhleSBhcmUgdGhlIHJlYWwgY29uZmlnIG9wdGlvbnMsIGFuZCB0aGF0IHdlIGhhdmUgYSBkZXBlbmRlbmN5IG9uLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMuIEnigJlsbCBtYWtlIGEgbm90ZSB0byBleGFtaW5lIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YCB0byBjb25maXJtIHRoZSBleGFjdCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucywganVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OToyNy4yMDEzNTY4MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDA2Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVFTVBUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD0xMjI9Y29uZmlnIFBSRUVNUFRfQ09VTlRcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTI0LVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTI1OmNvbmZpZyBQUkVFTVBUSU9OXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMjYtICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MjcuMjgzNzc1MDkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY5NDQ1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yYXZlbGluZyB0aGUgTXlzdGVyeSBvZiBQUkVFTVBUSU9OKipcblxuT2theSwgc28gYFBSRUVNUFRJT05gIGlzIG9uZSBvZiB0aG9zZSBiZWhpbmQtdGhlLXNjZW5lcyBib29sZWFucywgaXNuJ3QgaXQ/IFNvbWV0aGluZyB0aGF0J3MgYWN0aXZhdGVkLCBvciwgd2VsbCwgKnByZWVtcHRlZCogYnkgZWl0aGVyIGBQUkVFTVBUYCBvciBgUFJFRU1QVF9SVGAuIFJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhpcyBmbGFnLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBQUkVFTVBUSU9OYCB0byBpdHMgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqYWN0dWFsbHkqIHNlbGVjdGluZyBpdC4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBwdWxsZWQgaW4gZnJvbT8gTGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjMxLjQzMDcyNTU0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyMTI4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFBSRUVNUFRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTk9Y29uZmlnIFBSRUVNUFRfQlVJTERcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEwLVxcdGJvb2xcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjExOlxcdHNlbGVjdCBQUkVFTVBUSU9OXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMi1cXHRzZWxlY3QgVU5JTkxJTkVfU1BJTl9VTkxPQ0sgaWYgIUFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTkyPWNvbmZpZyBQUkVFTVBUX1JUXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTk0LVxcdGRlcGVuZHMgb24gRVhQRVJUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6OTU6XFx0c2VsZWN0IFBSRUVNUFRJT05cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTk2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6MzEuNDk1OTU3NTc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODg4OTc4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHlvdSdyZSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlYnVnZ2luZyBhIEJ1aWxkIFByZWVtcHRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIGBQUkVFTVBUX0JVSUxEYCBmbGFnIGlzIHNldC4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0LiBCdXQuLi4gd2hhdCdzICp0cmlnZ2VyaW5nKiB0aGF0IGZsYWc/IFdoYXQncyB0aGUgZGVjaXNpb24gcHJvY2VzcyB0aGF0J3MgbWFraW5nIHRoaXMgc2VsZWN0aW9uPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQuIEkga25vdyAqaXQncyogYmVlbiBzZWxlY3RlZCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBiZWVuIHNlbGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHZhcmlhYmxlIGJlaW5nIHNldCwgb3RoZXJ3aXNlIEkgY2FuJ3QgYmUgY29uZmlkZW50IGluIHRoZSBidWlsZCdzIGJlaGF2aW9yIG9yIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nIGl0J3MgKnRoZXJlKjsgSSBoYXZlIHRvIGtub3cgKndoeSogaXQncyB0aGVyZS4gTGV0J3MgZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGUgYW50ZWNlZGVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTozNC42ODQ4NjI4MzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTM2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBQUkVFTVBUX0JVSUxEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD01OT1jb25maWcgUFJFRU1QVFxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC02MS1cXHRkZXBlbmRzIG9uICFBUkNIX05PX1BSRUVNUFRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjYyOlxcdHNlbGVjdCBQUkVFTVBUX0JVSUxEIGlmICFQUkVFTVBUX0RZTkFNSUNcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTYzLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ9Nzg9Y29uZmlnIFBSRUVNUFRfTEFaWVxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC04MS1cXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6ODI6XFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtODMtXFx0aGVscFxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdD0xMjk9Y29uZmlnIFBSRUVNUFRfRFlOQU1JQ1xcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMzItXFx0c2VsZWN0IEpVTVBfTEFCRUwgaWYgSEFWRV9QUkVFTVBUX0RZTkFNSUNfS0VZXFxua2VybmVsL0tjb25maWcucHJlZW1wdDoxMzM6XFx0c2VsZWN0IFBSRUVNUFRfQlVJTERcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEzNC1cXHRkZWZhdWx0IHkgaWYgSEFWRV9QUkVFTVBUX0RZTkFNSUNfQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTozNC43NDcwMDczMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NTgyNzAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgcHJlZW1wdGlvbi4gVGhlIG9wdGlvbnMgYXJlIGBQUkVFTVBUYCwgYFBSRUVNUFRfRFlOQU1JQ2AsIG9yIGBQUkVFTVBUX1JUYCwgYW5kIGFueSBvZiB0aGVzZSBlbmFibGUgYWN0dWFsIGBQUkVFTVBUSU9OYC4gSXQgc2VlbXMgbG9naWNhbCB0byBzdGFydCBieSBzcGVjaWZ5aW5nIGBQUkVFTVBUYCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBCdXQgaGFuZyBvbi4uLmlzbid0IGBQUkVFTVBUSU9OYCB0aGUgYWN0dWFsIGNvbmZpZyB1c2VkIGluIHRoZSBgI2lmZGVmYD8gU28sIHNob3VsZCBJIGp1c3QgbGlzdCBgUFJFRU1QVElPTmAgZGlyZWN0bHk/IE5vLCB0aGF0J3Mgbm90IHVzZXItc2VsZWN0YWJsZSBkaXJlY3RseS4gQnV0IG1heWJlLCBqdXN0IG1heWJlLCB0aGUgc3l6a2FsbGVyIGNvbmZpZyBnZW5lcmF0aW9uIGNhbiBoYW5kbGUgaXQgaWYgSSBzcGVjaWZ5IGBQUkVFTVBUYC4gSSdsbCBnbyB3aXRoIGBQUkVFTVBUYCBmb3Igbm93IGFuZCBzZWUgd2hhdCBoYXBwZW5zLlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLiBJIGtub3cgQlBGIHRyYW1wb2xpbmVzIGFyZSBoZWF2aWx5IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgaW4gQlBGIHRyYWNpbmcuIFNvIHRoYXQgbWVhbnMgSSdtIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgZW5hYmxlZCBhcyB3ZWxsLiBKdXN0IHRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgbWFrZSBzdXJlIGl0J3MgY29tcGlsZWQgY29ycmVjdGx5LiBBbmQgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0LCBpZiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGV2ZW4gY29tcGlsZWQgY29uZGl0aW9uYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTozOS40OTI4NDAwNDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTEzMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjM5LjU1MTM3NDczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQwMzg4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEJQRiBKSVQgUmVhY2hhYmlsaXR5IHZpYSBTeXN0ZW0gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlciAoYEJQRl9KSVRgKSBpcyBkZWZpbml0ZWx5IGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBhbmQgaG93LiBNeSBpbml0aWFsIGxpbmUgb2YgaW52ZXN0aWdhdGlvbiB3aWxsIGJlIGZvY3VzZWQgb24gdGhlIHN0YW5kYXJkIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lLCBzcGVjaWZpY2FsbHkgd2hldGhlciB0aGVyZSdzIGEgZGlyZWN0IHBhdGggZnJvbSBzeXN0ZW0gY2FsbHMuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoYCBwYXRoIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGlzIGlzIGdvb2QgdG8ga25vdywgYW5kIGl0IGluZm9ybXMgdGhlIG5leHQgc2V0IG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8gYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NDIuODQ1NDIwOTI4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM1NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MzY4OT1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3OTUtXFx0XFx0ICogQWxsb3cgcmUtYXR0YWNoIGZvciBUUkFDSU5HIGFuZCBMU00gcHJvZ3JhbXMuIElmIGl0J3NcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzk2OlxcdFxcdCAqIGN1cnJlbnRseSBsaW5rZWQsIGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyB3aWxsIGZhaWwuXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5Ny1cXHRcXHQgKiBFWFQgcHJvZ3JhbXMgbmVlZCB0byBzcGVjaWZ5IHRndF9wcm9nX2ZkLCBzbyB0aGV5XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zODY5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM4NzA6XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLm5vZGUsIHRyLCB0Z3RfcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzg3MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MTY9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkzNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MzU6c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTM2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTc2OmludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3Ny1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05ODItXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5ODM6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk4NC1cXHR0cmFtcG9saW5lX3VubG9jayh0cik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMTA2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNDgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE0OTpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNTAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2NDE9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5MC1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5MTpcXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUsIG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTItXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjQyLjkwNTc5MDQ0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTEyOTE3MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBUcmFtcG9saW5lIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyBkaXJlY3RseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IHdoZW4gYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcywgd2hpY2ggbWVhbnMgaXQncyBhYnNvbHV0ZWx5IGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuXG5IZXJlJ3MgbXkgZGlzdGlsbGVkIGZ1enppbmcgcGxhbjpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGEgaGlnaC1wcmlvcml0eSBhcmVhLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLiBUaGV5IGFyZSBjbGVhcmx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBiYXNlZCBvbiB0aGUgXCJub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnNcIiBndWlkYW5jZS4gV2hpbGUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIGl0J3Mgc3RhdGljLCBzbyBpdCdzIG5vdCB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBhbmQgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW1gLCBidXQgdGhvc2UgYXJlIGxlc3MgZGlyZWN0LlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gZW5hYmxlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZXhwb3NlIHRoZSByZWxldmFudCBjb2RlIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJJ2xsIGluY2x1ZGUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGFzIG9idmlvdXMgY2hvaWNlcy4gQW5kLCBzaW5jZSB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBwcmVlbXB0aW9uIGNvbmNlcm5zLCBJJ2xsIGRlZmluaXRlbHkgZW5hYmxlIGBQUkVFTVBUYCDigJMgY29uZmlybWVkIHRoYXQgaXQgY29ycmVjdGx5IHRyYW5zbGF0ZXMgdG8gYENPTkZJR19QUkVFTVBUSU9OYC5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUga2VybmVsIHBhdGNoIG1vZGlmaWVzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSB0cmFtcG9saW5lIGxvZ2ljLCBwYXJ0aWN1bGFybHkgdG8gaGFuZGxlIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyBhbGwgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGBicGZgIHN5c2NhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjUxLjQxODcxNTM5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDU0NDQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBSRUVNUFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3VubGlua19wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGlsZSB0aGUgdHJhbXBvbGluZSBpbWFnZSBpcyBhbGl2ZSwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gcHJlZW1wdGlibGUga2VybmVscy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYgc3lzY2FsbCB3aGVuIGF0dGFjaGluZy9kZXRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJFRU1QVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBob2xkIHJlZmVyZW5jZXMgdG8gQlBGIHByb2dyYW1zIHdoaWxlIHRoZSB0cmFtcG9saW5lIGltYWdlIGlzIGFsaXZlLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBwcmVlbXB0aWJsZSBrZXJuZWxzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZiBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nL2RldGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo1OTo1MS41NzMyODM3MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjAwMTg0NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NTEuNTc0MjE5OTk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0MTk5MjQzMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGFycmF5IG9mIHBvaW50ZXJzIGFuZCBhIGNvdW50ZXIgdG8gYHN0cnVjdCBicGZfdHJhbXBfaW1hZ2VgIHRvIGhvbGQgcmVmZXJlbmNlcyB0byBCUEYgcHJvZ3JhbXMgd2hlbiBgQ09ORklHX1BSRUVNUFRJT05gIGlzIGVuYWJsZWQuIFRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ld2x5IGFkZGVkIGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcgKGluY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIGBicGZfcHJvZ2AgcmVmY291bnRzKSBhbmQgZG8gbm90IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDFmZGY0MDQ0OTFkOGY3ZjZlMzA0YmM3ZmU2ZTc0NmNjMzRjMjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NTk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uYmFjYjZiYzJlMjdiZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMzc2LDYgKzEzNzYsMTEgQEAgc3RydWN0IGJwZl90cmFtcF9pbWFnZSB7XG4gXHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0fTtcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRJT05cbitcdC8qIFByb2dyYW1zIGNhbGxlZCBmcm9tIHRoaXMgaW1hZ2UgbXVzdCBvdXRsaXZlIGRlZmVycmVkIGltYWdlIGZyZWVpbmcuICovXG4rXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2dzW0JQRl9NQVhfVFJBTVBfTElOS1NdO1xuK1x0aW50IG5yX3Byb2dzO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGJwZl90cmFtcG9saW5lIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zMzM4M2QxZGMxZTA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDggKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2dldF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcylcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaSwga2luZDtcbitcbitcdGZvciAoa2luZCA9IDA7IGtpbmQgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKylcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpKyspIHtcbitcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSB0bm9kZXNba2luZF0ubm9kZXNbaV0tXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuK1xuK1x0XHRcdGJwZl9wcm9nX2luYyhwcm9nKTtcbitcdFx0XHRpbS1cdTAwM2Vwcm9nc1tpbS1cdTAwM2Vucl9wcm9ncysrXSA9IHByb2c7XG4rXHRcdH1cbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncyhzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbit7XG4rI2lmZGVmIENPTkZJR19QUkVFTVBUSU9OXG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGltLVx1MDAzZW5yX3Byb2dzOyBpKyspXG4rXHRcdGJwZl9wcm9nX3B1dChpbS1cdTAwM2Vwcm9nc1tpXSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbitcdGJwZl90cmFtcF9pbWFnZV9wdXRfcHJvZ3MoaW0pO1xuK1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuIFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VzaXplKTtcbiBcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKGltLVx1MDAzZXNpemUpO1xuQEAgLTc0MCw2ICs3NjgsOCBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoaW0sIHRub2Rlcyk7XG4rXG4gXHRlcnIgPSBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIGltLVx1MDAzZWltYWdlLCBpbS1cdTAwM2VpbWFnZSArIHNpemUsXG4gXHRcdFx0XHRcdCAgXHUwMDI2dHItXHUwMDNlZnVuYy5tb2RlbCwgdHItXHUwMDNlZmxhZ3MsIHRub2RlcyxcbiBcdFx0XHRcdFx0ICB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NTEuNTc0MjIyNzA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzgwOTA4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBJbWFnZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY291cGxlIG9mIGltcG9ydGFudCBhZGRpdGlvbnMgdG8gdGhlIGBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlYCwgc3BlY2lmaWNhbGx5IHVuZGVyIHRoZSBgQ09ORklHX1BSRUVNUFRJT05gIGNvbmRpdGlvbmFsLiBJIHNlZSBpdCdzIGFkZGluZyBhIGBwcm9nc2AgYXJyYXkgYW5kIGEgYG5yX3Byb2dzYCBpbnRlZ2VyLiBUaGF0IGBwcm9nc2AgYXJyYXkgaXMgcHJvYmFibHkgbWVhbnQgdG8gaG9sZCB0aGUgQlBGIHByb2dyYW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UsIGFuZCBgbnJfcHJvZ3NgIGlzIHRoZSBvYnZpb3VzIGNvdW50IG9mIHRob3NlIHByb2dyYW1zLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlIGNvbmNlcHR1YWxseS5cblxuTm93LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBicGZfdHJhbXBfaW1hZ2VfZ2V0X3Byb2dzKClgIGFuZCBgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncygpYC4gVGhlc2UgYXJlIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIGZ1bmN0aW9uczsgYGdldGAgaW5jcmVtZW50cywgYHB1dGAgZGVjcmVtZW50cy4gQW5kIGl0IGxvb2tzIGxpa2UgYGJwZl90cmFtcF9pbWFnZV9nZXRfcHJvZ3MoKWAgaXMgcmVzcG9uc2libGUgZm9yIHN0b3JpbmcgdGhlIHByb2dyYW1zIGluIGBpbS1cdTAwM2Vwcm9nc2AuIFRoYXTigJlzIHRoZSBwYXR0ZXJuIEkgZXhwZWN0ZWQuIFNvLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGlzIGdvaW5nIHRvIGJlIHdoZXJlIHRoZSBwcm9ncmFtcyBhcmUgZWZmZWN0aXZlbHkgXCJib3Jyb3dlZFwiLiBUaGVuLCBgYnBmX3RyYW1wX2ltYWdlX3B1dF9wcm9ncygpYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgaW4gYGJwZl90cmFtcF9pbWFnZV9mcmVlKClgLCB0byByZWxpbnF1aXNoIHRoZSBwcm9ncmFtcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIG5vdyBpcywgaXMgYGltLVx1MDAzZW5yX3Byb2dzYCBpbml0aWFsaXplZCBzb21ld2hlcmU/IEl0J3MgY3J1Y2lhbCB3ZSBrbm93IHRoaXMuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBjb3VudCBzdGFydHMgYXQgemVybywgb3Igd2UgY291bGQgaGF2ZSBhbGwgc29ydHMgb2Ygd2VpcmRuZXNzLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgaW1gIGlzIGFsbG9jYXRlZC4gSXMgaXQgaW4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpYCBvciBzb21ld2hlcmUgZWxzZT8gTGV0J3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZS4gVGhpcyBpcyBhbiBhcmVhIHdoZXJlIGEgc3VidGxlIGJ1ZyBjYW4gcmVhbGx5IGJpdGUgeW91LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NTk6NTYuNzEyMzI3MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDcyNjkyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wX2ltYWdlX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYxMD1zdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfcHV0KHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjU4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY1OTpzdGF0aWMgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqYnBmX3RyYW1wX2ltYWdlX2FsbG9jKHU2NCBrZXksIGludCBzaXplKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY2MC17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MDE9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjU6XFx0aW0gPSBicGZfdHJhbXBfaW1hZ2VfYWxsb2ModHItXFx1MDAzZWtleSwgc2l6ZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzY2LVxcdGlmIChJU19FUlIoaW0pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjU5OjU4LjY1OTYwMzYzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2ODQ4OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX3RyYW1wX2ltYWdlX2FsbG9jYCBmdW5jdGlvbi4gSSd2ZSBlbmNvdW50ZXJlZCBzaW1pbGFyIGFsbG9jYXRpb24gcm91dGluZXMgYmVmb3JlLCBidXQgdGhlIHNwZWNpZmljIGNvbnRleHQgaGVyZSBpcyBjcnVjaWFsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGtpbmQgb2YgaW1hZ2UgYXJlIHdlIGFsbG9jYXRpbmc/XCIgVGhpcyBmdW5jdGlvbidzIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lcyDigJMgd2hpY2ggaW1tZWRpYXRlbHkgaW1wbGllcyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbiBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIGtlcm5lbCBzcGFjZSwgd2hpY2ggYWx3YXlzIGRlbWFuZHMgYSBoaWdoIGxldmVsIG9mIHNjcnV0aW55LlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lbW9yeSBsYXlvdXQuIElzIHRoaXMgYWxsb2NhdGlvbiBwYWdlLWFsaWduZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggY29udGlndW91cyBwaHlzaWNhbCBwYWdlcz8gRG9lcyB0aGUgYWxsb2NhdG9yIGhhdmUgYW55IHNwZWNpZmljIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgY2FjaGUgY29oZXJlbmNlIGNvbnNpZGVyYXRpb25zIG9yIG1lbW9yeSBwcm90ZWN0aW9uIGZsYWdzPyBHaXZlbiBpdCBpcyByZWxhdGVkIHRvIHRyYW1wb2xpbmVzLCBpdCBpcyBsaWtlbHkgdGhlIGltYWdlIHdpbGwgYmUgaW5qZWN0ZWQgaW50byBrZXJuZWwgc3BhY2Ugd2l0aCBleGVjdXRpb24gcHJpdmlsZWdlcywgbWVhbmluZyB3ZSBtdXN0IGJlIGV4dHJlbWVseSBjYXJlZnVsIHRvIGF2b2lkIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGRldGFpbHMgbWF0dGVyLiBXaGF0J3MgdGhlIHNpemUgYXJndW1lbnQ/IElzIHRoZXJlIGFueSBtZWNoYW5pc20gZm9yIHNwZWNpZnlpbmcgbWVtb3J5IGFsaWdubWVudD8gSXMgdGhpcyBhIHNpbXBsZSBga21hbGxvY2Atc3R5bGUgYWxsb2NhdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBkZXNpZ25lZCBmb3IgQlBGLXNwZWNpZmljIG5lZWRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGZhaWx1cmU/IEhvdyBpcyB0aGlzIGFsbG9jYXRpb24gbGlua2VkIHRvIHRoZSBvdmVyYWxsIEJQRiBwcm9ncmFtIGxpZmVjeWNsZT9cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcGl0ZmFsbHMuIEFyZSB3ZSBwcm90ZWN0ZWQgYWdhaW5zdCBtZW1vcnkgZXhoYXVzdGlvbj8gSXMgdGhlIGFsbG9jYXRpb24gdGhyZWFkLXNhZmUsIHBhcnRpY3VsYXJseSBpZiBtdWx0aXBsZSBCUEYgcHJvZ3JhbXMgbWlnaHQgYmUgbG9hZGluZyBjb25jdXJyZW50bHk/IElzIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIGJlaW5nIHN0b3JlZCBhbG9uZ3NpZGUgdGhlIGltYWdlPyBEb2VzIHRoZSBmdW5jdGlvbiByZXR1cm4gYSByYXcgcG9pbnRlciwgb3IgYSBtb3JlIG9wYXF1ZSBoYW5kbGU/IEFuZCwgbW9zdCBjcml0aWNhbGx5LCBob3cgaXMgdGhpcyBtZW1vcnkgKmZyZWVkKj8gSXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGBicGZfdHJhbXBfaW1hZ2VfZnJlZWAgZnVuY3Rpb24sIGFuZCBkb2VzIGl0IGFkZHJlc3MgYWxsIHRoZSBwb3RlbnRpYWwgY2xlYW51cCBpc3N1ZXM/IE1lbW9yeSBsZWFrcyBoZXJlIHdvdWxkIGJlIGNhdGFzdHJvcGhpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAzOjAwOjAyLjc0NjQ1NzUxM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjU1OlxcdFxcdCAqL1xcbiA2NTY6XFx0XFx0Y2FsbF9yY3VfdGFza3NfdHJhY2UoXFx1MDAyNmltLVxcdTAwM2VyY3UsIF9fYnBmX3RyYW1wX2ltYWdlX3B1dF9yY3VfdGFza3MpO1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRzdGF0aWMgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqYnBmX3RyYW1wX2ltYWdlX2FsbG9jKHU2NCBrZXksIGludCBzaXplKVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW07XFxuIDY2MjpcXHRcXHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XFxuIDY2MzpcXHRcXHR2b2lkICppbWFnZTtcXG4gNjY0OlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiA2NjU6XFx0XFxuIDY2NjpcXHRcXHRpbSA9IGt6YWxsb2Nfb2JqKCppbSk7XFxuIDY2NzpcXHRcXHRpZiAoIWltKVxcbiA2Njg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdGVyciA9IGJwZl9qaXRfY2hhcmdlX21vZG1lbShzaXplKTtcXG4gNjcxOlxcdFxcdGlmIChlcnIpXFxuIDY3MjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2ltO1xcbiA2NzM6XFx0XFx0aW0tXFx1MDAzZXNpemUgPSBzaXplO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA2NzY6XFx0XFx0aW0tXFx1MDAzZWltYWdlID0gaW1hZ2UgPSBhcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHNpemUpO1xcbiA2Nzc6XFx0XFx0aWYgKCFpbWFnZSlcXG4gNjc4OlxcdFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlO1xcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHRlcnIgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNmltLVxcdTAwM2VwY3JlZiwgX19icGZfdHJhbXBfaW1hZ2VfcmVsZWFzZSwgMCwgR0ZQX0tFUk5FTCk7XFxuIDY4MTpcXHRcXHRpZiAoZXJyKVxcbiA2ODI6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9pbWFnZTtcXG4gNjgzOlxcdFxcbiA2ODQ6XFx0XFx0a3N5bSA9IFxcdTAwMjZpbS1cXHUwMDNla3N5bTtcXG4gNjg1OlxcdFxcdElOSVRfTElTVF9IRUFEX1JDVShcXHUwMDI2a3N5bS1cXHUwMDNlbG5vZGUpO1xcbiA2ODY6XFx0XFx0c25wcmludGYoa3N5bS1cXHUwMDNlbmFtZSwgS1NZTV9OQU1FX0xFTiwgXFxcImJwZl90cmFtcG9saW5lXyVsbHVcXFwiLCBrZXkpO1xcbiA2ODc6XFx0XFx0YnBmX2ltYWdlX2tzeW1faW5pdChpbWFnZSwgc2l6ZSwga3N5bSk7XFxuIDY4ODpcXHRcXHRicGZfaW1hZ2Vfa3N5bV9hZGQoa3N5bSk7XFxuIDY4OTpcXHRcXHRyZXR1cm4gaW07XFxuIDY5MDpcXHRcXG4gNjkxOlxcdG91dF9mcmVlX2ltYWdlOlxcbiA2OTI6XFx0XFx0YXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKGltLVxcdTAwM2VpbWFnZSwgaW0tXFx1MDAzZXNpemUpO1xcbiA2OTM6XFx0b3V0X3VuY2hhcmdlOlxcbiA2OTQ6XFx0XFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAzOjAwOjAyLjc0NjU5OTY5M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTczMzgxMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgU2FmZXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgd2l0aCBgYnBmX3Byb2dgcywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwcmVlbXB0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBpbWAgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCwgaWYgSSdtIHJlbWVtYmVyaW5nIGNvcnJlY3RseSwgaXMganVzdCBhIG1hY3JvIGZvciBga3phbGxvY2AuIFRoaXMgemVyb2VzIG91dCBldmVyeXRoaW5nLCBzbyBgbnJfcHJvZ3NgIHN0YXJ0cyBhdCAwIGFuZCB0aGUgYHByb2dzYCBhcnJheSBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIGBicGZfcHJvZ2BzLCBhIGNvdW50ZXIsIGluY3JlbWVudGluZyB0aGUgcmVmY291bnRzIG9mIHRoZSBwcm9ncmFtcywgc3RvcmluZyB0aGVtIGluIHRoZSBhcnJheSwgYW5kIGRlY3JlbWVudGluZyB0aGVtIG9uIGZyZWUuIEl0J3MgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlIG5hc3R5IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBwcm9ibGVtcyB0aGF0IGNhbiBwb3AgdXAgd2hlbiBwcmVlbXB0aW9uIGlzIGVuYWJsZWQuXG5cbk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2FmZS4gVGhlcmUncyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2luZyB0byB1c2Vyc3BhY2UgaGVyZS4gQW5kIEkgY2FuJ3Qgc2VlIGFueSBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgdXNlZCBpbiBhIGNvbnRyb2wgZmxvdyBpc3N1ZSwgZWl0aGVyLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSBiZWNhdXNlIGl0IG1lYW5zIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBLTVNBTiBzZWVtcyB1bm5lY2Vzc2FyeSBoZXJlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBremFsbG9jX29iamAgbWFjcm8ganVzdCB0byBiZSAxMDAlIGNvbmZpZGVudCwgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSwgaXQncyBsb29raW5nIGxpa2UgYSBjbGVhbiwgd2VsbC1yZWFzb25lZCBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMzowMDowNy45MTk5ODU1MTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDc5MjkzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGt6YWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1MS0vKiBBbGwga3phbGxvYyBhbGlhc2VzIGZvciBrbWFsbG9jXyhvYmp8b2Jqc3xmbGV4KS4gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTUyOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1My1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NDojZGVmaW5lIGt6YWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1NS1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MjAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MjExOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxcXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEyLVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDM6MDA6MTAuOTI3OTIzNzA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDU1MDc3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgaW50byB0aGlzLiBUaGUgZnVuY3Rpb24gYGt6YWxsb2Nfb2JqYCAqZGVmaW5pdGVseSogcmVsaWVzIG9uIGBremFsbG9jYC4gQW5kIHRoYXQncyBjcnVjaWFsLiBga3phbGxvY2AsIGJ5IGl0cyB2ZXJ5IG5hdHVyZSwgZ3VhcmFudGVlcyB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm9lZCBvdXQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgdG8gYXZvaWQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcywgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbGV2ZXJhZ2VzIGBremFsbG9jYCBpbiB0aGlzIHdheSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCB0aGUgcHJvcG9zZWQgY2hhbmdlICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgY2FuIHJlbWFpbiBzZXQgdG8gYGZhbHNlYC4gVGhhdCBzZXR0bGVzIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDcsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDM6MDA6MTUuNzczNDM1OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgYW5kIGEgY291bnRlciB0byBgc3RydWN0IGJwZl90cmFtcF9pbWFnZWAgdG8gaG9sZCByZWZlcmVuY2VzIHRvIEJQRiBwcm9ncmFtcyB3aGVuIGBDT05GSUdfUFJFRU1QVElPTmAgaXMgZW5hYmxlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3bHkgYWRkZWQgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgb25seSBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyAoaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgYGJwZl9wcm9nYCByZWZjb3VudHMpIGFuZCBkbyBub3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow527xt[1] Phase: Succeeded StartedAt: 2026-08-20 03:00:28 +0000 UTC FinishedAt: 2026-08-20 03:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 03:00:28 +0000 UTC FinishedAt: 2026-08-20 03:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2] Phase: Succeeded StartedAt: 2026-08-20 03:00:28 +0000 UTC FinishedAt: 2026-08-20 06:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 03:00:28 +0000 UTC FinishedAt: 2026-08-20 06:41:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 03:00:28 +0000 UTC FinishedAt: 2026-08-20 03:00:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 03:00:28 +0000 UTC FinishedAt: 2026-08-20 03:00:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow527xt/series-workflow527xt-convert-artifact-2489910564/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 03:00:38 +0000 UTC FinishedAt: 2026-08-20 03:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 03:00:38 +0000 UTC FinishedAt: 2026-08-20 03:17:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b3ffb2ab-56f7-40be-b21a-3a924f169e89,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-workflow527xt/series-workflow527xt-convert-artifact-2489910564/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": "e767d232-db09-4659-974d-5b20294df600", "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-workflow527xt/series-workflow527xt-build-action-216569698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 03:00:38 +0000 UTC FinishedAt: 2026-08-20 03:16:51 +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:*b3ffb2ab-56f7-40be-b21a-3a924f169e89,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-workflow527xt/series-workflow527xt-convert-artifact-2489910564/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": "e767d232-db09-4659-974d-5b20294df600", "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-workflow527xt/series-workflow527xt-build-action-216569698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 03:17:01 +0000 UTC FinishedAt: 2026-08-20 03:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 03:17:01 +0000 UTC FinishedAt: 2026-08-20 03:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 03:17:01 +0000 UTC FinishedAt: 2026-08-20 03:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 03:17:01 +0000 UTC FinishedAt: 2026-08-20 03:17:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow527xt/series-workflow527xt-convert-artifact-4050563619/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 03:17:11 +0000 UTC FinishedAt: 2026-08-20 03:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 03:17:11 +0000 UTC FinishedAt: 2026-08-20 03:19:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e767d232-db09-4659-974d-5b20294df600,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-workflow527xt/series-workflow527xt-build-action-216569698/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-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 03:19:12 +0000 UTC FinishedAt: 2026-08-20 03:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 03:19:12 +0000 UTC FinishedAt: 2026-08-20 03:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 03:19:12 +0000 UTC FinishedAt: 2026-08-20 03:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 03:19:12 +0000 UTC FinishedAt: 2026-08-20 03:36:11 +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:*b3ffb2ab-56f7-40be-b21a-3a924f169e89,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-workflow527xt/series-workflow527xt-convert-artifact-4050563619/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": "fb7a7caf-a5ea-44f9-a270-60b6e636406f", "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-workflow527xt/series-workflow527xt-build-action-426358487/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 03:19:12 +0000 UTC FinishedAt: 2026-08-20 03:36:01 +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:*b3ffb2ab-56f7-40be-b21a-3a924f169e89,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-workflow527xt/series-workflow527xt-convert-artifact-4050563619/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": "fb7a7caf-a5ea-44f9-a270-60b6e636406f", "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-workflow527xt/series-workflow527xt-build-action-426358487/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 03:36:11 +0000 UTC FinishedAt: 2026-08-20 03:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 03:36:11 +0000 UTC FinishedAt: 2026-08-20 03:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 03:36:11 +0000 UTC FinishedAt: 2026-08-20 03:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 03:36:11 +0000 UTC FinishedAt: 2026-08-20 03:38:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fb7a7caf-a5ea-44f9-a270-60b6e636406f,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-workflow527xt/series-workflow527xt-build-action-426358487/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-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 03:38:31 +0000 UTC FinishedAt: 2026-08-20 06:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 03:38:31 +0000 UTC FinishedAt: 2026-08-20 06:41:12 +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_trampoline_link_prog","bpf_trampoline_unlink_prog"],"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:*e767d232-db09-4659-974d-5b20294df600,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fb7a7caf-a5ea-44f9-a270-60b6e636406f,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-workflow527xt/series-workflow527xt-build-action-216569698/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-workflow527xt/series-workflow527xt-build-action-426358487/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 03:38:31 +0000 UTC FinishedAt: 2026-08-20 03:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 03:38:31 +0000 UTC FinishedAt: 2026-08-20 03:38:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"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-workflow527xt/series-workflow527xt-convert-artifact-3244360508/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 03:38:31 +0000 UTC FinishedAt: 2026-08-20 03:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 03:38:31 +0000 UTC FinishedAt: 2026-08-20 03:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 03:38:31 +0000 UTC FinishedAt: 2026-08-20 03:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 03:38:41 +0000 UTC FinishedAt: 2026-08-20 06:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow527xt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog","bpf_trampoline_unlink_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","PREEMPT"],"series_id":"6d1f46b4-c7d8-4103-807e-24176131003c","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 03:38:41 +0000 UTC FinishedAt: 2026-08-20 06:41:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e767d232-db09-4659-974d-5b20294df600,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fb7a7caf-a5ea-44f9-a270-60b6e636406f,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-workflow527xt/series-workflow527xt-build-action-216569698/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-workflow527xt/series-workflow527xt-build-action-426358487/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-workflow527xt/series-workflow527xt-convert-artifact-3244360508/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,}