Name: series-workflowtdgn9 Phase: Succeeded StartedAt: 2026-09-07 06:05:15 +0000 UTC FinishedAt: 2026-09-07 10:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[0] Phase: Succeeded StartedAt: 2026-09-07 06:05:15 +0000 UTC FinishedAt: 2026-09-07 06:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 06:05:15 +0000 UTC FinishedAt: 2026-09-07 06:29:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "963fd7bb-85a3-477f-a50e-579902071249" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_attach", "link_create", "link_update", "bpf_prog_attach_check_attach_type", "bpf_prog_attach_check_perm" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtsaW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUmIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IG1vZGlmeSBjb250cm9sLWZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMgdXNpbmcgYWxyZWFkeS1pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIChicGZfcHJvZyBhbmQgYnBmX2xpbmspLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNGZkOWI2MTUwNzdmMjk0NzdjZWQ3NGMxNWYzZmJkNjE4NmVkMDM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjoyODoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi4yYmNkM2YzYTJhNTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNDQ4MSwxNCAmIzQzOzQ0ODEsOSBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUjpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbiBcdFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxuLVx0XHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbi1cdFx0XHQvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci5cbi1cdFx0XHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVxuIFx0XHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XG4gXHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gcHR5cGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNDU0Miw2ICYjNDM7NDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2tcbiYjNDM7XHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiBcdFx0XHRcdGJvb2wgY2hlY2tfYXR5cGUpXG4ge1xuQEAgLTQ2MDYsNyAmIzQzOzQ2MTUsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuJiM0MztcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCAmIzQzOzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csXG4tXHRcdFx0XHRcdFx0YXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC01OTY4LDYgJiM0Mzs1OTc2LDEwIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstXHUwMDNlYXR0YWNoX3R5cGUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4mIzQzO1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jXG5pbmRleCAxNTA5M2E2OTUxMGViLi4zYjQzYzM0OTE3Y2NjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NhcF9oZWxwZXJzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfaGVscGVycy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdGluZ19oZWxwZXJzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X2Nncm91cF9saW5rLnNrZWwuaFwmIzM0O1xuQEAgLTI0LDcgJiM0MzsyNSw3NyBAQCBpbnQgcGluZ19hbmRfY2hlY2soaW50IGV4cF9jYWxscywgaW50IGV4cF9hbHRfY2FsbHMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgX191NjQgY2FwcyA9ICgxVUxMIFx1MDAzY1x1MDAzYyBDQVBfTkVUX0FETUlOKSB8ICgxVUxMIFx1MDAzY1x1MDAzYyBDQVBfU1lTX0FETUlOKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuJiM0MztcdF9fdTY0IHNhdmVkX2NhcHMgPSAwO1xuJiM0MztcdGludCBjZ19mZCA9IC0xLCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2Nncm91cF9saW5rX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtjZ19pbml0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Y2dfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoXCYjMzQ7L2Nncm91cF9saW5rX3VwZGF0ZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoY2dfZmQsIDAsIFwmIzM0O2NnX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGpvaW5fY2dyb3VwKFwmIzM0Oy9jZ3JvdXBfbGlua191cGRhdGVcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Y2dfam9pblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLVx1MDAzZXByb2dzLnNlbmRtc2c0LCBjZ19mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwmIzM0O2F0dGFjaF9zZW5kbXNnNFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX191cGRhdGVfcHJvZ3JhbShsaW5rLCBza2VsLVx1MDAzZXByb2dzLnNlbmRtc2c2KTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcJiMzNDtyZWplY3Rfc2VuZG1zZzZfdXBkYXRlXCYjMzQ7KTtcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRsaW5rID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gY2FwX2Rpc2FibGVfZWZmZWN0aXZlKGNhcHMsIFx1MDAyNnNhdmVkX2NhcHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZHJvcF9jYXBzX2Zvcl9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIFwmIzM0O2F0dGFjaF93aXRob3V0X25ldF9hZG1pblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihsaW5rKTtcbiYjNDM7XHRsaW5rID0gTlVMTDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FUEVSTSwgXCYjMzQ7YXR0YWNoX2VyclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cmVzdG9yZV9jYXBzX2Zvcl9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7YXR0YWNoX2VncmVzc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCBcdTAwMjZzYXZlZF9jYXBzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Ryb3BfY2Fwc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX191cGRhdGVfcHJvZ3JhbShsaW5rLCBza2VsLVx1MDAzZXByb2dzLmVncmVzc19hbHQpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3VwZGF0ZV93aXRob3V0X25ldF9hZG1pblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3Jlc3RvcmVfY2Fwc1wmIzM0Oyk7XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0aWYgKGNnX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNnX2ZkKTtcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0MztcdHRlc3RfY2dyb3VwX2xpbmtfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0c2tlbCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKHZvaWQpXG4ge1xuIFx0c3RydWN0IHtcbiBcdFx0Y29uc3QgY2hhciAqcGF0aDtcbkBAIC0yNTMsMyAmIzQzOzMyNCwxMSBAQCB2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4gXHR9XG4gXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuIH1cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VwZGF0ZVwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG5pbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbkBAIC03NCw2ICYjNDM7NzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKVxuIFx0aW50IGJpbmRfcHJvZ19mZCA9IC0xO1xuIFx0aW50IGJpbmRfbGlua19mZCA9IC0xO1xuIFx0aW50IGNsb25lX3Byb2dfZmQgPSAtMTtcbiYjNDM7XHRpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTtcbiBcdGludCBlcnIsIGZkLCBwcmlvO1xuIFx0c29ja2xlbl90IHNvY2tsZW47XG4gXG5AQCAtMTU2LDYgJiM0MzsxNTcsMTcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZClcbiBcdEFTU0VSVF9FUShxdWVyeV9wcm9nX2NudChjZ3JvdXBfZmQsIFwmIzM0O2JwZl9sc21fc29ja2V0X2JpbmRcJiMzNDspLCAxLCBcJiMzNDtwcm9nIGNvdW50XCYjMzQ7KTtcbiBcdEFTU0VSVF9FUShxdWVyeV9wcm9nX2NudChjZ3JvdXBfZmQsIE5VTEwpLCA0LCBcJiMzNDt0b3RhbCBwcm9nIGNvdW50XCYjMzQ7KTtcbiBcbiYjNDM7XHRzb2NrZXRfbGlua19mZCA9XG4mIzQzO1x0XHRicGZfbGlua19jcmVhdGUoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc29ja2V0X2ZpcnN0KSxcbiYjNDM7XHRcdFx0XHRjZ3JvdXBfZmQsIEJQRl9MU01fQ0dST1VQLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzb2NrZXRfbGlua19mZCwgMCwgXCYjMzQ7bGluayBjcmVhdGUgc29ja2V0X2ZpcnN0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZGV0YWNoX2Nncm91cDtcbiYjNDM7XHRlcnIgPSBicGZfbGlua191cGRhdGUoc29ja2V0X2xpbmtfZmQsXG4mIzQzO1x0XHRcdCAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnNvY2tldF9jcmVhdGVfbHNtKSxcbiYjNDM7XHRcdFx0ICAgICAgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCYjMzQ7cmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGVcJiMzNDspO1xuJiM0MztcdGNsb3NlKHNvY2tldF9saW5rX2ZkKTtcbiYjNDM7XG4gXHQvKiBBdHRhY2ggYW5vdGhlciBpbnN0YW5jZSBvZiBiaW5kIHByb2dyYW0gdG8gYW5vdGhlciBjZ3JvdXAuXG4gXHQgKiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSByZXVzZSBvZiB0aGUgdHJhbXBvbGluZSBzaGltICh0d29cbiBcdCAqIHByb2dyYW1zIGF0dGFjaGluZyB0byB0aGUgc2FtZSBidGZfaWQpLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG5pbmRleCAzYmZhNDc5MTA0YmU4Li4zMDcyNzk0NWNlY2MzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuQEAgLTIxMyw2ICYjNDM7MjEzLDEyIEBAIGludCBCUEZfUFJPRyhzb2NrZXRfZmlyc3QsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7bHNtL3NvY2tldF9jcmVhdGVcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhzb2NrZXRfY3JlYXRlX2xzbSwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7bHNtX2Nncm91cC9zb2NrZXRfY3JlYXRlXCYjMzQ7KVxuIGludCBCUEZfUFJPRyhzb2NrZXRfc2Vjb25kLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybilcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmNcbmluZGV4IDRmYWJhODhlNDVhNWEuLjEwNzQyOTYzOGY1NDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG5AQCAtMjAsNSAmIzQzOzIwLDE2IEBAIGludCBlZ3Jlc3NfYWx0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1jaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztTRUMoXCYjMzQ7Y2dyb3VwL3NlbmRtc2c0XCYjMzQ7KVxuJiM0MztpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4gXG4mIzQzO1NFQyhcJiMzNDtjZ3JvdXAvc2VuZG1zZzZcJiMzNDspXG4mIzQzO2ludCBzZW5kbXNnNihzdHJ1Y3QgYnBmX3NvY2tfYWRkciAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGZkOWI2MTUwNzdmMjk0NzdjZWQ3NGMxNWYzZmJkNjE4NmVkMDM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNjoyODoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggNjg3NGJhMTQyNGFmMC4uMmJjZDNmM2EyYTU1OSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmMKQEAgLTQ0ODEsMTQgJiM0Mzs0NDgxLDkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCWNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOgogCWNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDoKIAljYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOgomIzQzOwljYXNlIEJQRl9QUk9HX1RZUEVfTFNNOgogCQlyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDsKIAljYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjoKLQkJaWYgKCFicGZfdG9rZW5fY2FwYWJsZShwcm9nLSZndDthdXgtJmd0O3Rva2VuLCBDQVBfTkVUX0FETUlOKSkKLQkJCS8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLgotCQkJICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuCi0JCQkgKi8KLQkJCXJldHVybiAtRVBFUk07Ci0KIAkJcHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpOwogCQlpZiAocHJvZy0mZ3Q7dHlwZSAhPSBwdHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDU0Miw2ICYjNDM7NDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJfQogfQogCiYjNDM7c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2sKJiM0MzsJICogcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgJmFtcDsmYW1wOwomIzQzOwkgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctJmd0O2F1eC0mZ3Q7dG9rZW4sIENBUF9ORVRfQURNSU4pKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLAogCQkJCWJvb2wgY2hlY2tfYXR5cGUpCiB7CkBAIC00NjA2LDcgJiM0Mzs0NjE1LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJaWYgKElTX0VSUihwcm9nKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJvZyk7CiAKLQlpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dHItJmd0O2F0dGFjaF90eXBlKSkgewomIzQzOwlpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci0mZ3Q7YXR0YWNoX3R5cGUpKSB7CiAJCWJwZl9wcm9nX3B1dChwcm9nKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTgwNSw4ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csCi0JCQkJCQlhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItJmd0O2xpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtNTk2OCw2ICYjNDM7NTk3NiwxMCBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCQlnb3RvIG91dF9wdXRfcHJvZ3M7CiAJfQogCiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay0mZ3Q7YXR0YWNoX3R5cGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0X3Byb2dzOwomIzQzOwogCWlmIChsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKQogCQlyZXQgPSBsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMKaW5kZXggMTUwOTNhNjk1MTBlYi4uM2I0M2MzNDkxN2NjYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtjYXBfaGVscGVycy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y2dyb3VwX2hlbHBlcnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3RpbmdfaGVscGVycy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9jZ3JvdXBfbGluay5za2VsLmgmIzM0OwpAQCAtMjQsNyAmIzQzOzI1LDc3IEBAIGludCBwaW5nX2FuZF9jaGVjayhpbnQgZXhwX2NhbGxzLCBpbnQgZXhwX2FsdF9jYWxscykKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfdXBkYXRlKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBfX3U2NCBjYXBzID0gKDFVTEwgJmx0OyZsdDsgQ0FQX05FVF9BRE1JTikgfCAoMVVMTCAmbHQ7Jmx0OyBDQVBfU1lTX0FETUlOKTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJX191NjQgc2F2ZWRfY2FwcyA9IDA7CiYjNDM7CWludCBjZ19mZCA9IC0xLCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2Nncm91cF9saW5rX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NnX2luaXQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWNnX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKCYjMzQ7L2Nncm91cF9saW5rX3VwZGF0ZSYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2dfZmQsIDAsICYjMzQ7Y2dfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBqb2luX2Nncm91cCgmIzM0Oy9jZ3JvdXBfbGlua191cGRhdGUmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjZ19qb2luJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3Muc2VuZG1zZzQsIGNnX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssICYjMzQ7YXR0YWNoX3NlbmRtc2c0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC0mZ3Q7cHJvZ3Muc2VuZG1zZzYpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCAmIzM0O3JlamVjdF9zZW5kbXNnNl91cGRhdGUmIzM0Oyk7CiYjNDM7CWJwZl9saW5rX19kZXN0cm95KGxpbmspOwomIzQzOwlsaW5rID0gTlVMTDsKJiM0MzsKJiM0MzsJZXJyID0gY2FwX2Rpc2FibGVfZWZmZWN0aXZlKGNhcHMsICZhbXA7c2F2ZWRfY2Fwcyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtkcm9wX2NhcHNfZm9yX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLmVncmVzcywgY2dfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssICYjMzQ7YXR0YWNoX3dpdGhvdXRfbmV0X2FkbWluJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspOwomIzQzOwlsaW5rID0gTlVMTDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoZXJyLCAtRVBFUk0sICYjMzQ7YXR0YWNoX2VyciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gY2FwX2VuYWJsZV9lZmZlY3RpdmUoc2F2ZWRfY2FwcyAmYW1wOyBjYXBzLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Jlc3RvcmVfY2Fwc19mb3JfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3MuZWdyZXNzLCBjZ19mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9lZ3Jlc3MmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCAmYW1wO3NhdmVkX2NhcHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7ZHJvcF9jYXBzJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC0mZ3Q7cHJvZ3MuZWdyZXNzX2FsdCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7dXBkYXRlX3dpdGhvdXRfbmV0X2FkbWluJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgJmFtcDsgY2FwcywgTlVMTCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7cmVzdG9yZV9jYXBzJiMzNDspOwomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKGNnX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ19mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7CXRlc3RfY2dyb3VwX2xpbmtfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXNrZWwgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCh2b2lkKQogewogCXN0cnVjdCB7CiAJCWNvbnN0IGNoYXIgKnBhdGg7CkBAIC0yNTMsMyAmIzQzOzMyNCwxMSBAQCB2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpCiAJfQogCWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiB9CiYjNDM7CiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQl0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCgpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VwZGF0ZSYjMzQ7KSkKJiM0MzsJCXRlc3RfY2dyb3VwX2xpbmtfdXBkYXRlKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jCmluZGV4IDQxZTg2NzQ2N2Y2YzYuLjBkZDQ0ZGJiOWM5NWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMKQEAgLTc0LDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpCiAJaW50IGJpbmRfcHJvZ19mZCA9IC0xOwogCWludCBiaW5kX2xpbmtfZmQgPSAtMTsKIAlpbnQgY2xvbmVfcHJvZ19mZCA9IC0xOwomIzQzOwlpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTsKIAlpbnQgZXJyLCBmZCwgcHJpbzsKIAlzb2NrbGVuX3Qgc29ja2xlbjsKIApAQCAtMTU2LDYgJiM0MzsxNTcsMTcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZCkKIAlBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCAmIzM0O2JwZl9sc21fc29ja2V0X2JpbmQmIzM0OyksIDEsICYjMzQ7cHJvZyBjb3VudCYjMzQ7KTsKIAlBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBOVUxMKSwgNCwgJiMzNDt0b3RhbCBwcm9nIGNvdW50JiMzNDspOwogCiYjNDM7CXNvY2tldF9saW5rX2ZkID0KJiM0MzsJCWJwZl9saW5rX2NyZWF0ZShicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Muc29ja2V0X2ZpcnN0KSwKJiM0MzsJCQkJY2dyb3VwX2ZkLCBCUEZfTFNNX0NHUk9VUCwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNvY2tldF9saW5rX2ZkLCAwLCAmIzM0O2xpbmsgY3JlYXRlIHNvY2tldF9maXJzdCYjMzQ7KSkKJiM0MzsJCWdvdG8gZGV0YWNoX2Nncm91cDsKJiM0MzsJZXJyID0gYnBmX2xpbmtfdXBkYXRlKHNvY2tldF9saW5rX2ZkLAomIzQzOwkJCSAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5zb2NrZXRfY3JlYXRlX2xzbSksCiYjNDM7CQkJICAgICAgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FSU5WQUwsICYjMzQ7cmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGUmIzM0Oyk7CiYjNDM7CWNsb3NlKHNvY2tldF9saW5rX2ZkKTsKJiM0MzsKIAkvKiBBdHRhY2ggYW5vdGhlciBpbnN0YW5jZSBvZiBiaW5kIHByb2dyYW0gdG8gYW5vdGhlciBjZ3JvdXAuCiAJICogVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgcmV1c2Ugb2YgdGhlIHRyYW1wb2xpbmUgc2hpbSAodHdvCiAJICogcHJvZ3JhbXMgYXR0YWNoaW5nIHRvIHRoZSBzYW1lIGJ0Zl9pZCkuCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYwppbmRleCAzYmZhNDc5MTA0YmU4Li4zMDcyNzk0NWNlY2MzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMKQEAgLTIxMyw2ICYjNDM7MjEzLDEyIEBAIGludCBCUEZfUFJPRyhzb2NrZXRfZmlyc3QsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7bHNtL3NvY2tldF9jcmVhdGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0coc29ja2V0X2NyZWF0ZV9sc20sIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7bHNtX2Nncm91cC9zb2NrZXRfY3JlYXRlJiMzNDspCiBpbnQgQlBGX1BST0coc29ja2V0X3NlY29uZCwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pCiB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYwppbmRleCA0ZmFiYTg4ZTQ1YTVhLi4xMDc0Mjk2MzhmNTQzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMKQEAgLTIwLDUgJiM0MzsyMCwxNiBAQCBpbnQgZWdyZXNzX2FsdChzdHJ1Y3QgX19za19idWZmICpza2IpCiAJcmV0dXJuIDE7CiB9CiAKLWNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MztTRUMoJiMzNDtjZ3JvdXAvc2VuZG1zZzQmIzM0OykKJiM0MztpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAxOwomIzQzO30KIAomIzQzO1NFQygmIzM0O2Nncm91cC9zZW5kbXNnNiYjMzQ7KQomIzQzO2ludCBzZW5kbXNnNihzdHJ1Y3QgYnBmX3NvY2tfYWRkciAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBhbmQgRGV0ZXJtaW5pbmcgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5IGxpdmVzLiBJIHNlZSB0aGV5JiMzOTt2ZSBtYWRlIHNvbWUgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGF0dGFjaG1lbnQgYW5kIHBlcm1pc3Npb25zIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV54oCZdmUgaW50cm9kdWNlZCBhIG5ldyBjYXNlIGZvciBgQlBGX1BST0dfVFlQRV9MU01gIHdpdGhpbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgd2hpY2ggbm93IGV4cGxpY2l0bHkgdmVyaWZpZXMgdGhlIGV4cGVjdGVkIGF0dGFjaG1lbnQgdHlwZS4gVGhhdCYjMzk7cyBnb29kLCBncmFudWxhciBjb250cm9sLiBUaGUgcmVtb3ZhbCBvZiB0aGUgY2FwYWJpbGl0eSBjaGVjayBmcm9tIHRoZSBgQ0dST1VQX1NLQmAgdHlwZSBpbiB0aGUgc2FtZSBmdW5jdGlvbiBjYXVnaHQgbXkgZXllIOKAkyB0aGUgaW50cm9kdWN0aW9uIG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAgaXMgdGhlIHJlcGxhY2VtZW50LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LgoKRGlnZ2luZyBpbnRvIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAsIGl0IGNsZWFybHkgaGFuZGxlcyB0aGUgcGVybWlzc2lvbnMgZm9yIGBDR1JPVVBfU0tCYCB0eXBlcyBieSBjaGVja2luZyBmb3IgdGhlIGBDQVBfTkVUX0FETUlOYCBjYXBhYmlsaXR5LiBJdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyB0byBzZXBhcmF0ZSBwZXJtaXNzaW9uIGxvZ2ljIGZyb20gdHlwZSB2ZXJpZmljYXRpb24sIGJ1dCBpdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYXR0YWNobWVudCBsb2dpYyBhbmQgcmVxdWlyZXMgZGVlcGVyIHNjcnV0aW55LiBUaGUgZmFjdCB0aGF0IGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgIG5vdyB1c2UgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBoaWdobGlnaHRzIHRoaXMuIFRoZSBhZGRpdGlvbiBvZiB0aGUgbmV3IGNoZWNrIGluIGBsaW5rX3VwZGF0ZWAgaXMgaW1wb3J0YW50LCB0b28uCgpUaGUgcHJlc2VuY2Ugb2Ygc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYCBmb3IgY2dyb3VwIGxpbmsgdXBkYXRlcyBhbmQgTFNNIGNncm91cCBsaW5rIHVwZGF0ZXMgaXMgaGVscGZ1bCwgYXMgdGhlc2UgdGVzdHMgc2hvdWxkIHByb3ZpZGUgc29tZSBiYXNpYyBjb3ZlcmFnZS4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBYnNvbHV0ZWx5ISBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBjb250YWlucyB0aGUgYGJwZigyKWAgc3lzY2FsbCBoYW5kbGVycyDigJMgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGBsaW5rX3VwZGF0ZWAsIGFuZCB0aGUgYWxsLWltcG9ydGFudCBjaGVjayBmdW5jdGlvbnMuIEdpdmVuIHRoZSBCUEYgc3lzY2FsbCBpcyBmdW5kYW1lbnRhbCwgdGhpcyBpcyByZWFkaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBCUEYgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfQVRUQUNIYCwgYEJQRl9MSU5LX0NSRUFURWAsIGFuZCBgQlBGX0xJTktfVVBEQVRFYC4KCk5leHQsIGlzIHRoaXMgcGF0Y2ggJiMzNDtXb3J0aEZ1enppbmcmIzM0Oz8gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY3JpdGVyaWEgZm9yIHdvcnRoaW5lc3MsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gQWNjb3JkaW5nIHRvIHRoZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgY3JpdGVyaWEsIGFueSBjaGFuZ2VzIHRvIHRoZSBCUEYgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGFyb3VuZCBzeXNjYWxsIGhhbmRsaW5nIGFuZCBwZXJtaXNzaW9uIGNoZWNrcywgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGVybWlzc2lvbiBjaGVjayBsb2dpYyBmb3IgbGluayBjcmVhdGlvbiwgbGluayB1cGRhdGluZywgYW5kIGF0dGFjaG1lbnQsIGFuZCBhZGRzIG5ldyB0eXBlIHZlcmlmaWNhdGlvbiBpbiBgbGlua191cGRhdGVgLCBhcyB3ZWxsIGFzIGNoZWNrcyBmb3IgTFNNIHByb2dyYW0gYXR0YWNoIHR5cGUuIFRoZXNlIG1vZGlmaWNhdGlvbnMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgZXhwb3NlZCB2aWEgdGhlIEJQRiBzeXNjYWxsIGludGVyZmFjZSwgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gaWRlbnRpZnkgYW55IHJlbGV2YW50IENPTkZJRyByZXF1aXJlbWVudHMgZm9yIHRoZSBjb2RlLCB0byBlbnN1cmUgZnV6emluZyBpcyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIENPTkZJR3MgcmVxdWlyZWQgZm9yIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX1RZUEVfTFNNYCBhbmQgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIHByb2Nlc3MgaXMgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX0tFWVMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGtleXMub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zNj1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOC1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDItZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQ2PWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFzay5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ5LSMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcnlwdG8ub1xua2VybmVsL2JwZi9NYWtlZmlsZS02My1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT02ND1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xua2VybmVsL2JwZi9NYWtlZmlsZS02NS1cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfcmVsb2NhdGUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBrbWVtX2NhY2hlX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS03MC1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZG1hYnVmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS03Mi1lbmRpZlxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTQzLVxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTE0NS1cdGJwZl9wcm9nX3N0cmVhbV9pbml0KGZwKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDczPUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjQ3Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI0Nzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3OC1pbnQgYnBmX3BhdGNoX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiBzdGFja19kZXB0aClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDQxPXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxua2VybmVsL2JwZi9jb3JlLmMtMzA0Mi17XG5rZXJuZWwvYnBmL2NvcmUuYzozMDQzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwNDQtXHRzdHJ1Y3QgYnRmX21vZF9wYWlyICpidGZfbW9kO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMwNjI9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzA2Ny1cdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcbmtlcm5lbC9icGYvY29yZS5jOjMwNjg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzA2OS1cdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVx1MDAzZWtmdW5jX2J0Zl90YWIpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMzOTQ9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxua2VybmVsL2JwZi9jb3JlLmMtMzM5NS17XG5rZXJuZWwvYnBmL2NvcmUuYzozMzk2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMzOTctXHRzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSBzcztcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDM0PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTM0MzgtXG5rZXJuZWwvYnBmL2NvcmUuYzozNDM5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0NDAtX193ZWFrIGJvb2wgYnBmX2FyZW5hX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDY1PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xua2VybmVsL2JwZi9jb3JlLmMtMzQ2Ni1cbmtlcm5lbC9icGYvY29yZS5jOjM0Njc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzQ2OC1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjEtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MjI6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMy1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzY5PXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODA3Olx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIEJQRiBTeXNjYWxsIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQlBGIHN5c2NhbGwgaW1wbGVtZW50YXRpb24gYmV0dGVyLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhIGNvdXBsZSBvZiBzcGVjaWZpYyBzZWN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBGaXJzdCwgSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyBsaW5lcyA0NDgwIHRocm91Z2ggNDYyMC4gVGhpcyBjaHVuayBwcm9iYWJseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBzeXNjYWxsIGhhbmRsaW5nLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIG9yIHBlcmhhcHMgYSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSBvciB2YWxpZGF0aW9uIHN0YWdlLiBUaGVuLCBJIHdpbGwgbW92ZSBvbiBhbmQgc2NydXRpbml6ZSBsaW5lcyA1ODAwLTYwMDAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSBoYW5kbGluZyBhIGRpZmZlcmVudCBmdW5jdGlvbiBvciBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtIG9yIGEgY3JpdGljYWwgbG9vcC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgYmVmb3JlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgZmxvd3MgYW5kIGFueSBlcnJvciBoYW5kbGluZyBpbiB0aGVzZSBwYXJ0cyBvZiB0aGUgY29kZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDc1Olx0XHRcdFx0XHRcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG40NDc2Olx0e1xuNDQ3NzpcdFx0ZW51bSBicGZfcHJvZ190eXBlIHB0eXBlO1xuNDQ3ODpcdFxuNDQ3OTpcdFx0c3dpdGNoIChwcm9nLVx1MDAzZXR5cGUpIHtcbjQ0ODA6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSzpcbjQ0ODE6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxuNDQ4MjpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxuNDQ4MzpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcbjQ0ODQ6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG40NDg1Olx0XHRcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XG40NDg2Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbjQ0ODc6XHRcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuNDQ4ODpcdFx0XHRpZiAocHJvZy1cdTAwM2V0eXBlICE9IHB0eXBlKVxuNDQ4OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ5MDpcdFxuNDQ5MTpcdFx0XHRyZXR1cm4gcHJvZy1cdTAwM2VlbmZvcmNlX2V4cGVjdGVkX2F0dGFjaF90eXBlIFx1MDAyNlx1MDAyNlxuNDQ5MjpcdFx0XHRcdHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR0YWNoX3R5cGUgP1xuNDQ5MzpcdFx0XHRcdC1FSU5WQUwgOiAwO1xuNDQ5NDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0VYVDpcbjQ0OTU6XHRcdFx0cmV0dXJuIDA7XG40NDk2Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfTkVURklMVEVSOlxuNDQ5NzpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX05FVEZJTFRFUilcbjQ0OTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ0OTk6XHRcdFx0cmV0dXJuIDA7XG40NTAwOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcbjQ1MDE6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxuNDUwMjpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1BFUkZfRVZFTlQpXG40NTAzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTA0Olx0XHRcdHJldHVybiAwO1xuNDUwNTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0tQUk9CRTpcbjQ1MDY6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MDc6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkpXG40NTA4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTA5Olx0XHRcdGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTiBcdTAwMjZcdTAwMjZcbjQ1MTA6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTilcbjQ1MTE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MTI6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MTM6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkpXG40NTE0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTE1Olx0XHRcdGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTiBcdTAwMjZcdTAwMjZcbjQ1MTY6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTilcbjQ1MTc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MTg6XHRcdFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9QRVJGX0VWRU5UIFx1MDAyNlx1MDAyNlxuNDUxOTpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MjA6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTiBcdTAwMjZcdTAwMjZcbjQ1MjE6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkgXHUwMDI2XHUwMDI2XG40NTIyOlx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04pXG40NTIzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTI0Olx0XHRcdHJldHVybiAwO1xuNDUyNTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcbjQ1MjY6XHRcdFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9UQ1hfSU5HUkVTUyBcdTAwMjZcdTAwMjZcbjQ1Mjc6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UQ1hfRUdSRVNTIFx1MDAyNlx1MDAyNlxuNDUyODpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX05FVEtJVF9QUklNQVJZIFx1MDAyNlx1MDAyNlxuNDUyOTpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX05FVEtJVF9QRUVSKVxuNDUzMDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUzMTpcdFx0XHRyZXR1cm4gMDtcbjQ1MzI6XHRcdGRlZmF1bHQ6XG40NTMzOlx0XHRcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcbjQ1MzQ6XHRcdFx0aWYgKHB0eXBlID09IEJQRl9QUk9HX1RZUEVfVU5TUEVDIHx8IHB0eXBlICE9IHByb2ctXHUwMDNldHlwZSlcbjQ1MzU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MzY6XHRcdFx0cmV0dXJuIDA7XG40NTM3Olx0XHR9XG40NTM4Olx0fVxuNDUzOTpcdFxuNDU0MDpcdHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuNDU0MTpcdFx0XHRcdFx0ICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG40NTQyOlx0e1xuNDU0MzpcdFx0LypcbjQ1NDQ6XHRcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXG40NTQ1Olx0XHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbjQ1NDY6XHRcdCAqL1xuNDU0NzpcdFx0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG40NTQ4Olx0XHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbjQ1NDk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjQ1NTA6XHRcbjQ1NTE6XHRcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuNDU1MjpcdH1cbjQ1NTM6XHRcbjQ1NTQ6XHRzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoaXMgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyBga2VybmVsL2JwZi9zeXNjYWxsLmNgIC0gTGluZXMgNTgwMC02MDAwKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU4MDAgdG8gNjAwMC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkIG9yIGNhbGxlZCBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgYSBzcGVjaWZpYyBCUEYgc3lzdGVtIGNhbGwgb3IgYSBzZWdtZW50IG9mIGEgbGFyZ2VyIHN5c3RlbSBjYWxsJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLgoKTXkgZmlyc3QgZ3Vlc3MgaXMgdGhhdCB3ZSBhcmUgaW4gdGhlIGNvbnRleHQgb2YgYW4gYWN0dWFsIEJQRiBwcm9ncmFtLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Npbmcgb2Ygc29tZSBCUEYgc3lzdGVtIGNhbGwuIEkmIzM5O20gbWVudGFsbHkgY2hlY2tpbmcgd2hhdCBjYWxscyBhcmUgaW4gdGhlIHN5c3RlbSBjYWxscyBsaWtlIGBicGZfcHJvZ19sb2FkYCBvciBgYnBmX3Byb2dfYXR0YWNoYC4gSXMgaXQgdmFsaWRhdGlvbj8gU2VjdXJpdHkgY2hlY2tzPyBSZXNvdXJjZSBhY2NvdW50aW5nPyBPciBtYXliZSBpdCBpcyBzb21lIHNvcnQgb2YgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgZXZlbiBiZSByZWxhdGVkIHRvIHRoZSB0cmFjaW5nIEFQSSwgZ2l2ZW4gd2hlcmUgd2UgYXJlLgoKSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBgc3lzY2FsbC5jYC4gV2hlcmUgaW4gdGhlIGZsb3cgZG9lcyB0aGlzIGZhbGw/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG9zc2libHkgc2VlaW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQlBGIHZlcmlmaWVyIG9yIHRoZSBKSVQgY29tcGlsZXIsIGRlcGVuZGluZyBvbiB0aGUgbmF0dXJlIG9mIHRoZSBzcGVjaWZpYyBCUEYgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZC4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyDigJMgdGhvc2UgYXJlIGFsd2F5cyBhIGNvbmNlcm4gaW4gdGhpcyBhcmVhLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGhvb2sgcG9pbnQgb3IgYSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbiBoYXBwZW5pbmcgaGVyZSB0aGF0IGlzIHdvcnRoIG5vdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTgwNTpcdFx0aW50IHJldDtcbjU4MDY6XHRcbjU4MDc6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9MSU5LX0NSRUFURSkpXG41ODA4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTgwOTpcdFxuNTgxMDpcdFx0aWYgKGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgPT0gQlBGX1NUUlVDVF9PUFMpXG41ODExOlx0XHRcdHJldHVybiBicGZfc3RydWN0X29wc19saW5rX2NyZWF0ZShhdHRyKTtcbjU4MTI6XHRcbjU4MTM6XHRcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5wcm9nX2ZkKTtcbjU4MTQ6XHRcdGlmIChJU19FUlIocHJvZykpXG41ODE1Olx0XHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuNTgxNjpcdFxuNTgxNzpcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG41ODE4Olx0XHRpZiAocmV0KVxuNTgxOTpcdFx0XHRnb3RvIG91dDtcbjU4MjA6XHRcbjU4MjE6XHRcdHN3aXRjaCAocHJvZy1cdTAwM2V0eXBlKSB7XG41ODIyOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbjU4MjM6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSzpcbjU4MjQ6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxuNTgyNTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTOlxuNTgyNjpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9ERVZJQ0U6XG41ODI3Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NZU0NUTDpcbjU4Mjg6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcbjU4Mjk6XHRcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbjU4MzA6XHRcdFx0YnJlYWs7XG41ODMxOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxuNTgzMjpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxuNTgzMzpcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcbjU4MzQ6XHRcdFx0XHRcdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfYnRmX2lkLFxuNTgzNTpcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmcuY29va2llLFxuNTgzNjpcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbjU4Mzc6XHRcdFx0YnJlYWs7XG41ODM4Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxuNTgzOTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1RSQUNJTkc6XG41ODQwOlx0XHRcdGlmIChhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlICE9IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpIHtcbjU4NDE6XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuNTg0MjpcdFx0XHRcdGdvdG8gb3V0O1xuNTg0MzpcdFx0XHR9XG41ODQ0Olx0XHRcdGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9SQVdfVFApXG41ODQ1Olx0XHRcdFx0cmV0ID0gYnBmX3Jhd190cF9saW5rX2F0dGFjaChwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmcuY29va2llLFxuNTg0NjpcdFx0XHRcdFx0XHRcdCAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG41ODQ3Olx0XHRcdGVsc2UgaWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0lURVIpXG41ODQ4Olx0XHRcdFx0cmV0ID0gYnBmX2l0ZXJfbGlua19hdHRhY2goYXR0ciwgdWF0dHIsIHByb2cpO1xuNTg0OTpcdFx0XHRlbHNlIGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxuNTg1MDpcdFx0XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG41ODUxOlx0XHRcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXG41ODUyOlx0XHRcdFx0cmV0ID0gYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHByb2csIGF0dHIpO1xuNTg1MzpcdFx0XHRlbHNlXG41ODU0Olx0XHRcdFx0cmV0ID0gYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gocHJvZyxcbjU4NTU6XHRcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcbjU4NTY6XHRcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9idGZfaWQsXG41ODU3Olx0XHRcdFx0XHRcdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nLmNvb2tpZSxcbjU4NTg6XHRcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbjU4NTk6XHRcdFx0YnJlYWs7XG41ODYwOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1I6XG41ODYxOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuNTg2MjpcdFx0XHRyZXQgPSBuZXRuc19icGZfbGlua19jcmVhdGUoYXR0ciwgcHJvZyk7XG41ODYzOlx0XHRcdGJyZWFrO1xuNTg2NDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX01TRzpcbjU4NjU6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG41ODY2Olx0XHRcdHJldCA9IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGF0dHIsIHByb2cpO1xuNTg2NzpcdFx0XHRicmVhaztcbjU4Njg6XHQjaWZkZWYgQ09ORklHX05FVFxuNTg2OTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1hEUDpcbjU4NzA6XHRcdFx0cmV0ID0gYnBmX3hkcF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbjU4NzE6XHRcdFx0YnJlYWs7XG41ODcyOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxuNTg3MzpcdFx0XHRpZiAoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSA9PSBCUEZfVENYX0lOR1JFU1MgfHxcbjU4NzQ6XHRcdFx0ICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgPT0gQlBGX1RDWF9FR1JFU1MpXG41ODc1Olx0XHRcdFx0cmV0ID0gdGN4X2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xuNTg3NjpcdFx0XHRlbHNlXG41ODc3Olx0XHRcdFx0cmV0ID0gbmV0a2l0X2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xuNTg3ODpcdFx0XHRicmVhaztcbjU4Nzk6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9ORVRGSUxURVI6XG41ODgwOlx0XHRcdHJldCA9IGJwZl9uZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbjU4ODE6XHRcdFx0YnJlYWs7XG41ODgyOlx0I2VuZGlmXG41ODgzOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcbjU4ODQ6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzOgoKKipBbmFseXppbmcgYGxpbmtfdXBkYXRlYCBBcm91bmQgTGluZSA1OTUwLTYwMDAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBsaW5rX3VwZGF0ZWAgYmV0d2VlbiBsaW5lcyA1OTUwIGFuZCA2MDAwLiBDb25zaWRlcmluZyBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBzeXN0ZW1zLCB0aGlzIGlzIGxpa2VseSBhIGNydWNpYWwgc2VjdGlvbi4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBoYW5kbGluZyBhIHNwZWNpZmljIHVwZGF0ZSByZWxhdGVkIHRvIGxpbmtpbmcsIHdoaWNoIGNvdWxkIG1lYW4gYW55dGhpbmcgZnJvbSBncmFwaCB0cmF2ZXJzYWxzIHRvIHJlc291cmNlIGFzc2lnbm1lbnRzLCBvciBtYXliZSBldmVuIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBsaW5lIG51bWJlcnMgY2FuIGJlIGltcHJlY2lzZSB3aXRob3V0IHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZmlsZSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiBjYWxscyBpbW1lZGlhdGVseSBhcm91bmQgdGhhdCByYW5nZSB0byBnZXQgdGhlIGJlc3QgZmVlbCBmb3IgdGhlIGludGVudC4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBjb21wbGV4IGludGVycGxheSBvZiBkYXRhIHN0cnVjdHVyZXMsIHBvdGVudGlhbGx5IGludm9sdmluZyB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIHNwZWNpZmljIGxpbmssIHRoZSB2YWxpZGF0aW9uIG9mIGl0cyBwcm9wZXJ0aWVzLCBhbmQgdGhlIGNhc2NhZGluZyBlZmZlY3RzIG9mIHRoYXQgdXBkYXRlIG9uIGRlcGVuZGVudCBjb21wb25lbnRzLiBLbm93aW5nIGhvdyB0aG9yb3VnaGx5IHRoZSBkZXZlbG9wZXJzIHRob3VnaHQgdGhyb3VnaCB0aG9zZSBlZGdlIGNhc2VzIHdpbGwgcHJvdmlkZSBhIHF1aWNrIHNlbnNlIG9mIHRoZSBjb2RlJiMzOTtzIG1hdHVyaXR5LiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgc3BvdCB0aGUgaGlnaC1sZXZlbCBsb2dpYyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB0aGF0IG1pZ2h0IHJlcXVpcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgYmUgc3ViamVjdCB0byBhIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU5NTE6XHRcbjU5NTI6XHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmxpbmtfZmQpO1xuNTk1MzpcdFx0aWYgKElTX0VSUihsaW5rKSlcbjU5NTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIobGluayk7XG41OTU1Olx0XG41OTU2Olx0XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xuNTk1NzpcdFx0XHRyZXQgPSBsaW5rX3VwZGF0ZV9tYXAobGluaywgYXR0cik7XG41OTU4Olx0XHRcdGdvdG8gb3V0X3B1dF9saW5rO1xuNTk1OTpcdFx0fVxuNTk2MDpcdFxuNTk2MTpcdFx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5uZXdfcHJvZ19mZCk7XG41OTYyOlx0XHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuNTk2MzpcdFx0XHRyZXQgPSBQVFJfRVJSKG5ld19wcm9nKTtcbjU5NjQ6XHRcdFx0Z290byBvdXRfcHV0X2xpbms7XG41OTY1Olx0XHR9XG41OTY2Olx0XG41OTY3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbjU5Njg6XHRcdFx0b2xkX3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCk7XG41OTY5Olx0XHRcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XG41OTcwOlx0XHRcdFx0cmV0ID0gUFRSX0VSUihvbGRfcHJvZyk7XG41OTcxOlx0XHRcdFx0b2xkX3Byb2cgPSBOVUxMO1xuNTk3MjpcdFx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbjU5NzM6XHRcdFx0fVxuNTk3NDpcdFx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG41OTc1Olx0XHRcdHJldCA9IC1FSU5WQUw7XG41OTc2Olx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbjU5Nzc6XHRcdH1cbjU5Nzg6XHRcbjU5Nzk6XHRcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay1cdTAwM2VhdHRhY2hfdHlwZSk7XG41OTgwOlx0XHRpZiAocmV0KVxuNTk4MTpcdFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG41OTgyOlx0XG41OTgzOlx0XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cpXG41OTg0Olx0XHRcdHJldCA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7XG41OTg1Olx0XHRlbHNlXG41OTg2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG41OTg3Olx0XG41OTg4Olx0b3V0X3B1dF9wcm9nczpcbjU5ODk6XHRcdGlmIChvbGRfcHJvZylcbjU5OTA6XHRcdFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcbjU5OTE6XHRcdGlmIChyZXQpXG41OTkyOlx0XHRcdGJwZl9wcm9nX3B1dChuZXdfcHJvZyk7XG41OTkzOlx0b3V0X3B1dF9saW5rOlxuNTk5NDpcdFx0YnBmX2xpbmtfcHV0X2RpcmVjdChsaW5rKTtcbjU5OTU6XHRcdHJldHVybiByZXQ7XG41OTk2Olx0fVxuNTk5NzpcdFxuNTk5ODpcdCNkZWZpbmUgQlBGX0xJTktfREVUQUNIX0xBU1RfRklFTEQgbGlua19kZXRhY2gubGlua19mZFxuNTk5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDk2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZywgc3BlY2lmaWNhbGx5IGhvdyBpdCBhZmZlY3RzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmtpbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgZGlyZWN0bHkgY2FsbGVkIGBsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nYCB3aXRob3V0IHBlcmZvcm1pbmcgYSBjcnVjaWFsIGNoZWNrOiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLSZndDthdHRhY2hfdHlwZSlgLiBOb3csIHRoYXQgY2hlY2sgaXMgYmVpbmcgZG9uZSAqYmVmb3JlKiB0aGUgdXBkYXRlLCB3aGljaCBpcyBnb29kLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgaXMgZG9pbmcuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHZhbGlkYXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgb2YgYSBwcm9ncmFtJiMzOTtzIHR5cGUgd2l0aCB0aGUgYXR0YWNobWVudCB0eXBlLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaGFkIGEgY3JpdGljYWwgb3ZlcnNpZ2h0LCBuYW1lbHkgdGhhdCBpdCBkaWRuJiMzOTt0IGhhbmRsZSBgQlBGX1BST0dfVFlQRV9MU01gIGNvcnJlY3RseS4gSXQgYXBwZWFycyB0aGF0IHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfUFJPR19UWVBFX0xTTWAgYW5kIGBCUEZfTFNNX0NHUk9VUGAgdGhlIGNoZWNrIHdvdWxkIHBhc3MgZXZlbiB3aGVuIHRoZSBwcm9ncmFtJiMzOTtzICpleHBlY3RlZCogYXR0YWNoIHR5cGUgZGlkbiYjMzk7dCBtYXRjaCB0aGUgb25lIGJlaW5nIHVzZWQsIHdoaWNoIGlzIGEgbWFqb3Igc2VjdXJpdHkgZmxhdy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgY2FzZSBCUEZfUFJPR19UWVBFX0xTTWAgYWRkcmVzc2VzIHRoaXMgdnVsbmVyYWJpbGl0eSwgZW5zdXJpbmcgdGhlIGBleHBlY3RlZF9hdHRhY2hfdHlwZWAgYWxpZ25zIHdpdGggdGhlIGFjdHVhbCBgYXR0YWNoX3R5cGVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc291bmQuCgpUaGUgdGhpcmQgY2hhbmdlIGludm9sdmVzIHNlcGFyYXRpbmcgdGhlIHBlcm1pc3Npb24gY2hlY2sgZm9yIGBDR1JPVVBfU0tCYCBmcm9tIHRoZSBgYXR0YWNoX3R5cGVgIHZhbGlkYXRpb24uIEl0JiMzOTtzIGEgc21hcnQgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4KCk5vdyBJIG5lZWQgdG8gZm9jdXMgb24ga2V5IHN5bWJvbHMuIFRoZXNlIGFyZSBnb2luZyB0byBiZSBteSBmb2N1cyBwb2ludHM6IGBicGZfcHJvZ19hdHRhY2hgIChhbmQsIGNvbnNlcXVlbnRseSwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWApLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC4KCkkga25vdyB0aGVzZSBhcmUgYWxsIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCYjMzk7cyBjb25maXJtOiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBhbmQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCBhcmUgc3RhdGljLiBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAgYXJlIGFsc28gc3RhdGljLCBhbmQgY2FsbGVkIGluIGBfX3N5c19icGZgLiBUaGVzZSBhbGwgdHlwaWNhbGx5IGV4aXN0IGFzIHN5bWJvbHMgaW4gdm1saW51eC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIG5hcnJvdyBkb3duIG15IGZvY3VzIHRvIHRob3NlIGZpdmUgc3ltYm9sczogYGxpbmtfdXBkYXRlYCwgYGxpbmtfY3JlYXRlYCwgYGJwZl9wcm9nX2F0dGFjaGAsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBhbmQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYC4KCkFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICp1YmlxdWl0b3VzKj8gTm8uIFRoZXkgYXJlIEJQRi1zcGVjaWZpYyBlbnRyeSBwb2ludHMgYW5kIGhlbHBlcnMgcmVsYXRlZCB0byBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgbWFuYWdlbWVudCwgbm90IGdlbmVyYWwga2VybmVsIHV0aWxpdGllcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRvIGNvbXBpbGUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX0JQRl9MU01gLCBgQ09ORklHX0NHUk9VUF9CUEZgLCBvciBzaW1wbHkgYENPTkZJR19CUEZgIGFyZSBuZWVkZWQuIEtjb25maWcgd2lsbCBiZSBteSBndWlkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzYzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIGZvciBCUEZfU1lTQ0FMTCBpbiBLY29uZmlncyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCBhY3Jvc3MgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBpc24mIzM5O3QgdXN1YWxseSBzb21ldGhpbmcgSSYjMzk7ZCBhcHByb2FjaCB3aXRob3V0IGEgc3BlY2lmaWMgY29udGV4dCwgc28gSSYjMzk7bSBsaWtlbHkgZGVidWdnaW5nIGEgcmVsYXRlZCBpc3N1ZSwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgZW5hYmxlbWVudCBkZXBlbmRlbmNpZXMsIG9yIHBvc3NpYmx5IGxvb2tpbmcgYXQgaG93IGl0JiMzOTtzIGhhbmRsZWQgaW4gYSBwYXJ0aWN1bGFyIHN1Yi1hcmNoaXRlY3R1cmUgb3IgZGlzdHJvLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cga2lja3MgaW46IEkgY291bGQgdXNlIGEgc2ltcGxlIGBncmVwYCBhY3Jvc3MgdGhlIGBLY29uZmlnYCBmaWxlcywgYnV0IEkga25vdyB0aGF0IGNhbiBiZSBpbmVmZmljaWVudCBhbmQgbWlzcyBzdWJ0bGV0aWVzLiBJIG5lZWQgdG8gYmUgbW9yZSBzdHJhdGVnaWMuIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IGJ5IGdldHRpbmcgbXkgc2VhcmNoIG9yZ2FuaXplZC4KCkkga25vdyB0aGVyZSBhcmUgdG9vbHMsIGxpa2VseSBidWlsdCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmLCB3aGljaCBjYW4gZmFjaWxpdGF0ZSB0aGlzIGxvb2t1cC4gSSB3YW50IHRoZSBtb3N0IHJlbGlhYmxlIHRvb2wsIHRoYXQgd29uJiMzOTt0IG1pc3MgYW55IGVkZ2UgY2FzZXMsIGxpa2UgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG9yIHZhcmlhYmxlIGFzc2lnbm1lbnQuIEkgbWlnaHQgc3RhcnQgd2l0aCBgZmluZGAgYW5kIGBncmVwYCBpZiBJJiMzOTttIG9uIGEgc3lzdGVtIHdpdGhvdXQgdGhlIGBrY29uZmlnLXR1aWAgYW5kIGl0cyBhc3NvY2lhdGVkIHRvb2xpbmcgcmVhZGlseSBhdmFpbGFibGUuIEhvd2V2ZXIgSSBzaG91bGQgZmlyc3QgY2hlY2sgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBuYXRpdmUgc2VhcmNoIGZ1bmN0aW9ucy4gSSBtaWdodCB1c2UgdGhlIGBtZW51Y29uZmlnYCBvciBgZGVmY29uZmlnYCB0b29scyBmb3IgYSBtb3JlIGluLWRlcHRoIGFwcHJvYWNoLCB3aGljaCBjYW4gaGlnaGxpZ2h0IGRlcGVuZGVuY2llcyBhbmQgdGhlIGxvZ2ljIGRyaXZpbmcgdGhlIG9wdGlvbiYjMzk7cyB2YWx1ZS4gCgpNeSBnb2FsczogcGlucG9pbnQgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyAqZGVmaW5lZCosIHdoZXJlIGl0JiMzOTtzICp1c2VkKiAoZS5nLiwgaW4gYGlmYCBzdGF0ZW1lbnRzLCBgc2VsZWN0YCBkaXJlY3RpdmVzLCBhc3NpZ25tZW50cyksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhpcyBhbHNvIGluY2x1ZGVzIGFueSBwb3RlbnRpYWwgYWxpYXNlcyBvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgY29udGV4dCBvZiB0aGUgc2V0dGluZyAtIGlzIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYz8gRHJpdmVyLXNwZWNpZmljPyBQYXJ0IG9mIGEgYnJvYWRlciBzZWN1cml0eSBmZWF0dXJlPyAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgZG93biB0byBhcm91bmQgbGluZSAzMCwgcmlnaHQgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCwgdGhlIG9uZXMgdGhhdCBkaWN0YXRlIHdoZXRoZXIgdGhlIEJQRiBzdWJzeXN0ZW0gZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBmdW5kYW1lbnRhbCBjb250cm9scy4gQXJlIHdlIGxvb2tpbmcgYXQgZW5hYmxpbmcgQlBGIGluIGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBtb3JlIGdyYW51bGFyIG9wdGlvbnMgdG8gY29uZmlndXJlIHNwZWNpZmljIEJQRiBmZWF0dXJlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGdhdGVrZWVwZXJzIOKAkyB0aGUgaW5pdGlhbCBib29sZWFucyB0aGF0IGRldGVybWluZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBlbnRpcmUgQlBGIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwga25vYnMgdG8gdHdpc3QgZm9yIGJyb2FkIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxuICAyNjpcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG4gIDI3Olx0XHRib29sXG4gIDI4Olx0XG4gIDI5Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDMyOlx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IEJQRlxuICAzNDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDM1Olx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzY6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzc6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM4Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzOTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDQwOlx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICA0MTpcdFx0ZGVmYXVsdCBuXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDQ6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIEJQRl9KSVRcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA1MDpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA1MzpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTQ6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1NTpcdFx0ICBwcm9ncmFtcy5cbiAgNTY6XHRcbiAgNTc6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU4Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1OTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDYwOlx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNjM6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjU6XHRcdGhlbHBcbiAgNjY6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2NzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY4Olx0XG4gIDY5Olx0XHQgIFdoZW4gQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OIGlzIGVuYWJsZWQsIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA3MDpcdFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcbiAgNzE6XHRcdCAgcmV0dXJuIGZhaWx1cmUuXG4gIDcyOlx0XG4gIDczOlx0Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxuICA3NDpcdFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDc2Olx0XG4gIDc3Olx0Y29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiAgNzg6XHRcdGJvb2wgXCYjMzQ7RGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcJiMzNDtcbiAgNzk6XHRcdGRlZmF1bHQgeVxuICA4MDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICA4MTpcdFx0aGVscFxuICA4MjpcdFx0ICBEaXNhYmxlcyB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHQgYnkgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZ1xuICA4MzpcdFx0ICAvcHJvYy9zeXMva2VybmVsL3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWQga25vYiB0byAyLiBBbiBhZG1pbiBjYW5cbiAgODQ6XHRcdCAgc3RpbGwgcmVlbmFibGUgaXQgYnkgc2V0dGluZyBpdCB0byAwIGxhdGVyIG9uLCBvciBwZXJtYW5lbnRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM6IENHUk9VUF9CUEYgYW5kIEJQRl9MU00qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIGtlcm5lbCBzZWN1cml0eSwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IHByb2plY3QuIEkgbmVlZCB0byBleHBsaWNpdGx5IGFjY291bnQgZm9yIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSB0aGV5JiMzOTtyZSBoYW5kbGVkOyB0aGV5JiMzOTtyZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgd2UgKmhhdmUqIHRvIGFkZHJlc3MuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGludGVyYWN0IHdpdGggb3VyIHNhbmRib3hpbmcvc2VjdXJpdHkgcG9saWNpZXMuIEFyZSBvdXIgZUJQRiBmaWx0ZXJzIHByb3Blcmx5IGFjY291bnRpbmcgZm9yIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBjZ3JvdXBzPyBEbyB3ZSBoYXZlIHBvdGVudGlhbCBieXBhc3NlcyBpZiBhIG1hbGljaW91cyBhY3RvciBjYW4gaW5mbHVlbmNlIGJvdGggY2dyb3VwIGFzc2lnbm1lbnRzICphbmQqIHRoZSBCUEYgY29kZT8gV2UgbmVlZCBhIGNsZWFyIGF1ZGl0IHBhdGggaGVyZS4KCkFuZCB3aGF0IGFib3V0IGBCUEZfTFNNYD8gSSBrbm93IGl0JiMzOTtzIHJlbGF0aXZlbHkgbmV3LCBidXQgdGhlIHBvd2VyIGl0IG9mZmVycywgaW4gdGhlIHdyb25nIGhhbmRzLCBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIGl0LCBob3cgd2UmIzM5O3ZlIGNvbmZpZ3VyZWQgaXQsIGFuZCwgY3JpdGljYWxseSwgaG93IHdlJiMzOTtyZSAqdmFsaWRhdGluZyogYW55IGNoYW5nZXMgbWFkZSB0aHJvdWdoIGl0LiBBcmUgb3VyIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbXMgcm9idXN0IGVub3VnaCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24/IElzIG91ciBsb2dnaW5nIHN1ZmZpY2llbnRseSBncmFudWxhciB0byBkZXRlY3QgYW5kIHJlc3BvbmQgdG8gc3VzcGljaW91cyBiZWhhdmlvciByZWxhdGVkIHRvIGBCUEZfTFNNYCBldmVudHM/IFRoaXMgcmVxdWlyZXMgbW9yZSB0aGFuIGEgY3Vyc29yeSBnbGFuY2U7IGl0IGRlc2VydmVzIGRlZXAgc2NydXRpbnkgdG8gZW5zdXJlIHdlIGhhdmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNlZCBhIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdHkuIEl0IGlzIHdvcnRoIGdvaW5nIGJhY2sgYW5kIGRpZ2dpbmcgdXAgdGhlIGRvY3VtZW50YXRpb24gdG8gZG91YmxlIGNoZWNrIGFueSBhc3N1bXB0aW9ucyBJIGhhdmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEZ8Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDU9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTUtXG5pbml0L0tjb25maWc6MTM1Njpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTctXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05ND1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05NS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Njpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgUmVsYXRlZCB0byBCUEYgYW5kIExTTSoqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgQ29tbW9uIEdyb3VwIEJQRiAoYENHUk9VUF9CUEZgKSBhbmQgdGhlIEJQRiBMU00gaW50ZWdyYXRpb24gKGBCUEZfTFNNYCkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgYW5kIGluc3BlY3QgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgYW5kIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgdGhlIGxpbmVzIG9mIGNvZGUgYXJvdW5kIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgcHJvdmlkZXMgY29udGV4dC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGNvbmZsaWN0cz8gV2hhdCBleGFjdGx5IGRvZXMgZW5hYmxpbmcvZGlzYWJsaW5nIGVhY2ggb3B0aW9uIGVudGFpbD8gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgQlBGIGZlYXR1cmVzIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgdGhleSBoYXZlLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyBJJiMzOTttIGFib3V0IHRvIGNvbmR1Y3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU1Olx0XG4xMzU2Olx0Y29uZmlnIENHUk9VUF9CUEZcbjEzNTc6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4xMzU4Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4xMzU5Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuMTM2MDpcdFx0aGVscFxuMTM2MTpcdFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXG4xMzYyOlx0XHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXG4xMzYzOlx0XG4xMzY0Olx0XHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcbjEzNjU6XHRcdCAgb2YgYXR0YWNobWVudC4gRm9yIGluc3RhbmNlLCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRhY2hlZCB1c2luZ1xuMTM2NjpcdFx0ICBCUEZfQ0dST1VQX0lORVRfSU5HUkVTUyB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBpbmdyZXNzIHBhdGggb2ZcbjEzNjc6XHRcdCAgaW5ldCBzb2NrZXRzLlxuMTM2ODpcdFxuMTM2OTpcdGNvbmZpZyBDR1JPVVBfTUlTQ1xuMTM3MDpcdFx0Ym9vbCBcJiMzNDtNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcJiMzNDtcbjEzNzE6XHRcdGRlZmF1bHQgblxuMTM3MjpcdFx0aGVscFxuMTM3MzpcdFx0ICBQcm92aWRlcyBhIGNvbnRyb2xsZXIgZm9yIG1pc2NlbGxhbmVvdXMgcmVzb3VyY2VzIG9uIGEgaG9zdC5cbjEzNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBCUEYgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhbmQgc3BlY2lmaWNhbGx5IHRoZSBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVncmF0aW9uLiBUbyBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHJlYXNvbmFibHkgY2VydGFpbiBpdCYjMzk7cyBpbiB0aGVyZSBzb21ld2hlcmUsIGxpa2VseSB0b3dhcmQgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBCUEYmIzM5O3MgY29yZSBmZWF0dXJlcy4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDk2IGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gemVybyBpbiBvbiBgQlBGX0xTTWAuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgYmUgZW5vdWdoIHRvIGZpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFxuICA5NjpcdGNvbmZpZyBCUEZfTFNNXG4gIDk3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk5Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gMTAwOlx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gMTAxOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMDI6XHRcdGhlbHBcbiAxMDM6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwNDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwNTpcdFxuIDEwNjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBCUEZfSklUX0tBU0FOXG4gMTA5Olx0XHRib29sXG4gMTEwOlx0XHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cbiAxMTE6XHRcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuIDExMjpcdFx0ZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DXG4gMTEzOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMTQ6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY3MwoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQ29uZmlybWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoaXMgZnV6emluZyB0YXJnZXQgaXMgc291bmQuIEZpcnN0LCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgdGhlIGluaXRpYWwgaW5kaWNhdG9yLiBEaWdnaW5nIGRlZXBlciwgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbiB3aXRoIGF0dGFjaCB0eXBlIHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBoYW5kbGluZyBgQlBGX1BST0dfVFlQRV9MU01gIHdpdGhpbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYW5kIGFsc28gcmVmYWN0b3JpbmcgdGhlIGNhcGFiaWxpdHkgY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGludG8gYSBuZXcgaGVscGVyLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gLiBUaGVzZSBhcmUgYWxsIGFjY2Vzc2libGUgQlBGIHN5c2NhbGxzLCBwYXJ0aWN1bGFybHkgdGhlIGBCUEZfUFJPR19BVFRBQ0hgLCBgQlBGX0xJTktfQ1JFQVRFYCwgYW5kIGBCUEZfTElOS19VUERBVEVgIGNhbGxzLCBhbGwgb2Ygd2hpY2ggYXJlIHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGF0IGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vayB3aXRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayBjb3JyZWN0OiBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgQlBGX0xTTWAgYWxsIHNlZW0gZXNzZW50aWFsIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgbGV0JiMzOTtzIHZlcmlmeSBvdXIgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRoZSByaWdodCBlbnRyeSBwb2ludHMuIE9rYXksIGEgcXVpY2sgZG91YmxlLWNoZWNrOiBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYGxpbmtfdXBkYXRlYCwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAsIGFuZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIC0gYWxsIG9mIHRoZW0gYXJlIHJpZ2h0IG9uIHRhcmdldC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY292ZXIgdGhlIHJlbGV2YW50IGxvZ2ljIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLgoKTm93LCB3aXRoIHRoaXMgY29uZmlybWF0aW9uLCBJJiMzOTttIGNvbWZvcnRhYmxlIHByb2NlZWRpbmcuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7bGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7bGlua191cGRhdGUmIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBCUEYgc3lzY2FsbCBsb2dpYyBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYywgaW50cm9kdWNpbmcgYXR0YWNoIHR5cGUgdmVyaWZpY2F0aW9uIGZvciBsaW5rX3VwZGF0ZSwgY2hlY2tpbmcgTFNNIGV4cGVjdGVkIGF0dGFjaCB0eXBlcyBpbiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUsIGFuZCByZWZhY3RvcmluZyBjZ3JvdXAtc2tiIGNhcGFiaWxpdHkgY2hlY2tzIGludG8gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0uIFRoZXNlIGVudHJ5cG9pbnRzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoMikgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IG1vZGlmeSBjb250cm9sLWZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMgdXNpbmcgYWxyZWFkeS1pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIChicGZfcHJvZyBhbmQgYnBmX2xpbmspLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRmZDliNjE1MDc3ZjI5NDc3Y2VkNzRjMTVmM2ZiZDYxODZlZDAzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDY6Mjg6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjJiY2QzZjNhMmE1NTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC00NDgxLDE0ICYjNDM7NDQ4MSw5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKIAljYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUjoKIAljYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6CiAJY2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDoKJiM0MzsJY2FzZSBCUEZfUFJPR19UWVBFX0xTTToKIAkJcmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7CiAJY2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6Ci0JCWlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy0mZ3Q7YXV4LSZndDt0b2tlbiwgQ0FQX05FVF9BRE1JTikpCi0JCQkvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci4KLQkJCSAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgotCQkJICovCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCXB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTsKIAkJaWYgKHByb2ctJmd0O3R5cGUgIT0gcHR5cGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ1NDIsNiAmIzQzOzQ1MzcsMjAgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCX0KIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrCiYjNDM7CSAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCICZhbXA7JmFtcDsKJiM0MzsJICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLSZndDthdXgtJmd0O3Rva2VuLCBDQVBfTkVUX0FETUlOKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSwKIAkJCQlib29sIGNoZWNrX2F0eXBlKQogewpAQCAtNDYwNiw3ICYjNDM7NDYxNSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLSZndDthdHRhY2hfdHlwZSkpIHsKJiM0MzsJaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItJmd0O2F0dGFjaF90eXBlKSkgewogCQlicGZfcHJvZ19wdXQocHJvZyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU4MDUsOCAmIzQzOzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cikKIAlpZiAoSVNfRVJSKHByb2cpKQogCQlyZXR1cm4gUFRSX0VSUihwcm9nKTsKIAotCXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLAotCQkJCQkJYXR0ci0mZ3Q7bGlua19jcmVhdGUuYXR0YWNoX3R5cGUpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTU5NjgsNiAmIzQzOzU5NzYsMTAgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAkJZ290byBvdXRfcHV0X3Byb2dzOwogCX0KIAomIzQzOwlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstJmd0O2F0dGFjaF90eXBlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3B1dF9wcm9nczsKJiM0MzsKIAlpZiAobGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZykKIAkJcmV0ID0gbGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpOwogCWVsc2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jCmluZGV4IDE1MDkzYTY5NTEwZWIuLjNiNDNjMzQ5MTdjY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYwpAQCAtMSw2ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2FwX2hlbHBlcnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Nncm91cF9oZWxwZXJzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0aW5nX2hlbHBlcnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3RfY2dyb3VwX2xpbmsuc2tlbC5oJiMzNDsKQEAgLTI0LDcgJiM0MzsyNSw3NyBAQCBpbnQgcGluZ19hbmRfY2hlY2soaW50IGV4cF9jYWxscywgaW50IGV4cF9hbHRfY2FsbHMpCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZCkKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3QgX191NjQgY2FwcyA9ICgxVUxMICZsdDsmbHQ7IENBUF9ORVRfQURNSU4pIHwgKDFVTEwgJmx0OyZsdDsgQ0FQX1NZU19BRE1JTik7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7CiYjNDM7CV9fdTY0IHNhdmVkX2NhcHMgPSAwOwomIzQzOwlpbnQgY2dfZmQgPSAtMSwgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9jZ3JvdXBfbGlua19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjZ19pbml0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljZ19mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cCgmIzM0Oy9jZ3JvdXBfbGlua191cGRhdGUmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNnX2ZkLCAwLCAmIzM0O2NnX2NyZWF0ZSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gam9pbl9jZ3JvdXAoJiMzNDsvY2dyb3VwX2xpbmtfdXBkYXRlJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7Y2dfam9pbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLnNlbmRtc2c0LCBjZ19mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9zZW5kbXNnNCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtJmd0O3Byb2dzLnNlbmRtc2c2KTsKJiM0MzsJQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgJiMzNDtyZWplY3Rfc2VuZG1zZzZfdXBkYXRlJiMzNDspOwomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJbGluayA9IE5VTEw7CiYjNDM7CiYjNDM7CWVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCAmYW1wO3NhdmVkX2NhcHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7ZHJvcF9jYXBzX2Zvcl9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLSZndDtwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSX1BUUihsaW5rLCAmIzM0O2F0dGFjaF93aXRob3V0X25ldF9hZG1pbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJZXJyID0gbGliYnBmX2dldF9lcnJvcihsaW5rKTsKJiM0MzsJbGluayA9IE5VTEw7CiYjNDM7CWlmICghQVNTRVJUX0VRKGVyciwgLUVQRVJNLCAmIzM0O2F0dGFjaF9lcnImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgJmFtcDsgY2FwcywgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtyZXN0b3JlX2NhcHNfZm9yX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLmVncmVzcywgY2dfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDthdHRhY2hfZWdyZXNzJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgJmFtcDtzYXZlZF9jYXBzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Ryb3BfY2FwcyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtJmd0O3Byb2dzLmVncmVzc19hbHQpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3VwZGF0ZV93aXRob3V0X25ldF9hZG1pbiYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwllcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzICZhbXA7IGNhcHMsIE5VTEwpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3Jlc3RvcmVfY2FwcyYjMzQ7KTsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CWlmIChjZ19mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoY2dfZmQpOwomIzQzOwljbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpOwomIzQzOwl0ZXN0X2Nncm91cF9saW5rX19kZXN0cm95KHNrZWwpOwomIzQzOwlza2VsID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jZ3JvdXBfbGlua19hdHRhY2godm9pZCkKIHsKIAlzdHJ1Y3QgewogCQljb25zdCBjaGFyICpwYXRoOwpAQCAtMjUzLDMgJiM0MzszMjQsMTEgQEAgdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKQogCX0KIAljbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpOwogfQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJdGVzdF9jZ3JvdXBfbGlua19hdHRhY2goKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1cGRhdGUmIzM0OykpCiYjNDM7CQl0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuYwppbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jCkBAIC03NCw2ICYjNDM7NzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKQogCWludCBiaW5kX3Byb2dfZmQgPSAtMTsKIAlpbnQgYmluZF9saW5rX2ZkID0gLTE7CiAJaW50IGNsb25lX3Byb2dfZmQgPSAtMTsKJiM0MzsJaW50IHNvY2tldF9saW5rX2ZkID0gLTE7CiAJaW50IGVyciwgZmQsIHByaW87CiAJc29ja2xlbl90IHNvY2tsZW47CiAKQEAgLTE1Niw2ICYjNDM7MTU3LDE3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpCiAJQVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgJiMzNDticGZfbHNtX3NvY2tldF9iaW5kJiMzNDspLCAxLCAmIzM0O3Byb2cgY291bnQmIzM0Oyk7CiAJQVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgTlVMTCksIDQsICYjMzQ7dG90YWwgcHJvZyBjb3VudCYjMzQ7KTsKIAomIzQzOwlzb2NrZXRfbGlua19mZCA9CiYjNDM7CQlicGZfbGlua19jcmVhdGUoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnNvY2tldF9maXJzdCksCiYjNDM7CQkJCWNncm91cF9mZCwgQlBGX0xTTV9DR1JPVVAsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzb2NrZXRfbGlua19mZCwgMCwgJiMzNDtsaW5rIGNyZWF0ZSBzb2NrZXRfZmlyc3QmIzM0OykpCiYjNDM7CQlnb3RvIGRldGFjaF9jZ3JvdXA7CiYjNDM7CWVyciA9IGJwZl9saW5rX3VwZGF0ZShzb2NrZXRfbGlua19mZCwKJiM0MzsJCQkgICAgICBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Muc29ja2V0X2NyZWF0ZV9sc20pLAomIzQzOwkJCSAgICAgIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCAmIzM0O3JlamVjdCBsc21fbWFjIGxpbmsgdXBkYXRlJiMzNDspOwomIzQzOwljbG9zZShzb2NrZXRfbGlua19mZCk7CiYjNDM7CiAJLyogQXR0YWNoIGFub3RoZXIgaW5zdGFuY2Ugb2YgYmluZCBwcm9ncmFtIHRvIGFub3RoZXIgY2dyb3VwLgogCSAqIFRoaXMgc2hvdWxkIHRyaWdnZXIgdGhlIHJldXNlIG9mIHRoZSB0cmFtcG9saW5lIHNoaW0gKHR3bwogCSAqIHByb2dyYW1zIGF0dGFjaGluZyB0byB0aGUgc2FtZSBidGZfaWQpLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMKaW5kZXggM2JmYTQ3OTEwNGJlOC4uMzA3Mjc5NDVjZWNjMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jCkBAIC0yMTMsNiAmIzQzOzIxMywxMiBAQCBpbnQgQlBGX1BST0coc29ja2V0X2ZpcnN0LCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2xzbS9zb2NrZXRfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHNvY2tldF9jcmVhdGVfbHNtLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O2xzbV9jZ3JvdXAvc29ja2V0X2NyZWF0ZSYjMzQ7KQogaW50IEJQRl9QUk9HKHNvY2tldF9zZWNvbmQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMKaW5kZXggNGZhYmE4OGU0NWE1YS4uMTA3NDI5NjM4ZjU0MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jCkBAIC0yMCw1ICYjNDM7MjAsMTYgQEAgaW50IGVncmVzc19hbHQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiAxOwogfQogCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7U0VDKCYjMzQ7Y2dyb3VwL3NlbmRtc2c0JiMzNDspCiYjNDM7aW50IHNlbmRtc2c0KHN0cnVjdCBicGZfc29ja19hZGRyICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiAKJiM0MztTRUMoJiMzNDtjZ3JvdXAvc2VuZG1zZzYmIzM0OykKJiM0MztpbnQgc2VuZG1zZzYoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgQXNzZXNzbWVudCBvZiBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgY3JlYXRpb24vdXBkYXRlIHJvdXRpbmVzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByZWZpbmluZyBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgYXR0YWNoIHR5cGUgdmFsaWRhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgQ0dST1VQX1NLQmAgYW5kIG5vdyBpbmNvcnBvcmF0aW5nIGBMU01gIHByb2dyYW1zLiBUaGUga2V5IGNoYW5nZXMgYXJlOgoKMS4gICoqUmVvcmdhbml6YXRpb24gb2YgQ2hlY2tzOioqIFRoZSBgQ0FQX05FVF9BRE1JTmAgcGVybWlzc2lvbiBjaGVjayBmb3IgYENHUk9VUF9TS0JgIGlzIG1vdmVkIGZyb20gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYCB0byBhIG5ldyBoZWxwZXIgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKClgLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNlcGFyYXRpb24gb2YgY29uY2VybnMg4oCTIGF0dGFjaCB0eXBlIGNvbXBhdGliaWxpdHkgYW5kIHBlcm1pc3Npb25zIGFyZSBub3cgaGFuZGxlZCBkaXN0aW5jdGx5LgoyLiAgKipMU00gU3VwcG9ydDoqKiAgYEJQRl9QUk9HX1RZUEVfTFNNYCBpcyBub3cgZXhwbGljaXRseSBzdXBwb3J0ZWQgaW4gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYC4KMy4gICoqTGluayBVcGRhdGUgQ2hlY2s6KiogIEluIGBsaW5rX3VwZGF0ZSgpYCwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYCB0byBlbnN1cmUgdGhlIGF0dGFjaCB0eXBlIG9mIHRoZSAqbmV3KiBwcm9ncmFtIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhpc3RpbmcgbGluayYjMzk7cyB0eXBlLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGxpbmsgaW50ZWdyaXR5IGR1cmluZyB1cGRhdGVzLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IEkgbmVlZCB0byBhbmFseXplIGZvciB0aGlzIHNwZWNpZmljYWxseSBmb3IgS01TQU4uIE15IGFuYWx5c2lzIGlzIGFzIGZvbGxvd3M6CgoqICAgKipObyBVbmluaXRpYWxpemVkIE1lbW9yeSBBbGxvY2F0aW9uL0NvcHk6KiogIEkgc2VlIG5vIGV2aWRlbmNlIG9mIGFsbG9jYXRpbmcgb3IgY29weWluZyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIG9ubHkgYWx0ZXJzIHRoZSB2YWxpZGF0aW9uIGFuZCBwZXJtaXNzaW9uIGNoZWNrcy4KKiAgICoqTm8gUmVhZHMgb2YgVW5pbml0aWFsaXplZCBNZW1vcnkgb3IgU3RydWN0IFBhZGRpbmc6KiogVGhlIGNvZGUgcmVhZHMgZnJvbSBjbGVhcmx5IGRlZmluZWQgZmllbGRzIG9mIHN0cnVjdHVyZXMgbGlrZSBgcHJvZy0mZ3Q7dHlwZWAsIGBwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZWAsIGBwcm9nLSZndDthdXgtJmd0O3Rva2VuYCwgYW5kIGBhdHRyLSZndDsuLi5gIGFuZCBgbGluay0mZ3Q7YXR0YWNoX3R5cGVgLiBUaGVyZSBhcmUgbm8gYXBwYXJlbnQgcmVhZHMgZnJvbSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBwYWRkaW5nLgoqICAgKipObyBCdWZmZXIgTGVuZ3RoIE1hbmlwdWxhdGlvbi9Db3B5IEJvdW5kIElzc3VlczoqKiAgVGhpcyBwYXRjaCBkb2VzIG5vdCBhcHBlYXIgdG8gaW52b2x2ZSBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbiBvciBhbnkgY29uY2VybnMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGNvcGllcy4KKiAgICoqTm8gRXhwb3N1cmUgb2YgU3RhY2sgb3IgSGVhcCBEYXRhOioqIEkgZG9uJiMzOTt0IHNlZSBhbnkgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGNvdWxkIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtkIG5vdyBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gLCBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCBhbmQgYGxpbmtfdXBkYXRlYCBhcyB3ZWxsIGFzIGFueSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGRvdWJsZS1jaGVjayBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgZ290Y2hhcy4gQnV0IG15IGd1dCBmZWVsaW5nIGlzIHRoZSBwYXRjaCBvbmx5IGludm9sdmVzIHN0cnVjdHVyYWwgY2hhbmdlcyBhbmQgbG9naWMgcmVmYWN0b3JpbmcsIHdpdGggbm8gZXhwbGljaXQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MuCgpUaGVyZWZvcmUsIG15IHByZWxpbWluYXJ5IGFzc2Vzc21lbnQgaXMgdGhhdCAqKmBOZWVkc0tNU0FOID0gZmFsc2VgKiouIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aCBhIGJyaWVmIGNvZGUgcmV2aWV3IGZvciBhYnNvbHV0ZSBjZXJ0YWludHksIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgS01TQU4tcmVsZXZhbnQgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0NzU6XHRcdFx0XHRcdFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbjQ0NzY6XHR7XG40NDc3Olx0XHRlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGU7XG40NDc4Olx0XG40NDc5Olx0XHRzd2l0Y2ggKHByb2ctXHUwMDNldHlwZSkge1xuNDQ4MDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLOlxuNDQ4MTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XG40NDgyOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XG40NDgzOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuNDQ4NDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbjQ0ODU6XHRcdFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcbjQ0ODY6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxuNDQ4NzpcdFx0XHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XG40NDg4Olx0XHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gcHR5cGUpXG40NDg5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NDkwOlx0XG40NDkxOlx0XHRcdHJldHVybiBwcm9nLVx1MDAzZWVuZm9yY2VfZXhwZWN0ZWRfYXR0YWNoX3R5cGUgXHUwMDI2XHUwMDI2XG40NDkyOlx0XHRcdFx0cHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHRhY2hfdHlwZSA/XG40NDkzOlx0XHRcdFx0LUVJTlZBTCA6IDA7XG40NDk0Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxuNDQ5NTpcdFx0XHRyZXR1cm4gMDtcbjQ0OTY6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9ORVRGSUxURVI6XG40NDk3Olx0XHRcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTkVURklMVEVSKVxuNDQ5ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ5OTpcdFx0XHRyZXR1cm4gMDtcbjQ1MDA6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UOlxuNDUwMTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1RSQUNFUE9JTlQ6XG40NTAyOlx0XHRcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfUEVSRl9FVkVOVClcbjQ1MDM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MDQ6XHRcdFx0cmV0dXJuIDA7XG40NTA1Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfS1BST0JFOlxuNDUwNjpcdFx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfS1BST0JFX01VTFRJIFx1MDAyNlx1MDAyNlxuNDUwNzpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSlcbjQ1MDg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MDk6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OIFx1MDAyNlx1MDAyNlxuNDUxMDpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OKVxuNDUxMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUxMjpcdFx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfVVBST0JFX01VTFRJIFx1MDAyNlx1MDAyNlxuNDUxMzpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSlcbjQ1MTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MTU6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1VQUk9CRV9TRVNTSU9OIFx1MDAyNlx1MDAyNlxuNDUxNjpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9TRVNTSU9OKVxuNDUxNzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUxODpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG40NTE5Olx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX01VTFRJIFx1MDAyNlx1MDAyNlxuNDUyMDpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OIFx1MDAyNlx1MDAyNlxuNDUyMTpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MjI6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTilcbjQ1MjM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MjQ6XHRcdFx0cmV0dXJuIDA7XG40NTI1Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxuNDUyNjpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9JTkdSRVNTIFx1MDAyNlx1MDAyNlxuNDUyNzpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9FR1JFU1MgXHUwMDI2XHUwMDI2XG40NTI4Olx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BSSU1BUlkgXHUwMDI2XHUwMDI2XG40NTI5Olx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BFRVIpXG40NTMwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTMxOlx0XHRcdHJldHVybiAwO1xuNDUzMjpcdFx0ZGVmYXVsdDpcbjQ1MzM6XHRcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuNDUzNDpcdFx0XHRpZiAocHR5cGUgPT0gQlBGX1BST0dfVFlQRV9VTlNQRUMgfHwgcHR5cGUgIT0gcHJvZy1cdTAwM2V0eXBlKVxuNDUzNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUzNjpcdFx0XHRyZXR1cm4gMDtcbjQ1Mzc6XHRcdH1cbjQ1Mzg6XHR9XG40NTM5Olx0XG40NTQwOlx0c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG40NTQxOlx0XHRcdFx0XHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbjQ1NDI6XHR7XG40NTQzOlx0XHQvKlxuNDU0NDpcdFx0ICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2tcbjQ1NDU6XHRcdCAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuNDU0NjpcdFx0ICovXG40NTQ3Olx0XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcdTAwMjZcdTAwMjZcbjQ1NDg6XHRcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuNDU0OTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuNDU1MDpcdFxuNDU1MTpcdFx0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG40NTUyOlx0fVxuNDU1MzpcdFxuNDU1NDpcdHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJQRiBMaW5rIFVwZGF0ZSBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGEgYml0IGRlZXBlci4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcG90ZW50aWFsIGlzc3VlLCBJIHNob3VsZCBleHBhbmQgbXkgc2NvcGUuIExldCYjMzk7cyBub3QganVzdCBmb2N1cyBvbiB0aGUgb2J2aW91czsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIHN1YnRsZSBoaWRpbmcgaW4gcGxhaW4gc2lnaHQuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgbGlua191cGRhdGUoKWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIGFyZWEgZm9yIGEgbWlzY2FsY3VsYXRpb24gdG8gbHVyaywgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBkaXJlY3RseSBpbnZvbHZlZCBpbiwgd2VsbCwgKnVwZGF0aW5nKiBCUEYgbGlua3MuIFRpbWUgdG8gbWV0aWN1bG91c2x5IGRpc3NlY3QgdGhlIGNvZGUgYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhhdCBmdW5jdGlvbi4gSXQmIzM5O3MgdGltZSB0byBwdXQgb24gdGhlIGRldGVjdGl2ZSBoYXQgYW5kIHRyeSB0byBmaW5kIGEgY3JhY2sgaW4gdGhlIGFybW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTk1MTpcdFxuNTk1MjpcdFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXHUwMDNlbGlua191cGRhdGUubGlua19mZCk7XG41OTUzOlx0XHRpZiAoSVNfRVJSKGxpbmspKVxuNTk1NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbjU5NTU6XHRcbjU5NTY6XHRcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfbWFwKSB7XG41OTU3Olx0XHRcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcbjU5NTg6XHRcdFx0Z290byBvdXRfcHV0X2xpbms7XG41OTU5Olx0XHR9XG41OTYwOlx0XG41OTYxOlx0XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbjU5NjI6XHRcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XG41OTYzOlx0XHRcdHJldCA9IFBUUl9FUlIobmV3X3Byb2cpO1xuNTk2NDpcdFx0XHRnb3RvIG91dF9wdXRfbGluaztcbjU5NjU6XHRcdH1cbjU5NjY6XHRcbjU5Njc6XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xuNTk2ODpcdFx0XHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcbjU5Njk6XHRcdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbjU5NzA6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKG9sZF9wcm9nKTtcbjU5NzE6XHRcdFx0XHRvbGRfcHJvZyA9IE5VTEw7XG41OTcyOlx0XHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuNTk3MzpcdFx0XHR9XG41OTc0Olx0XHR9IGVsc2UgaWYgKGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcbjU5NzU6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjU5NzY6XHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuNTk3NzpcdFx0fVxuNTk3ODpcdFxuNTk3OTpcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLVx1MDAzZWF0dGFjaF90eXBlKTtcbjU5ODA6XHRcdGlmIChyZXQpXG41OTgxOlx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbjU5ODI6XHRcbjU5ODM6XHRcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZylcbjU5ODQ6XHRcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbjU5ODU6XHRcdGVsc2VcbjU5ODY6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjU5ODc6XHRcbjU5ODg6XHRvdXRfcHV0X3Byb2dzOlxuNTk4OTpcdFx0aWYgKG9sZF9wcm9nKVxuNTk5MDpcdFx0XHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xuNTk5MTpcdFx0aWYgKHJldClcbjU5OTI6XHRcdFx0YnBmX3Byb2dfcHV0KG5ld19wcm9nKTtcbjU5OTM6XHRvdXRfcHV0X2xpbms6XG41OTk0Olx0XHRicGZfbGlua19wdXRfZGlyZWN0KGxpbmspO1xuNTk5NTpcdFx0cmV0dXJuIHJldDtcbjU5OTY6XHR9XG41OTk3Olx0XG41OTk4Olx0I2RlZmluZSBCUEZfTElOS19ERVRBQ0hfTEFTVF9GSUVMRCBsaW5rX2RldGFjaC5saW5rX2ZkXG41OTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjIKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhpcyBwYXRjaCBvdmVyLCBhbmQgbXkgY29uY2x1c2lvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB3aXRoaW4gdGhlIGV4aXN0aW5nIEJQRiBpbmZyYXN0cnVjdHVyZSwgZm9jdXNpbmcgb24gdGhlIHZhbGlkYXRpb24gYW5kIGF1dGhvcml6YXRpb24gY2hlY2tzIGZvciBCUEYgcHJvZ3JhbSBhdHRhY2htZW50cy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbG9naWNhbCBjaGVja3Mgb24gdGhlIGBwcm9nYCBhbmQgYGxpbmtgIHN0cnVjdHVyZXMg4oCTIHNwZWNpZmljYWxseSBjYXBhYmlsaXR5IHJlcXVpcmVtZW50cyBhbmQgYXR0YWNoIHR5cGUgY29tcGF0aWJpbGl0eS4KCkNydWNpYWxseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBidWZmZXJzLCBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBpc3N1ZXMsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYWJzb2x1dGVseSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHRoYXQgSSBjYW4gc2VlLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoYXQgYXNzZXNzbWVudCwgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCk5vdywgbGV0IG1lIGFydGljdWxhdGUgdGhlIHJlYXNvbmluZyBjbGVhcmx5LiBGaXJzdCwgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHByb2dyYW0gYXR0YWNoIHZhbGlkYXRpb24gbG9naWMuIEl0IHNlcGFyYXRlcyBvdXQgdGhlIGNhcGFiaWxpdHkgY2hlY2tzIChoYW5kbGVkIGJ5IGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWApIGZyb20gdGhlIGF0dGFjaC10eXBlIHZhbGlkYXRpb24gKGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgKS4gSXQgYWxzbyBpbmNvcnBvcmF0ZXMgc3VwcG9ydCBmb3IgYEJQRl9QUk9HX1RZUEVfTFNNYCBpbiB0aGUgdHlwZSBjaGVja3MgYW5kIGVuc3VyZXMgbmV3IHByb2dyYW0gYXR0YWNoIHR5cGVzIGFyZSBwcm9wZXJseSB2YWxpZGF0ZWQgd2l0aGluIGBsaW5rX3VwZGF0ZSgpYC4KClRoZSByZWFzb24gS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBvcGVyYXRpb25zLCBvciBkYXRhIHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLiBJdCBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgbWVtb3J5IHByb2JsZW1zLCBvciBjcmVhdGUgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbi1sZWFrIHZlY3RvcnMuIFRoZSBwYXRjaCYjMzk7cyBmb2N1cyBpcyBvbiBjb250cm9sLWZsb3csIHBlcm1pc3Npb24gYW5kIHR5cGUgdmFsaWRhdGlvbiBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIEFueSBleGlzdGluZyBpc3N1ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lcyBzaG91bGQgYmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIHJlZmNvdW50aW5nIG1lY2hhbmlzbXMgYW5kIEtBU0FOLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBteSBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgdXBkYXRlIHZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQgc2VwYXJhdGVzIHBlcm1pc3Npb24gY2hlY2tzIGZvciBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgaW50byBhIGhlbHBlciBmdW5jdGlvbiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0pLCBhZGRzIGF0dGFjaC10eXBlIHZhbGlkYXRpb24gZm9yIEJQRl9QUk9HX1RZUEVfTFNNIHByb2dyYW1zLCBhbmQgZW5mb3JjZXMgYXR0YWNoLXR5cGUgY29tcGF0aWJpbGl0eSBjaGVja2luZyBvbiB0aGUgcmVwbGFjZW1lbnQgcHJvZ3JhbSBkdXJpbmcgYnBmX2xpbmsgdXBkYXRlIChsaW5rX3VwZGF0ZSkuXG5cblRoZXNlIGNoYW5nZXMgb25seSBtb2RpZnkgY29udHJvbC1mbG93IGFuZCB2YWxpZGF0aW9uIGxvZ2ljIHVzaW5nIGFscmVhZHktaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyAoYnBmX3Byb2cgYW5kIGJwZl9saW5rKS4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBsaW5rIHVwZGF0ZSB2YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0IHNlcGFyYXRlcyBwZXJtaXNzaW9uIGNoZWNrcyBmb3IgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKSwgYWRkcyBhdHRhY2gtdHlwZSB2YWxpZGF0aW9uIGZvciBCUEZfUFJPR19UWVBFX0xTTSBwcm9ncmFtcywgYW5kIGVuZm9yY2VzIGF0dGFjaC10eXBlIGNvbXBhdGliaWxpdHkgY2hlY2tpbmcgb24gdGhlIHJlcGxhY2VtZW50IHByb2dyYW0gZHVyaW5nIGJwZl9saW5rIHVwZGF0ZSAobGlua191cGRhdGUpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbW9kaWZ5IGNvbnRyb2wtZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYyB1c2luZyBhbHJlYWR5LWluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgKGJwZl9wcm9nIGFuZCBicGZfbGluaykuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgc2l6ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMwLjcyOTIyNzI4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjQxMDE5MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIixcbiAgICBcImJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBsaW5rIHVwZGF0ZSB2YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0IHNlcGFyYXRlcyBwZXJtaXNzaW9uIGNoZWNrcyBmb3IgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKSwgYWRkcyBhdHRhY2gtdHlwZSB2YWxpZGF0aW9uIGZvciBCUEZfUFJPR19UWVBFX0xTTSBwcm9ncmFtcywgYW5kIGVuZm9yY2VzIGF0dGFjaC10eXBlIGNvbXBhdGliaWxpdHkgY2hlY2tpbmcgb24gdGhlIHJlcGxhY2VtZW50IHByb2dyYW0gZHVyaW5nIGJwZl9saW5rIHVwZGF0ZSAobGlua191cGRhdGUpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBtb2RpZnkgY29udHJvbC1mbG93IGFuZCB2YWxpZGF0aW9uIGxvZ2ljIHVzaW5nIGFscmVhZHktaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyAoYnBmX3Byb2cgYW5kIGJwZl9saW5rKS4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMwLjcyOTIzMTkzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3MzY0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTRmZDliNjE1MDc3ZjI5NDc3Y2VkNzRjMTVmM2ZiZDYxODZlZDAzN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjI4OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCA2ODc0YmExNDI0YWYwLi4yYmNkM2YzYTJhNTU5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5AQCAtNDQ4MSwxNCArNDQ4MSw5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XFxuIFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcXG4rXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcXG4gXFx0XFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XFxuIFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxcbi1cXHRcXHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbi1cXHRcXHRcXHQvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci5cXG4tXFx0XFx0XFx0ICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXG4gXFx0XFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xcbiBcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBwdHlwZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTQ1NDIsNiArNDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXFxuK1xcdCAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxcbitcXHQgKi9cXG4rXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRyZXR1cm4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dGFjaF90eXBlKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbiBcXHRcXHRcXHRcXHRib29sIGNoZWNrX2F0eXBlKVxcbiB7XFxuQEAgLTQ2MDYsNyArNDYxNSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRpZiAoSVNfRVJSKHByb2cpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwcm9nKTtcXG4gXFxuLVxcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpKSB7XFxuK1xcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSkpIHtcXG4gXFx0XFx0YnBmX3Byb2dfcHV0KHByb2cpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01ODA1LDggKzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4gXFx0aWYgKElTX0VSUihwcm9nKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XFxuIFxcbi1cXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtNTk2OCw2ICs1OTc2LDEwIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG4rXFxuIFxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKVxcbiBcXHRcXHRyZXQgPSBsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7XFxuIFxcdGVsc2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcXG5pbmRleCAxNTA5M2E2OTUxMGViLi4zYjQzYzM0OTE3Y2NjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jXFxuQEAgLTEsNiArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiY2FwX2hlbHBlcnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNncm91cF9oZWxwZXJzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RfY2dyb3VwX2xpbmsuc2tlbC5oXFxcIlxcbkBAIC0yNCw3ICsyNSw3NyBAQCBpbnQgcGluZ19hbmRfY2hlY2soaW50IGV4cF9jYWxscywgaW50IGV4cF9hbHRfY2FsbHMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi12b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXFxuK3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfdXBkYXRlKHZvaWQpXFxuK3tcXG4rXFx0Y29uc3QgX191NjQgY2FwcyA9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIENBUF9ORVRfQURNSU4pIHwgKDFVTEwgXFx1MDAzY1xcdTAwM2MgQ0FQX1NZU19BRE1JTik7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XFxuK1xcdF9fdTY0IHNhdmVkX2NhcHMgPSAwO1xcbitcXHRpbnQgY2dfZmQgPSAtMSwgZXJyO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfY2dyb3VwX2xpbmtfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiY2dfaW5pdFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRjZ19mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChcXFwiL2Nncm91cF9saW5rX3VwZGF0ZVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjZ19mZCwgMCwgXFxcImNnX2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBqb2luX2Nncm91cChcXFwiL2Nncm91cF9saW5rX3VwZGF0ZVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJjZ19qb2luXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLVxcdTAwM2Vwcm9ncy5zZW5kbXNnNCwgY2dfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXFxcImF0dGFjaF9zZW5kbXNnNFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC1cXHUwMDNlcHJvZ3Muc2VuZG1zZzYpO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcXFwicmVqZWN0X3NlbmRtc2c2X3VwZGF0ZVxcXCIpO1xcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0bGluayA9IE5VTEw7XFxuK1xcbitcXHRlcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgXFx1MDAyNnNhdmVkX2NhcHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJkcm9wX2NhcHNfZm9yX2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XFxuK1xcdGlmICghQVNTRVJUX0VSUl9QVFIobGluaywgXFxcImF0dGFjaF93aXRob3V0X25ldF9hZG1pblxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XFxuK1xcdGxpbmsgPSBOVUxMO1xcbitcXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FUEVSTSwgXFxcImF0dGFjaF9lcnJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gY2FwX2VuYWJsZV9lZmZlY3RpdmUoc2F2ZWRfY2FwcyBcXHUwMDI2IGNhcHMsIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJyZXN0b3JlX2NhcHNfZm9yX2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYXR0YWNoX2VncmVzc1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgXFx1MDAyNnNhdmVkX2NhcHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJkcm9wX2NhcHNcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtXFx1MDAzZXByb2dzLmVncmVzc19hbHQpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwidXBkYXRlX3dpdGhvdXRfbmV0X2FkbWluXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRlcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzIFxcdTAwMjYgY2FwcywgTlVMTCk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJyZXN0b3JlX2NhcHNcXFwiKTtcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdGlmIChjZ19mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjZ19mZCk7XFxuK1xcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK1xcdHRlc3RfY2dyb3VwX2xpbmtfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHNrZWwgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKnBhdGg7XFxuQEAgLTI1MywzICszMjQsMTEgQEAgdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKVxcbiBcXHR9XFxuIFxcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuIH1cXG4rXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcXG4re1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1cGRhdGVcXFwiKSlcXG4rXFx0XFx0dGVzdF9jZ3JvdXBfbGlua191cGRhdGUoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcXG5pbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuY1xcbkBAIC03NCw2ICs3NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpXFxuIFxcdGludCBiaW5kX3Byb2dfZmQgPSAtMTtcXG4gXFx0aW50IGJpbmRfbGlua19mZCA9IC0xO1xcbiBcXHRpbnQgY2xvbmVfcHJvZ19mZCA9IC0xO1xcbitcXHRpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTtcXG4gXFx0aW50IGVyciwgZmQsIHByaW87XFxuIFxcdHNvY2tsZW5fdCBzb2NrbGVuO1xcbiBcXG5AQCAtMTU2LDYgKzE1NywxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKVxcbiBcXHRBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBcXFwiYnBmX2xzbV9zb2NrZXRfYmluZFxcXCIpLCAxLCBcXFwicHJvZyBjb3VudFxcXCIpO1xcbiBcXHRBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBOVUxMKSwgNCwgXFxcInRvdGFsIHByb2cgY291bnRcXFwiKTtcXG4gXFxuK1xcdHNvY2tldF9saW5rX2ZkID1cXG4rXFx0XFx0YnBmX2xpbmtfY3JlYXRlKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5zb2NrZXRfZmlyc3QpLFxcbitcXHRcXHRcXHRcXHRjZ3JvdXBfZmQsIEJQRl9MU01fQ0dST1VQLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0Uoc29ja2V0X2xpbmtfZmQsIDAsIFxcXCJsaW5rIGNyZWF0ZSBzb2NrZXRfZmlyc3RcXFwiKSlcXG4rXFx0XFx0Z290byBkZXRhY2hfY2dyb3VwO1xcbitcXHRlcnIgPSBicGZfbGlua191cGRhdGUoc29ja2V0X2xpbmtfZmQsXFxuK1xcdFxcdFxcdCAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5zb2NrZXRfY3JlYXRlX2xzbSksXFxuK1xcdFxcdFxcdCAgICAgIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcXFwicmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGVcXFwiKTtcXG4rXFx0Y2xvc2Uoc29ja2V0X2xpbmtfZmQpO1xcbitcXG4gXFx0LyogQXR0YWNoIGFub3RoZXIgaW5zdGFuY2Ugb2YgYmluZCBwcm9ncmFtIHRvIGFub3RoZXIgY2dyb3VwLlxcbiBcXHQgKiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSByZXVzZSBvZiB0aGUgdHJhbXBvbGluZSBzaGltICh0d29cXG4gXFx0ICogcHJvZ3JhbXMgYXR0YWNoaW5nIHRvIHRoZSBzYW1lIGJ0Zl9pZCkuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXFxuaW5kZXggM2JmYTQ3OTEwNGJlOC4uMzA3Mjc5NDVjZWNjMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xcbkBAIC0yMTMsNiArMjEzLDEyIEBAIGludCBCUEZfUFJPRyhzb2NrZXRfZmlyc3QsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJsc20vc29ja2V0X2NyZWF0ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyhzb2NrZXRfY3JlYXRlX2xzbSwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwibHNtX2Nncm91cC9zb2NrZXRfY3JlYXRlXFxcIilcXG4gaW50IEJQRl9QUk9HKHNvY2tldF9zZWNvbmQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXFxuaW5kZXggNGZhYmE4OGU0NWE1YS4uMTA3NDI5NjM4ZjU0MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuY1xcbkBAIC0yMCw1ICsyMCwxNiBAQCBpbnQgZWdyZXNzX2FsdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1jaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rU0VDKFxcXCJjZ3JvdXAvc2VuZG1zZzRcXFwiKVxcbitpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbiBcXG4rU0VDKFxcXCJjZ3JvdXAvc2VuZG1zZzZcXFwiKVxcbitpbnQgc2VuZG1zZzYoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMxLjMwNzMzODQ5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTAzOTkxOTk1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImxpbmtfY3JlYXRlXCIsXG4gICAgXCJsaW5rX3VwZGF0ZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlXCIsXG4gICAgXCJicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBCUEYgc3lzY2FsbCBsb2dpYyBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYywgaW50cm9kdWNpbmcgYXR0YWNoIHR5cGUgdmVyaWZpY2F0aW9uIGZvciBsaW5rX3VwZGF0ZSwgY2hlY2tpbmcgTFNNIGV4cGVjdGVkIGF0dGFjaCB0eXBlcyBpbiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUsIGFuZCByZWZhY3RvcmluZyBjZ3JvdXAtc2tiIGNhcGFiaWxpdHkgY2hlY2tzIGludG8gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0uIFRoZXNlIGVudHJ5cG9pbnRzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoMikgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGZkOWI2MTUwNzdmMjk0NzdjZWQ3NGMxNWYzZmJkNjE4NmVkMDM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjoyODoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjJiY2QzZjNhMmE1NTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC00NDgxLDE0ICs0NDgxLDkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuK1x0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbiBcdFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxuLVx0XHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbi1cdFx0XHQvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci5cbi1cdFx0XHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVxuIFx0XHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XG4gXHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gcHR5cGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNDU0Miw2ICs0NTM3LDIwIEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbit7XG4rXHQvKlxuK1x0ICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2tcbitcdCAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuK1x0ICovXG4rXHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiBcdFx0XHRcdGJvb2wgY2hlY2tfYXR5cGUpXG4ge1xuQEAgLTQ2MDYsNyArNDYxNSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpKSB7XG4rXHRpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSkpIHtcbiBcdFx0YnBmX3Byb2dfcHV0KHByb2cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01ODA1LDggKzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csXG4tXHRcdFx0XHRcdFx0YXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU5NjgsNiArNTk3NiwxMCBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4gXHR9XG4gXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstXHUwMDNlYXR0YWNoX3R5cGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuK1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jXG5pbmRleCAxNTA5M2E2OTUxMGViLi4zYjQzYzM0OTE3Y2NjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuQEAgLTEsNiArMSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcImNhcF9oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwiY2dyb3VwX2hlbHBlcnMuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X2Nncm91cF9saW5rLnNrZWwuaFwiXG5AQCAtMjQsNyArMjUsNzcgQEAgaW50IHBpbmdfYW5kX2NoZWNrKGludCBleHBfY2FsbHMsIGludCBleHBfYWx0X2NhbGxzKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbitzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSh2b2lkKVxuK3tcbitcdGNvbnN0IF9fdTY0IGNhcHMgPSAoMVVMTCBcdTAwM2NcdTAwM2MgQ0FQX05FVF9BRE1JTikgfCAoMVVMTCBcdTAwM2NcdTAwM2MgQ0FQX1NZU19BRE1JTik7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuK1x0X191NjQgc2F2ZWRfY2FwcyA9IDA7XG4rXHRpbnQgY2dfZmQgPSAtMSwgZXJyO1xuK1xuK1x0c2tlbCA9IHRlc3RfY2dyb3VwX2xpbmtfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJjZ19pbml0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjZ19mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChcIi9jZ3JvdXBfbGlua191cGRhdGVcIik7XG4rXHRpZiAoIUFTU0VSVF9HRShjZ19mZCwgMCwgXCJjZ19jcmVhdGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGpvaW5fY2dyb3VwKFwiL2Nncm91cF9saW5rX3VwZGF0ZVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJjZ19qb2luXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5zZW5kbXNnNCwgY2dfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwiYXR0YWNoX3NlbmRtc2c0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC1cdTAwM2Vwcm9ncy5zZW5kbXNnNik7XG4rXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcInJlamVjdF9zZW5kbXNnNl91cGRhdGVcIik7XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGxpbmsgPSBOVUxMO1xuK1xuK1x0ZXJyID0gY2FwX2Rpc2FibGVfZWZmZWN0aXZlKGNhcHMsIFx1MDAyNnNhdmVkX2NhcHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImRyb3BfY2Fwc19mb3JfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbitcdGlmICghQVNTRVJUX0VSUl9QVFIobGluaywgXCJhdHRhY2hfd2l0aG91dF9uZXRfYWRtaW5cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XG4rXHRsaW5rID0gTlVMTDtcbitcdGlmICghQVNTRVJUX0VRKGVyciwgLUVQRVJNLCBcImF0dGFjaF9lcnJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInJlc3RvcmVfY2Fwc19mb3JfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImF0dGFjaF9lZ3Jlc3NcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCBcdTAwMjZzYXZlZF9jYXBzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJkcm9wX2NhcHNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGJwZl9saW5rX191cGRhdGVfcHJvZ3JhbShsaW5rLCBza2VsLVx1MDAzZXByb2dzLmVncmVzc19hbHQpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJ1cGRhdGVfd2l0aG91dF9uZXRfYWRtaW5cIik7XG4rXG4rY2xlYW51cDpcbitcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJyZXN0b3JlX2NhcHNcIik7XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGlmIChjZ19mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNnX2ZkKTtcbitcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rXHR0ZXN0X2Nncm91cF9saW5rX19kZXN0cm95KHNrZWwpO1xuK1x0c2tlbCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKHZvaWQpXG4ge1xuIFx0c3RydWN0IHtcbiBcdFx0Y29uc3QgY2hhciAqcGF0aDtcbkBAIC0yNTMsMyArMzI0LDExIEBAIHZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbiBcdH1cbiBcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4gfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbit7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImF0dGFjaFwiKSlcbitcdFx0dGVzdF9jZ3JvdXBfbGlua19hdHRhY2goKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidXBkYXRlXCIpKVxuK1x0XHR0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbmluZGV4IDQxZTg2NzQ2N2Y2YzYuLjBkZDQ0ZGJiOWM5NWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuY1xuQEAgLTc0LDYgKzc0LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZClcbiBcdGludCBiaW5kX3Byb2dfZmQgPSAtMTtcbiBcdGludCBiaW5kX2xpbmtfZmQgPSAtMTtcbiBcdGludCBjbG9uZV9wcm9nX2ZkID0gLTE7XG4rXHRpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTtcbiBcdGludCBlcnIsIGZkLCBwcmlvO1xuIFx0c29ja2xlbl90IHNvY2tsZW47XG4gXG5AQCAtMTU2LDYgKzE1NywxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKVxuIFx0QVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgXCJicGZfbHNtX3NvY2tldF9iaW5kXCIpLCAxLCBcInByb2cgY291bnRcIik7XG4gXHRBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBOVUxMKSwgNCwgXCJ0b3RhbCBwcm9nIGNvdW50XCIpO1xuIFxuK1x0c29ja2V0X2xpbmtfZmQgPVxuK1x0XHRicGZfbGlua19jcmVhdGUoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc29ja2V0X2ZpcnN0KSxcbitcdFx0XHRcdGNncm91cF9mZCwgQlBGX0xTTV9DR1JPVVAsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0Uoc29ja2V0X2xpbmtfZmQsIDAsIFwibGluayBjcmVhdGUgc29ja2V0X2ZpcnN0XCIpKVxuK1x0XHRnb3RvIGRldGFjaF9jZ3JvdXA7XG4rXHRlcnIgPSBicGZfbGlua191cGRhdGUoc29ja2V0X2xpbmtfZmQsXG4rXHRcdFx0ICAgICAgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc29ja2V0X2NyZWF0ZV9sc20pLFxuK1x0XHRcdCAgICAgIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCJyZWplY3QgbHNtX21hYyBsaW5rIHVwZGF0ZVwiKTtcbitcdGNsb3NlKHNvY2tldF9saW5rX2ZkKTtcbitcbiBcdC8qIEF0dGFjaCBhbm90aGVyIGluc3RhbmNlIG9mIGJpbmQgcHJvZ3JhbSB0byBhbm90aGVyIGNncm91cC5cbiBcdCAqIFRoaXMgc2hvdWxkIHRyaWdnZXIgdGhlIHJldXNlIG9mIHRoZSB0cmFtcG9saW5lIHNoaW0gKHR3b1xuIFx0ICogcHJvZ3JhbXMgYXR0YWNoaW5nIHRvIHRoZSBzYW1lIGJ0Zl9pZCkuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmNcbmluZGV4IDNiZmE0NzkxMDRiZTguLjMwNzI3OTQ1Y2VjYzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG5AQCAtMjEzLDYgKzIxMywxMiBAQCBpbnQgQlBGX1BST0coc29ja2V0X2ZpcnN0LCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJsc20vc29ja2V0X2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyhzb2NrZXRfY3JlYXRlX2xzbSwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcImxzbV9jZ3JvdXAvc29ja2V0X2NyZWF0ZVwiKVxuIGludCBCUEZfUFJPRyhzb2NrZXRfc2Vjb25kLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybilcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmNcbmluZGV4IDRmYWJhODhlNDVhNWEuLjEwNzQyOTYzOGY1NDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG5AQCAtMjAsNSArMjAsMTYgQEAgaW50IGVncmVzc19hbHQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitTRUMoXCJjZ3JvdXAvc2VuZG1zZzRcIilcbitpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcbit7XG4rXHRyZXR1cm4gMTtcbit9XG4gXG4rU0VDKFwiY2dyb3VwL3NlbmRtc2c2XCIpXG4raW50IHNlbmRtc2c2KHN0cnVjdCBicGZfc29ja19hZGRyICpjdHgpXG4re1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMxLjMwNzMzOTkwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1NTc0ODM2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2ggYW5kIERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBsaXZlcy4gSSBzZWUgdGhleSd2ZSBtYWRlIHNvbWUgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGF0dGFjaG1lbnQgYW5kIHBlcm1pc3Npb25zIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXnigJl2ZSBpbnRyb2R1Y2VkIGEgbmV3IGNhc2UgZm9yIGBCUEZfUFJPR19UWVBFX0xTTWAgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCB3aGljaCBub3cgZXhwbGljaXRseSB2ZXJpZmllcyB0aGUgZXhwZWN0ZWQgYXR0YWNobWVudCB0eXBlLiBUaGF0J3MgZ29vZCwgZ3JhbnVsYXIgY29udHJvbC4gVGhlIHJlbW92YWwgb2YgdGhlIGNhcGFiaWxpdHkgY2hlY2sgZnJvbSB0aGUgYENHUk9VUF9TS0JgIHR5cGUgaW4gdGhlIHNhbWUgZnVuY3Rpb24gY2F1Z2h0IG15IGV5ZSDigJMgdGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIGlzIHRoZSByZXBsYWNlbWVudCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuRGlnZ2luZyBpbnRvIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAsIGl0IGNsZWFybHkgaGFuZGxlcyB0aGUgcGVybWlzc2lvbnMgZm9yIGBDR1JPVVBfU0tCYCB0eXBlcyBieSBjaGVja2luZyBmb3IgdGhlIGBDQVBfTkVUX0FETUlOYCBjYXBhYmlsaXR5LiBJdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLiBUaGF0J3MgYSByZWFzb25hYmxlIHJlZmFjdG9yaW5nIHRvIHNlcGFyYXRlIHBlcm1pc3Npb24gbG9naWMgZnJvbSB0eXBlIHZlcmlmaWNhdGlvbiwgYnV0IGl0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBhdHRhY2htZW50IGxvZ2ljIGFuZCByZXF1aXJlcyBkZWVwZXIgc2NydXRpbnkuIFRoZSBmYWN0IHRoYXQgYGJwZl9wcm9nX2F0dGFjaGAgYW5kIGBsaW5rX2NyZWF0ZWAgbm93IHVzZSBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGhpZ2hsaWdodHMgdGhpcy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBuZXcgY2hlY2sgaW4gYGxpbmtfdXBkYXRlYCBpcyBpbXBvcnRhbnQsIHRvby5cblxuVGhlIHByZXNlbmNlIG9mIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAgZm9yIGNncm91cCBsaW5rIHVwZGF0ZXMgYW5kIExTTSBjZ3JvdXAgbGluayB1cGRhdGVzIGlzIGhlbHBmdWwsIGFzIHRoZXNlIHRlc3RzIHNob3VsZCBwcm92aWRlIHNvbWUgYmFzaWMgY292ZXJhZ2UuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBYnNvbHV0ZWx5ISBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBjb250YWlucyB0aGUgYGJwZigyKWAgc3lzY2FsbCBoYW5kbGVycyDigJMgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGBsaW5rX3VwZGF0ZWAsIGFuZCB0aGUgYWxsLWltcG9ydGFudCBjaGVjayBmdW5jdGlvbnMuIEdpdmVuIHRoZSBCUEYgc3lzY2FsbCBpcyBmdW5kYW1lbnRhbCwgdGhpcyBpcyByZWFkaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBCUEYgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfQVRUQUNIYCwgYEJQRl9MSU5LX0NSRUFURWAsIGFuZCBgQlBGX0xJTktfVVBEQVRFYC5cblxuTmV4dCwgaXMgdGhpcyBwYXRjaCBcIldvcnRoRnV6emluZ1wiPyBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjcml0ZXJpYSBmb3Igd29ydGhpbmVzcywgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBBY2NvcmRpbmcgdG8gdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjcml0ZXJpYSwgYW55IGNoYW5nZXMgdG8gdGhlIEJQRiBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgYXJvdW5kIHN5c2NhbGwgaGFuZGxpbmcgYW5kIHBlcm1pc3Npb24gY2hlY2tzLCB3YXJyYW50IHRob3JvdWdoIGZ1enppbmcuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBwZXJtaXNzaW9uIGNoZWNrIGxvZ2ljIGZvciBsaW5rIGNyZWF0aW9uLCBsaW5rIHVwZGF0aW5nLCBhbmQgYXR0YWNobWVudCwgYW5kIGFkZHMgbmV3IHR5cGUgdmVyaWZpY2F0aW9uIGluIGBsaW5rX3VwZGF0ZWAsIGFzIHdlbGwgYXMgY2hlY2tzIGZvciBMU00gcHJvZ3JhbSBhdHRhY2ggdHlwZS4gVGhlc2UgbW9kaWZpY2F0aW9ucyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBpcyBkaXJlY3RseSBleHBvc2VkIHZpYSB0aGUgQlBGIHN5c2NhbGwgaW50ZXJmYWNlLCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGlkZW50aWZ5IGFueSByZWxldmFudCBDT05GSUcgcmVxdWlyZW1lbnRzIGZvciB0aGUgY29kZSwgdG8gZW5zdXJlIGZ1enppbmcgaXMgY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5LiBJJ2xsIHNlYXJjaCBmb3IgdGhlIENPTkZJR3MgcmVxdWlyZWQgZm9yIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX1RZUEVfTFNNYCBhbmQgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIHByb2Nlc3MgaXMgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjM3Ljg2NDgyNjIwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI3NzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfS0VZUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga2V5cy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zNj1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzgtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQyLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQ2PWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00OS0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjMtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY1LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS03MC1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjcxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNzItZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXFxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXFx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjQ3Mz1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDc3OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc4LWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzA0MT12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDQyLXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDQzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDQ0LVxcdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDYyPXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2Ny1cXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XFxua2VybmVsL2JwZi9jb3JlLmM6MzA2ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2OS1cXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cXHUwMDNla2Z1bmNfYnRmX3RhYik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzk0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzk1LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMzk2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzk3LVxcdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQzND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MzgtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQzOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ0MC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQ2NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDY2LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0Njc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0NjgtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTIyOiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIzLVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTc2OT12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVxcdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTgwNzpcXHQgIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjM3LjkxMzEwOTAxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjI4Mzg5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgQlBGIFN5c2NhbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uIGJldHRlci4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBMZXQncyB6ZXJvIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIHNlY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIEZpcnN0LCBJJ2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgbGluZXMgNDQ4MCB0aHJvdWdoIDQ2MjAuIFRoaXMgY2h1bmsgcHJvYmFibHkgZGVhbHMgd2l0aCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgc3lzY2FsbCBoYW5kbGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBvciBwZXJoYXBzIGEgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgdmFsaWRhdGlvbiBzdGFnZS4gVGhlbiwgSSB3aWxsIG1vdmUgb24gYW5kIHNjcnV0aW5pemUgbGluZXMgNTgwMC02MDAwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgaGFuZGxpbmcgYSBkaWZmZXJlbnQgZnVuY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSBvciBhIGNyaXRpY2FsIGxvb3AuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgYmVmb3JlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBmbG93cyBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGluIHRoZXNlIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBhIHBhcnRpY3VsYXIgcGFydCBvZiB0aGlzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjQxLjI3NTk0OTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NzUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0NzU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG40NDc2OlxcdHtcXG40NDc3OlxcdFxcdGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZTtcXG40NDc4OlxcdFxcbjQ0Nzk6XFx0XFx0c3dpdGNoIChwcm9nLVxcdTAwM2V0eXBlKSB7XFxuNDQ4MDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0s6XFxuNDQ4MTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUjpcXG40NDgyOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcXG40NDgzOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XFxuNDQ4NDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbjQ0ODU6XFx0XFx0XFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XFxuNDQ4NjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcXG40NDg3OlxcdFxcdFxcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcXG40NDg4OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IHB0eXBlKVxcbjQ0ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDQ5MDpcXHRcXG40NDkxOlxcdFxcdFxcdHJldHVybiBwcm9nLVxcdTAwM2VlbmZvcmNlX2V4cGVjdGVkX2F0dGFjaF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuNDQ5MjpcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHRhY2hfdHlwZSA/XFxuNDQ5MzpcXHRcXHRcXHRcXHQtRUlOVkFMIDogMDtcXG40NDk0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XFxuNDQ5NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NDk2OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9ORVRGSUxURVI6XFxuNDQ5NzpcXHRcXHRcXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX05FVEZJTFRFUilcXG40NDk4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0OTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDUwMDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcXG40NTAxOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxcbjQ1MDI6XFx0XFx0XFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9QRVJGX0VWRU5UKVxcbjQ1MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUwNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NTA1OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9LUFJPQkU6XFxuNDUwNjpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcXHUwMDI2XFx1MDAyNlxcbjQ1MDc6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkpXFxuNDUwODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTA5OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfS1BST0JFX1NFU1NJT04gXFx1MDAyNlxcdTAwMjZcXG40NTEwOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX1NFU1NJT04pXFxuNDUxMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTEyOlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfVVBST0JFX01VTFRJIFxcdTAwMjZcXHUwMDI2XFxuNDUxMzpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSlcXG40NTE0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MTU6XFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTiBcXHUwMDI2XFx1MDAyNlxcbjQ1MTY6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTilcXG40NTE3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MTg6XFx0XFx0XFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9QRVJGX0VWRU5UIFxcdTAwMjZcXHUwMDI2XFxuNDUxOTpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcXHUwMDI2XFx1MDAyNlxcbjQ1MjA6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTiBcXHUwMDI2XFx1MDAyNlxcbjQ1MjE6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkgXFx1MDAyNlxcdTAwMjZcXG40NTIyOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04pXFxuNDUyMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTI0OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1MjU6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcXG40NTI2OlxcdFxcdFxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfVENYX0lOR1JFU1MgXFx1MDAyNlxcdTAwMjZcXG40NTI3OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVENYX0VHUkVTUyBcXHUwMDI2XFx1MDAyNlxcbjQ1Mjg6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9ORVRLSVRfUFJJTUFSWSBcXHUwMDI2XFx1MDAyNlxcbjQ1Mjk6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9ORVRLSVRfUEVFUilcXG40NTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDUzMjpcXHRcXHRkZWZhdWx0OlxcbjQ1MzM6XFx0XFx0XFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xcbjQ1MzQ6XFx0XFx0XFx0aWYgKHB0eXBlID09IEJQRl9QUk9HX1RZUEVfVU5TUEVDIHx8IHB0eXBlICE9IHByb2ctXFx1MDAzZXR5cGUpXFxuNDUzNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTM2OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1Mzc6XFx0XFx0fVxcbjQ1Mzg6XFx0fVxcbjQ1Mzk6XFx0XFxuNDU0MDpcXHRzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG40NTQxOlxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbjQ1NDI6XFx0e1xcbjQ1NDM6XFx0XFx0LypcXG40NTQ0OlxcdFxcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXFxuNDU0NTpcXHRcXHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cXG40NTQ2OlxcdFxcdCAqL1xcbjQ1NDc6XFx0XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIFxcdTAwMjZcXHUwMDI2XFxuNDU0ODpcXHRcXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbjQ1NDk6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG40NTUwOlxcdFxcbjQ1NTE6XFx0XFx0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XFxuNDU1MjpcXHR9XFxuNDU1MzpcXHRcXG40NTU0OlxcdHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjg6NDEuMjc2MjExOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ5MTI3Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRoaXMgaW5mb3JtYXRpb246XG5cbioqQW5hbHl6aW5nIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgLSBMaW5lcyA1ODAwLTYwMDAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU4MDAgdG8gNjAwMC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGRlZmluZWQgb3IgY2FsbGVkIGluIHRoaXMgc2VjdGlvbiBvZiB0aGUgQlBGIHN5c2NhbGwgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBsaW5lIHJhbmdlLCBpdCdzIHByb2JhYmx5IGhhbmRsaW5nIGEgc3BlY2lmaWMgQlBGIHN5c3RlbSBjYWxsIG9yIGEgc2VnbWVudCBvZiBhIGxhcmdlciBzeXN0ZW0gY2FsbCdzIGV4ZWN1dGlvbiBwYXRoLlxuXG5NeSBmaXJzdCBndWVzcyBpcyB0aGF0IHdlIGFyZSBpbiB0aGUgY29udGV4dCBvZiBhbiBhY3R1YWwgQlBGIHByb2dyYW0uIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBwcm9jZXNzaW5nIG9mIHNvbWUgQlBGIHN5c3RlbSBjYWxsLiBJJ20gbWVudGFsbHkgY2hlY2tpbmcgd2hhdCBjYWxscyBhcmUgaW4gdGhlIHN5c3RlbSBjYWxscyBsaWtlIGBicGZfcHJvZ19sb2FkYCBvciBgYnBmX3Byb2dfYXR0YWNoYC4gSXMgaXQgdmFsaWRhdGlvbj8gU2VjdXJpdHkgY2hlY2tzPyBSZXNvdXJjZSBhY2NvdW50aW5nPyBPciBtYXliZSBpdCBpcyBzb21lIHNvcnQgb2YgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgZXZlbiBiZSByZWxhdGVkIHRvIHRoZSB0cmFjaW5nIEFQSSwgZ2l2ZW4gd2hlcmUgd2UgYXJlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGBzeXNjYWxsLmNgLiBXaGVyZSBpbiB0aGUgZmxvdyBkb2VzIHRoaXMgZmFsbD8gV2hhdCBvdGhlciBmdW5jdGlvbnMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJJ20gYW50aWNpcGF0aW5nIHBvc3NpYmx5IHNlZWluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGVyLCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgc3BlY2lmaWMgQlBGIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMg4oCTIHRob3NlIGFyZSBhbHdheXMgYSBjb25jZXJuIGluIHRoaXMgYXJlYS4gUGVyaGFwcyB0aGVyZSdzIGFuIGludGVyZXN0aW5nIGhvb2sgcG9pbnQgb3IgYSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbiBoYXBwZW5pbmcgaGVyZSB0aGF0IGlzIHdvcnRoIG5vdGluZy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjg6NDcuMTI1MzQyMzE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MDUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4MDU6XFx0XFx0aW50IHJldDtcXG41ODA2OlxcdFxcbjU4MDc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX0xJTktfQ1JFQVRFKSlcXG41ODA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4MDk6XFx0XFxuNTgxMDpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgPT0gQlBGX1NUUlVDVF9PUFMpXFxuNTgxMTpcXHRcXHRcXHRyZXR1cm4gYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUoYXR0cik7XFxuNTgxMjpcXHRcXG41ODEzOlxcdFxcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUucHJvZ19mZCk7XFxuNTgxNDpcXHRcXHRpZiAoSVNfRVJSKHByb2cpKVxcbjU4MTU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XFxuNTgxNjpcXHRcXG41ODE3OlxcdFxcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG41ODE4OlxcdFxcdGlmIChyZXQpXFxuNTgxOTpcXHRcXHRcXHRnb3RvIG91dDtcXG41ODIwOlxcdFxcbjU4MjE6XFx0XFx0c3dpdGNoIChwcm9nLVxcdTAwM2V0eXBlKSB7XFxuNTgyMjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcXG41ODIzOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSzpcXG41ODI0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxcbjU4MjU6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTOlxcbjU4MjY6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9ERVZJQ0U6XFxuNTgyNzpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NZU0NUTDpcXG41ODI4OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcXG41ODI5OlxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxuNTgzMDpcXHRcXHRcXHRicmVhaztcXG41ODMxOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XFxuNTgzMjpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxcbjU4MzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudGFyZ2V0X2ZkLFxcbjU4MzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudGFyZ2V0X2J0Zl9pZCxcXG41ODM1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmcuY29va2llLFxcbjU4MzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbjU4Mzc6XFx0XFx0XFx0YnJlYWs7XFxuNTgzODpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbjU4Mzk6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1RSQUNJTkc6XFxuNTg0MDpcXHRcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgIT0gcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpIHtcXG41ODQxOlxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuNTg0MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG41ODQzOlxcdFxcdFxcdH1cXG41ODQ0OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfUkFXX1RQKVxcbjU4NDU6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3Jhd190cF9saW5rX2F0dGFjaChwcm9nLCBOVUxMLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nLmNvb2tpZSxcXG41ODQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbjU4NDc6XFx0XFx0XFx0ZWxzZSBpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0lURVIpXFxuNTg0ODpcXHRcXHRcXHRcXHRyZXQgPSBicGZfaXRlcl9saW5rX2F0dGFjaChhdHRyLCB1YXR0ciwgcHJvZyk7XFxuNTg0OTpcXHRcXHRcXHRlbHNlIGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcXG41ODUwOlxcdFxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxuNTg1MTpcXHRcXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG41ODUyOlxcdFxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcXG41ODUzOlxcdFxcdFxcdGVsc2VcXG41ODU0OlxcdFxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHByb2csXFxuNTg1NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQsXFxuNTg1NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfYnRmX2lkLFxcbjU4NTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZy5jb29raWUsXFxuNTg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuNTg1OTpcXHRcXHRcXHRicmVhaztcXG41ODYwOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcXG41ODYxOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XFxuNTg2MjpcXHRcXHRcXHRyZXQgPSBuZXRuc19icGZfbGlua19jcmVhdGUoYXR0ciwgcHJvZyk7XFxuNTg2MzpcXHRcXHRcXHRicmVhaztcXG41ODY0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XFxuNTg2NTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfU0tCOlxcbjU4NjY6XFx0XFx0XFx0cmV0ID0gc29ja19tYXBfbGlua19jcmVhdGUoYXR0ciwgcHJvZyk7XFxuNTg2NzpcXHRcXHRcXHRicmVhaztcXG41ODY4OlxcdCNpZmRlZiBDT05GSUdfTkVUXFxuNTg2OTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfWERQOlxcbjU4NzA6XFx0XFx0XFx0cmV0ID0gYnBmX3hkcF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODcxOlxcdFxcdFxcdGJyZWFrO1xcbjU4NzI6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcXG41ODczOlxcdFxcdFxcdGlmIChhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSA9PSBCUEZfVENYX0lOR1JFU1MgfHxcXG41ODc0OlxcdFxcdFxcdCAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSA9PSBCUEZfVENYX0VHUkVTUylcXG41ODc1OlxcdFxcdFxcdFxcdHJldCA9IHRjeF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODc2OlxcdFxcdFxcdGVsc2VcXG41ODc3OlxcdFxcdFxcdFxcdHJldCA9IG5ldGtpdF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODc4OlxcdFxcdFxcdGJyZWFrO1xcbjU4Nzk6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX05FVEZJTFRFUjpcXG41ODgwOlxcdFxcdFxcdHJldCA9IGJwZl9uZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODgxOlxcdFxcdFxcdGJyZWFrO1xcbjU4ODI6XFx0I2VuZGlmXFxuNTg4MzpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcXG41ODg0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyODo0Ny4xMjU1NzU0MzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ0MDc4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXM6XG5cbioqQW5hbHl6aW5nIGBsaW5rX3VwZGF0ZWAgQXJvdW5kIExpbmUgNTk1MC02MDAwKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGxpbmtfdXBkYXRlYCBiZXR3ZWVuIGxpbmVzIDU5NTAgYW5kIDYwMDAuIENvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN5c3RlbXMsIHRoaXMgaXMgbGlrZWx5IGEgY3J1Y2lhbCBzZWN0aW9uLiBJJ20gZ3Vlc3NpbmcgaXQncyBoYW5kbGluZyBhIHNwZWNpZmljIHVwZGF0ZSByZWxhdGVkIHRvIGxpbmtpbmcsIHdoaWNoIGNvdWxkIG1lYW4gYW55dGhpbmcgZnJvbSBncmFwaCB0cmF2ZXJzYWxzIHRvIHJlc291cmNlIGFzc2lnbm1lbnRzLCBvciBtYXliZSBldmVuIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBsaW5lIG51bWJlcnMgY2FuIGJlIGltcHJlY2lzZSB3aXRob3V0IHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZmlsZSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIGltbWVkaWF0ZWx5IGFyb3VuZCB0aGF0IHJhbmdlIHRvIGdldCB0aGUgYmVzdCBmZWVsIGZvciB0aGUgaW50ZW50LiBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGNvbXBsZXggaW50ZXJwbGF5IG9mIGRhdGEgc3RydWN0dXJlcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHRoZSBpZGVudGlmaWNhdGlvbiBvZiB0aGUgc3BlY2lmaWMgbGluaywgdGhlIHZhbGlkYXRpb24gb2YgaXRzIHByb3BlcnRpZXMsIGFuZCB0aGUgY2FzY2FkaW5nIGVmZmVjdHMgb2YgdGhhdCB1cGRhdGUgb24gZGVwZW5kZW50IGNvbXBvbmVudHMuIEtub3dpbmcgaG93IHRob3JvdWdobHkgdGhlIGRldmVsb3BlcnMgdGhvdWdodCB0aHJvdWdoIHRob3NlIGVkZ2UgY2FzZXMgd2lsbCBwcm92aWRlIGEgcXVpY2sgc2Vuc2Ugb2YgdGhlIGNvZGUncyBtYXR1cml0eS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHNwb3QgdGhlIGhpZ2gtbGV2ZWwgbG9naWMgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIGJlIHN1YmplY3QgdG8gYSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyODo0OS40Njk2NTYzODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTk1MTpcXHRcXG41OTUyOlxcdFxcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcXG41OTUzOlxcdFxcdGlmIChJU19FUlIobGluaykpXFxuNTk1NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcXG41OTU1OlxcdFxcbjU5NTY6XFx0XFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX21hcCkge1xcbjU5NTc6XFx0XFx0XFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xcbjU5NTg6XFx0XFx0XFx0Z290byBvdXRfcHV0X2xpbms7XFxuNTk1OTpcXHRcXHR9XFxuNTk2MDpcXHRcXG41OTYxOlxcdFxcdG5ld19wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcXG41OTYyOlxcdFxcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XFxuNTk2MzpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG5ld19wcm9nKTtcXG41OTY0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9saW5rO1xcbjU5NjU6XFx0XFx0fVxcbjU5NjY6XFx0XFxuNTk2NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxuNTk2ODpcXHRcXHRcXHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCk7XFxuNTk2OTpcXHRcXHRcXHRpZiAoSVNfRVJSKG9sZF9wcm9nKSkge1xcbjU5NzA6XFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihvbGRfcHJvZyk7XFxuNTk3MTpcXHRcXHRcXHRcXHRvbGRfcHJvZyA9IE5VTEw7XFxuNTk3MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfcHJvZ3M7XFxuNTk3MzpcXHRcXHRcXHR9XFxuNTk3NDpcXHRcXHR9IGVsc2UgaWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XFxuNTk3NTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjU5NzY6XFx0XFx0XFx0Z290byBvdXRfcHV0X3Byb2dzO1xcbjU5Nzc6XFx0XFx0fVxcbjU5Nzg6XFx0XFxuNTk3OTpcXHRcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstXFx1MDAzZWF0dGFjaF90eXBlKTtcXG41OTgwOlxcdFxcdGlmIChyZXQpXFxuNTk4MTpcXHRcXHRcXHRnb3RvIG91dF9wdXRfcHJvZ3M7XFxuNTk4MjpcXHRcXG41OTgzOlxcdFxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKVxcbjU5ODQ6XFx0XFx0XFx0cmV0ID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xcbjU5ODU6XFx0XFx0ZWxzZVxcbjU5ODY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG41OTg3OlxcdFxcbjU5ODg6XFx0b3V0X3B1dF9wcm9nczpcXG41OTg5OlxcdFxcdGlmIChvbGRfcHJvZylcXG41OTkwOlxcdFxcdFxcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XFxuNTk5MTpcXHRcXHRpZiAocmV0KVxcbjU5OTI6XFx0XFx0XFx0YnBmX3Byb2dfcHV0KG5ld19wcm9nKTtcXG41OTkzOlxcdG91dF9wdXRfbGluazpcXG41OTk0OlxcdFxcdGJwZl9saW5rX3B1dF9kaXJlY3QobGluayk7XFxuNTk5NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjU5OTY6XFx0fVxcbjU5OTc6XFx0XFxuNTk5ODpcXHQjZGVmaW5lIEJQRl9MSU5LX0RFVEFDSF9MQVNUX0ZJRUxEIGxpbmtfZGV0YWNoLmxpbmtfZmRcXG41OTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyODo0OS40Njk4ODQ5NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc0ODQ0NzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcsIHNwZWNpZmljYWxseSBob3cgaXQgYWZmZWN0cyBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBsaW5raW5nLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgZGlyZWN0bHkgY2FsbGVkIGBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZ2Agd2l0aG91dCBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBjaGVjazogYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay1cdTAwM2VhdHRhY2hfdHlwZSlgLiBOb3csIHRoYXQgY2hlY2sgaXMgYmVpbmcgZG9uZSAqYmVmb3JlKiB0aGUgdXBkYXRlLCB3aGljaCBpcyBnb29kLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBpcyBkb2luZy4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyB0aGUgY29tcGF0aWJpbGl0eSBvZiBhIHByb2dyYW0ncyB0eXBlIHdpdGggdGhlIGF0dGFjaG1lbnQgdHlwZS4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIGNyaXRpY2FsIG92ZXJzaWdodCwgbmFtZWx5IHRoYXQgaXQgZGlkbid0IGhhbmRsZSBgQlBGX1BST0dfVFlQRV9MU01gIGNvcnJlY3RseS4gSXQgYXBwZWFycyB0aGF0IHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfUFJPR19UWVBFX0xTTWAgYW5kIGBCUEZfTFNNX0NHUk9VUGAgdGhlIGNoZWNrIHdvdWxkIHBhc3MgZXZlbiB3aGVuIHRoZSBwcm9ncmFtJ3MgKmV4cGVjdGVkKiBhdHRhY2ggdHlwZSBkaWRuJ3QgbWF0Y2ggdGhlIG9uZSBiZWluZyB1c2VkLCB3aGljaCBpcyBhIG1ham9yIHNlY3VyaXR5IGZsYXcuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYGNhc2UgQlBGX1BST0dfVFlQRV9MU01gIGFkZHJlc3NlcyB0aGlzIHZ1bG5lcmFiaWxpdHksIGVuc3VyaW5nIHRoZSBgZXhwZWN0ZWRfYXR0YWNoX3R5cGVgIGFsaWducyB3aXRoIHRoZSBhY3R1YWwgYGF0dGFjaF90eXBlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNvdW5kLlxuXG5UaGUgdGhpcmQgY2hhbmdlIGludm9sdmVzIHNlcGFyYXRpbmcgdGhlIHBlcm1pc3Npb24gY2hlY2sgZm9yIGBDR1JPVVBfU0tCYCBmcm9tIHRoZSBgYXR0YWNoX3R5cGVgIHZhbGlkYXRpb24uIEl0J3MgYSBzbWFydCBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLlxuXG5Ob3cgSSBuZWVkIHRvIGZvY3VzIG9uIGtleSBzeW1ib2xzLiBUaGVzZSBhcmUgZ29pbmcgdG8gYmUgbXkgZm9jdXMgcG9pbnRzOiBgYnBmX3Byb2dfYXR0YWNoYCAoYW5kLCBjb25zZXF1ZW50bHksIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gKSwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAuXG5cbkkga25vdyB0aGVzZSBhcmUgYWxsIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCdzIGNvbmZpcm06IGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIGFyZSBzdGF0aWMuIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYCBhcmUgYWxzbyBzdGF0aWMsIGFuZCBjYWxsZWQgaW4gYF9fc3lzX2JwZmAuIFRoZXNlIGFsbCB0eXBpY2FsbHkgZXhpc3QgYXMgc3ltYm9scyBpbiB2bWxpbnV4LlxuXG5JJ20gbm93IGdvaW5nIHRvIG5hcnJvdyBkb3duIG15IGZvY3VzIHRvIHRob3NlIGZpdmUgc3ltYm9sczogYGxpbmtfdXBkYXRlYCwgYGxpbmtfY3JlYXRlYCwgYGJwZl9wcm9nX2F0dGFjaGAsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBhbmQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYC5cblxuQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgKnViaXF1aXRvdXMqPyBOby4gVGhleSBhcmUgQlBGLXNwZWNpZmljIGVudHJ5IHBvaW50cyBhbmQgaGVscGVycyByZWxhdGVkIHRvIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayBtYW5hZ2VtZW50LCBub3QgZ2VuZXJhbCBrZXJuZWwgdXRpbGl0aWVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUbyBjb21waWxlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIEknbGwgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSdtIGFsc28gZ29pbmcgdG8gbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfQlBGX0xTTWAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIG9yIHNpbXBseSBgQ09ORklHX0JQRmAgYXJlIG5lZWRlZC4gS2NvbmZpZyB3aWxsIGJlIG15IGd1aWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjU2LjIxODMzNTU5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODQ1OTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjg6NTYuMjY4MDUzNjY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDc3MTM3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBmb3IgQlBGX1NZU0NBTEwgaW4gS2NvbmZpZ3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCBhY3Jvc3MgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIGlzbid0IHVzdWFsbHkgc29tZXRoaW5nIEknZCBhcHByb2FjaCB3aXRob3V0IGEgc3BlY2lmaWMgY29udGV4dCwgc28gSSdtIGxpa2VseSBkZWJ1Z2dpbmcgYSByZWxhdGVkIGlzc3VlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBlbmFibGVtZW50IGRlcGVuZGVuY2llcywgb3IgcG9zc2libHkgbG9va2luZyBhdCBob3cgaXQncyBoYW5kbGVkIGluIGEgcGFydGljdWxhciBzdWItYXJjaGl0ZWN0dXJlIG9yIGRpc3Ryby4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGtpY2tzIGluOiBJIGNvdWxkIHVzZSBhIHNpbXBsZSBgZ3JlcGAgYWNyb3NzIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCBJIGtub3cgdGhhdCBjYW4gYmUgaW5lZmZpY2llbnQgYW5kIG1pc3Mgc3VidGxldGllcy4gSSBuZWVkIHRvIGJlIG1vcmUgc3RyYXRlZ2ljLiBJIHdpbGwgaGF2ZSB0byBzdGFydCBieSBnZXR0aW5nIG15IHNlYXJjaCBvcmdhbml6ZWQuXG5cbkkga25vdyB0aGVyZSBhcmUgdG9vbHMsIGxpa2VseSBidWlsdCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmLCB3aGljaCBjYW4gZmFjaWxpdGF0ZSB0aGlzIGxvb2t1cC4gSSB3YW50IHRoZSBtb3N0IHJlbGlhYmxlIHRvb2wsIHRoYXQgd29uJ3QgbWlzcyBhbnkgZWRnZSBjYXNlcywgbGlrZSBjb25kaXRpb25hbCBpbmNsdXNpb24gb3IgdmFyaWFibGUgYXNzaWdubWVudC4gSSBtaWdodCBzdGFydCB3aXRoIGBmaW5kYCBhbmQgYGdyZXBgIGlmIEknbSBvbiBhIHN5c3RlbSB3aXRob3V0IHRoZSBga2NvbmZpZy10dWlgIGFuZCBpdHMgYXNzb2NpYXRlZCB0b29saW5nIHJlYWRpbHkgYXZhaWxhYmxlLiBIb3dldmVyIEkgc2hvdWxkIGZpcnN0IGNoZWNrIHRoZSBidWlsZCBzeXN0ZW0ncyBuYXRpdmUgc2VhcmNoIGZ1bmN0aW9ucy4gSSBtaWdodCB1c2UgdGhlIGBtZW51Y29uZmlnYCBvciBgZGVmY29uZmlnYCB0b29scyBmb3IgYSBtb3JlIGluLWRlcHRoIGFwcHJvYWNoLCB3aGljaCBjYW4gaGlnaGxpZ2h0IGRlcGVuZGVuY2llcyBhbmQgdGhlIGxvZ2ljIGRyaXZpbmcgdGhlIG9wdGlvbidzIHZhbHVlLiBcblxuTXkgZ29hbHM6IHBpbnBvaW50IHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgKmRlZmluZWQqLCB3aGVyZSBpdCdzICp1c2VkKiAoZS5nLiwgaW4gYGlmYCBzdGF0ZW1lbnRzLCBgc2VsZWN0YCBkaXJlY3RpdmVzLCBhc3NpZ25tZW50cyksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhpcyBhbHNvIGluY2x1ZGVzIGFueSBwb3RlbnRpYWwgYWxpYXNlcyBvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBjb250ZXh0IG9mIHRoZSBzZXR0aW5nIC0gaXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljPyBEcml2ZXItc3BlY2lmaWM/IFBhcnQgb2YgYSBicm9hZGVyIHNlY3VyaXR5IGZlYXR1cmU/IFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM2MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjU5LjIxNTc3MTkzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MzEyODAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyOTowMS4xNzg5MDkxNzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDQ3MTEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIGhlYWQgZG93biB0byBhcm91bmQgbGluZSAzMCwgcmlnaHQgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCwgdGhlIG9uZXMgdGhhdCBkaWN0YXRlIHdoZXRoZXIgdGhlIEJQRiBzdWJzeXN0ZW0gZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBmdW5kYW1lbnRhbCBjb250cm9scy4gQXJlIHdlIGxvb2tpbmcgYXQgZW5hYmxpbmcgQlBGIGluIGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBtb3JlIGdyYW51bGFyIG9wdGlvbnMgdG8gY29uZmlndXJlIHNwZWNpZmljIEJQRiBmZWF0dXJlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZ2F0ZWtlZXBlcnMg4oCTIHRoZSBpbml0aWFsIGJvb2xlYW5zIHRoYXQgZGV0ZXJtaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGVudGlyZSBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEknbSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIGtub2JzIHRvIHR3aXN0IGZvciBicm9hZCBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDMuNDMzMzg0NDg2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjY6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDI3OlxcdFxcdGJvb2xcXG4gIDI4OlxcdFxcbiAgMjk6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAzMjpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgQlBGXFxuICAzNDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDM1OlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzY6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzc6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM4OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzOTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDQwOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICA0MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDQ6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA1MDpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNTE6XFx0XFx0aGVscFxcbiAgNTI6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA1MzpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTQ6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1NTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTg6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU5OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNjA6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA2MTpcXHRcXG4gIDYyOlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNjM6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2NzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDcwOlxcdFxcdCAgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEgYW5kIHNldHRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhhdCB3aWxsXFxuICA3MTpcXHRcXHQgIHJldHVybiBmYWlsdXJlLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxuICA3NDpcXHRcXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNzY6XFx0XFxuICA3NzpcXHRjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbiAgNzg6XFx0XFx0Ym9vbCBcXFwiRGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcXFwiXFxuICA3OTpcXHRcXHRkZWZhdWx0IHlcXG4gIDgwOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgRGlzYWJsZXMgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDgzOlxcdFxcdCAgL3Byb2Mvc3lzL2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIGtub2IgdG8gMi4gQW4gYWRtaW4gY2FuXFxuICA4NDpcXHRcXHQgIHN0aWxsIHJlZW5hYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMCBsYXRlciBvbiwgb3IgcGVybWFuZW50bHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDMuNDMzNDU0OTk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTgzMjQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM6IENHUk9VUF9CUEYgYW5kIEJQRl9MU00qKlxuXG5BbHJpZ2h0LCBsZXQncyBjaXJjbGUgYmFjayBhbmQgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIGtlcm5lbCBzZWN1cml0eSwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IHByb2plY3QuIEkgbmVlZCB0byBleHBsaWNpdGx5IGFjY291bnQgZm9yIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJIGNhbid0IGp1c3QgYXNzdW1lIHRoZXkncmUgaGFuZGxlZDsgdGhleSdyZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgd2UgKmhhdmUqIHRvIGFkZHJlc3MuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCBvdXIgc2FuZGJveGluZy9zZWN1cml0eSBwb2xpY2llcy4gQXJlIG91ciBlQlBGIGZpbHRlcnMgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgdGhlIGludGVyYWN0aW9ucyB3aXRoIGNncm91cHM/IERvIHdlIGhhdmUgcG90ZW50aWFsIGJ5cGFzc2VzIGlmIGEgbWFsaWNpb3VzIGFjdG9yIGNhbiBpbmZsdWVuY2UgYm90aCBjZ3JvdXAgYXNzaWdubWVudHMgKmFuZCogdGhlIEJQRiBjb2RlPyBXZSBuZWVkIGEgY2xlYXIgYXVkaXQgcGF0aCBoZXJlLlxuXG5BbmQgd2hhdCBhYm91dCBgQlBGX0xTTWA/IEkga25vdyBpdCdzIHJlbGF0aXZlbHkgbmV3LCBidXQgdGhlIHBvd2VyIGl0IG9mZmVycywgaW4gdGhlIHdyb25nIGhhbmRzLCBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIHdoZXRoZXIgd2UncmUgdXNpbmcgaXQsIGhvdyB3ZSd2ZSBjb25maWd1cmVkIGl0LCBhbmQsIGNyaXRpY2FsbHksIGhvdyB3ZSdyZSAqdmFsaWRhdGluZyogYW55IGNoYW5nZXMgbWFkZSB0aHJvdWdoIGl0LiBBcmUgb3VyIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbXMgcm9idXN0IGVub3VnaCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24/IElzIG91ciBsb2dnaW5nIHN1ZmZpY2llbnRseSBncmFudWxhciB0byBkZXRlY3QgYW5kIHJlc3BvbmQgdG8gc3VzcGljaW91cyBiZWhhdmlvciByZWxhdGVkIHRvIGBCUEZfTFNNYCBldmVudHM/IFRoaXMgcmVxdWlyZXMgbW9yZSB0aGFuIGEgY3Vyc29yeSBnbGFuY2U7IGl0IGRlc2VydmVzIGRlZXAgc2NydXRpbnkgdG8gZW5zdXJlIHdlIGhhdmVuJ3QgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2VkIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eS4gSXQgaXMgd29ydGggZ29pbmcgYmFjayBhbmQgZGlnZ2luZyB1cCB0aGUgZG9jdW1lbnRhdGlvbiB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIEkgaGF2ZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDYuMzUxNzgzMzE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAxNDM1NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGfGNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTUtXFxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9OTQ9c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctOTUtXFxua2VybmVsL2JwZi9LY29uZmlnOjk2OmNvbmZpZyBCUEZfTFNNXFxua2VybmVsL2JwZi9LY29uZmlnLTk3LVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDguOTUzMjI1Mjc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTMyNzYzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgUmVsYXRlZCB0byBCUEYgYW5kIExTTSoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBDb21tb24gR3JvdXAgQlBGIChgQ0dST1VQX0JQRmApIGFuZCB0aGUgQlBGIExTTSBpbnRlZ3JhdGlvbiAoYEJQRl9MU01gKS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGFuZCBpbnNwZWN0IHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgdGhlIGxpbmVzIG9mIGNvZGUgYXJvdW5kIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBjb250ZXh0LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgY29uZmxpY3RzPyBXaGF0IGV4YWN0bHkgZG9lcyBlbmFibGluZy9kaXNhYmxpbmcgZWFjaCBvcHRpb24gZW50YWlsPyBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBCUEYgZmVhdHVyZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0gYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IHRoZXkgaGF2ZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSdtIGFib3V0IHRvIGNvbmR1Y3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MTUuMjA2NTA0MTQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1NTpcXHRcXG4xMzU2OlxcdGNvbmZpZyBDR1JPVVBfQlBGXFxuMTM1NzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuMTM1ODpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuMTM1OTpcXHRcXHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxcbjEzNjA6XFx0XFx0aGVscFxcbjEzNjE6XFx0XFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXFxuMTM2MjpcXHRcXHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXFxuMTM2MzpcXHRcXG4xMzY0OlxcdFxcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxcbjEzNjU6XFx0XFx0ICBvZiBhdHRhY2htZW50LiBGb3IgaW5zdGFuY2UsIHByb2dyYW1zIHRoYXQgYXJlIGF0dGFjaGVkIHVzaW5nXFxuMTM2NjpcXHRcXHQgIEJQRl9DR1JPVVBfSU5FVF9JTkdSRVNTIHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIGluZ3Jlc3MgcGF0aCBvZlxcbjEzNjc6XFx0XFx0ICBpbmV0IHNvY2tldHMuXFxuMTM2ODpcXHRcXG4xMzY5OlxcdGNvbmZpZyBDR1JPVVBfTUlTQ1xcbjEzNzA6XFx0XFx0Ym9vbCBcXFwiTWlzYyByZXNvdXJjZSBjb250cm9sbGVyXFxcIlxcbjEzNzE6XFx0XFx0ZGVmYXVsdCBuXFxuMTM3MjpcXHRcXHRoZWxwXFxuMTM3MzpcXHRcXHQgIFByb3ZpZGVzIGEgY29udHJvbGxlciBmb3IgbWlzY2VsbGFuZW91cyByZXNvdXJjZXMgb24gYSBob3N0LlxcbjEzNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjE1LjIwNjYzMjMyM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4MTI4MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIEJQRiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhbmQgc3BlY2lmaWNhbGx5IHRoZSBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVncmF0aW9uLiBUbyBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEknbSByZWFzb25hYmx5IGNlcnRhaW4gaXQncyBpbiB0aGVyZSBzb21ld2hlcmUsIGxpa2VseSB0b3dhcmQgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBCUEYncyBjb3JlIGZlYXR1cmVzLiBMZXQncyBzdGFydCBhcm91bmQgbGluZSA5NiBhbmQgc2VlIHdoYXQncyB3aGF0LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gemVybyBpbiBvbiBgQlBGX0xTTWAuIEhvcGVmdWxseSwgdGhhdCdsbCBiZSBlbm91Z2ggdG8gZmluZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjE3LjEzNDc2NDAwMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgQlBGX0xTTVxcbiAgOTc6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxuICA5OTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDEwMDpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuIDEwMTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gMTAyOlxcdFxcdGhlbHBcXG4gMTAzOlxcdFxcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxcbiAxMDQ6XFx0XFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXFxuIDEwNzpcXHRcXG4gMTA4OlxcdGNvbmZpZyBCUEZfSklUX0tBU0FOXFxuIDEwOTpcXHRcXHRib29sXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cXG4gMTExOlxcdFxcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xcbiAxMTI6XFx0XFx0ZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DXFxuIDExMzpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gMTE0OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyOToxNy4xMzQ4MzExODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ5MDA5MTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBDb25maXJtYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIHRoaXMgZnV6emluZyB0YXJnZXQgaXMgc291bmQuIEZpcnN0LCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgdGhlIGluaXRpYWwgaW5kaWNhdG9yLiBEaWdnaW5nIGRlZXBlciwgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBpdCdzIHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgYXJlYXM6IHRoZSBgbGlua191cGRhdGVgIGZ1bmN0aW9uIHdpdGggYXR0YWNoIHR5cGUgdmFsaWRhdGlvbiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGBCUEZfUFJPR19UWVBFX0xTTWAgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBhbmQgYWxzbyByZWZhY3RvcmluZyB0aGUgY2FwYWJpbGl0eSBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byBhIG5ldyBoZWxwZXIsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAuIFRoZXNlIGFyZSBhbGwgYWNjZXNzaWJsZSBCUEYgc3lzY2FsbHMsIHBhcnRpY3VsYXJseSB0aGUgYEJQRl9QUk9HX0FUVEFDSGAsIGBCUEZfTElOS19DUkVBVEVgLCBhbmQgYEJQRl9MSU5LX1VQREFURWAgY2FsbHMsIGFsbCBvZiB3aGljaCBhcmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIHdpdGggZnV6emluZy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayBjb3JyZWN0OiBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgQlBGX0xTTWAgYWxsIHNlZW0gZXNzZW50aWFsIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBsZXQncyB2ZXJpZnkgb3VyIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuIEl0J3MgY3J1Y2lhbCB3ZSdyZSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gT2theSwgYSBxdWljayBkb3VibGUtY2hlY2s6IGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBgbGlua191cGRhdGVgLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYW5kIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAgLSBhbGwgb2YgdGhlbSBhcmUgcmlnaHQgb24gdGFyZ2V0LiBUaGVzZSBmdW5jdGlvbnMgc2VlbSB0byBjb3ZlciB0aGUgcmVsZXZhbnQgbG9naWMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guXG5cbk5vdywgd2l0aCB0aGlzIGNvbmZpcm1hdGlvbiwgSSdtIGNvbWZvcnRhYmxlIHByb2NlZWRpbmcuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NzMsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MjEuNjI0OTI0OTc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MDkzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIixcbiAgICBcImJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImxpbmtfY3JlYXRlXCIsXG4gICAgXCJsaW5rX3VwZGF0ZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlXCIsXG4gICAgXCJicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBCUEYgc3lzY2FsbCBsb2dpYyBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYywgaW50cm9kdWNpbmcgYXR0YWNoIHR5cGUgdmVyaWZpY2F0aW9uIGZvciBsaW5rX3VwZGF0ZSwgY2hlY2tpbmcgTFNNIGV4cGVjdGVkIGF0dGFjaCB0eXBlcyBpbiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUsIGFuZCByZWZhY3RvcmluZyBjZ3JvdXAtc2tiIGNhcGFiaWxpdHkgY2hlY2tzIGludG8gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0uIFRoZXNlIGVudHJ5cG9pbnRzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoMikgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MjEuNzA2NTQyNzI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MzY5NDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjIxLjcwNzE0NzI0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2MjYzMDg1MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbW9kaWZ5IGNvbnRyb2wtZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYyB1c2luZyBhbHJlYWR5LWluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgKGJwZl9wcm9nIGFuZCBicGZfbGluaykuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgc2l6ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRmZDliNjE1MDc3ZjI5NDc3Y2VkNzRjMTVmM2ZiZDYxODZlZDAzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDY6Mjg6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi4yYmNkM2YzYTJhNTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNDQ4MSwxNCArNDQ4MSw5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcbitcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG4gXHRcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbi1cdFx0aWYgKCFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVx1MDAzZWF1eC1cdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXG4tXHRcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4tXHRcdFx0ICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cbiBcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuIFx0XHRpZiAocHJvZy1cdTAwM2V0eXBlICE9IHB0eXBlKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTQ1NDIsNiArNDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0ICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4re1xuK1x0LypcbitcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXG4rXHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbitcdCAqL1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gXHRcdFx0XHRib29sIGNoZWNrX2F0eXBlKVxuIHtcbkBAIC00NjA2LDcgKzQ2MTUsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuK1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpKSB7XG4gXHRcdGJwZl9wcm9nX3B1dChwcm9nKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTgwNSw4ICs1ODE0LDcgQEAgc3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4gXHRpZiAoSVNfRVJSKHByb2cpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcm9nKTtcbiBcbi1cdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLFxuLVx0XHRcdFx0XHRcdGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC01OTY4LDYgKzU5NzYsMTAgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuIFx0fVxuIFxuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLVx1MDAzZWF0dGFjaF90eXBlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbitcbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZylcbiBcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuaW5kZXggMTUwOTNhNjk1MTBlYi4uM2I0M2MzNDkxN2NjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJjYXBfaGVscGVycy5oXCJcbiAjaW5jbHVkZSBcImNncm91cF9oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwidGVzdGluZ19oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwidGVzdF9jZ3JvdXBfbGluay5za2VsLmhcIlxuQEAgLTI0LDcgKzI1LDc3IEBAIGludCBwaW5nX2FuZF9jaGVjayhpbnQgZXhwX2NhbGxzLCBpbnQgZXhwX2FsdF9jYWxscylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4rc3RhdGljIHZvaWQgdGVzdF9jZ3JvdXBfbGlua191cGRhdGUodm9pZClcbit7XG4rXHRjb25zdCBfX3U2NCBjYXBzID0gKDFVTEwgXHUwMDNjXHUwMDNjIENBUF9ORVRfQURNSU4pIHwgKDFVTEwgXHUwMDNjXHUwMDNjIENBUF9TWVNfQURNSU4pO1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbitcdF9fdTY0IHNhdmVkX2NhcHMgPSAwO1xuK1x0aW50IGNnX2ZkID0gLTEsIGVycjtcbitcbitcdHNrZWwgPSB0ZXN0X2Nncm91cF9saW5rX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY2dfaW5pdFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2dfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoXCIvY2dyb3VwX2xpbmtfdXBkYXRlXCIpO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2dfZmQsIDAsIFwiY2dfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBqb2luX2Nncm91cChcIi9jZ3JvdXBfbGlua191cGRhdGVcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY2dfam9pblwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3Muc2VuZG1zZzQsIGNnX2ZkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImF0dGFjaF9zZW5kbXNnNFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtXHUwMDNlcHJvZ3Muc2VuZG1zZzYpO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCJyZWplY3Rfc2VuZG1zZzZfdXBkYXRlXCIpO1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRsaW5rID0gTlVMTDtcbitcbitcdGVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCBcdTAwMjZzYXZlZF9jYXBzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJkcm9wX2NhcHNfZm9yX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XG4rXHRpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIFwiYXR0YWNoX3dpdGhvdXRfbmV0X2FkbWluXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuK1x0bGluayA9IE5VTEw7XG4rXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FUEVSTSwgXCJhdHRhY2hfZXJyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzIFx1MDAyNiBjYXBzLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJyZXN0b3JlX2NhcHNfZm9yX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJhdHRhY2hfZWdyZXNzXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgXHUwMDI2c2F2ZWRfY2Fwcyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiZHJvcF9jYXBzXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3NfYWx0KTtcbitcdEFTU0VSVF9PSyhlcnIsIFwidXBkYXRlX3dpdGhvdXRfbmV0X2FkbWluXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRlcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzIFx1MDAyNiBjYXBzLCBOVUxMKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwicmVzdG9yZV9jYXBzXCIpO1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRpZiAoY2dfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ19mZCk7XG4rXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0dGVzdF9jZ3JvdXBfbGlua19fZGVzdHJveShza2VsKTtcbitcdHNrZWwgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB7XG4gXHRcdGNvbnN0IGNoYXIgKnBhdGg7XG5AQCAtMjUzLDMgKzMyNCwxMSBAQCB2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4gXHR9XG4gXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuIH1cbitcbit2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4re1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhdHRhY2hcIikpXG4rXHRcdHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVwZGF0ZVwiKSlcbitcdFx0dGVzdF9jZ3JvdXBfbGlua191cGRhdGUoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG5pbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbkBAIC03NCw2ICs3NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpXG4gXHRpbnQgYmluZF9wcm9nX2ZkID0gLTE7XG4gXHRpbnQgYmluZF9saW5rX2ZkID0gLTE7XG4gXHRpbnQgY2xvbmVfcHJvZ19mZCA9IC0xO1xuK1x0aW50IHNvY2tldF9saW5rX2ZkID0gLTE7XG4gXHRpbnQgZXJyLCBmZCwgcHJpbztcbiBcdHNvY2tsZW5fdCBzb2NrbGVuO1xuIFxuQEAgLTE1Niw2ICsxNTcsMTcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZClcbiBcdEFTU0VSVF9FUShxdWVyeV9wcm9nX2NudChjZ3JvdXBfZmQsIFwiYnBmX2xzbV9zb2NrZXRfYmluZFwiKSwgMSwgXCJwcm9nIGNvdW50XCIpO1xuIFx0QVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgTlVMTCksIDQsIFwidG90YWwgcHJvZyBjb3VudFwiKTtcbiBcbitcdHNvY2tldF9saW5rX2ZkID1cbitcdFx0YnBmX2xpbmtfY3JlYXRlKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnNvY2tldF9maXJzdCksXG4rXHRcdFx0XHRjZ3JvdXBfZmQsIEJQRl9MU01fQ0dST1VQLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKHNvY2tldF9saW5rX2ZkLCAwLCBcImxpbmsgY3JlYXRlIHNvY2tldF9maXJzdFwiKSlcbitcdFx0Z290byBkZXRhY2hfY2dyb3VwO1xuK1x0ZXJyID0gYnBmX2xpbmtfdXBkYXRlKHNvY2tldF9saW5rX2ZkLFxuK1x0XHRcdCAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnNvY2tldF9jcmVhdGVfbHNtKSxcbitcdFx0XHQgICAgICBOVUxMKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FSU5WQUwsIFwicmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGVcIik7XG4rXHRjbG9zZShzb2NrZXRfbGlua19mZCk7XG4rXG4gXHQvKiBBdHRhY2ggYW5vdGhlciBpbnN0YW5jZSBvZiBiaW5kIHByb2dyYW0gdG8gYW5vdGhlciBjZ3JvdXAuXG4gXHQgKiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSByZXVzZSBvZiB0aGUgdHJhbXBvbGluZSBzaGltICh0d29cbiBcdCAqIHByb2dyYW1zIGF0dGFjaGluZyB0byB0aGUgc2FtZSBidGZfaWQpLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG5pbmRleCAzYmZhNDc5MTA0YmU4Li4zMDcyNzk0NWNlY2MzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuQEAgLTIxMyw2ICsyMTMsMTIgQEAgaW50IEJQRl9QUk9HKHNvY2tldF9maXJzdCwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwibHNtL3NvY2tldF9jcmVhdGVcIilcbitpbnQgQlBGX1BST0coc29ja2V0X2NyZWF0ZV9sc20sIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJsc21fY2dyb3VwL3NvY2tldF9jcmVhdGVcIilcbiBpbnQgQlBGX1BST0coc29ja2V0X3NlY29uZCwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG5pbmRleCA0ZmFiYTg4ZTQ1YTVhLi4xMDc0Mjk2MzhmNTQzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuY1xuQEAgLTIwLDUgKzIwLDE2IEBAIGludCBlZ3Jlc3NfYWx0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1jaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rU0VDKFwiY2dyb3VwL3NlbmRtc2c0XCIpXG4raW50IHNlbmRtc2c0KHN0cnVjdCBicGZfc29ja19hZGRyICpjdHgpXG4re1xuK1x0cmV0dXJuIDE7XG4rfVxuIFxuK1NFQyhcImNncm91cC9zZW5kbXNnNlwiKVxuK2ludCBzZW5kbXNnNihzdHJ1Y3QgYnBmX3NvY2tfYWRkciAqY3R4KVxuK3tcbitcdHJldHVybiAxO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyOToyMS43MDcxNDgyMjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0NjMyMTI4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IG9mIEJQRiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayBjcmVhdGlvbi91cGRhdGUgcm91dGluZXMuIEl0J3MgZXNzZW50aWFsbHkgcmVmaW5pbmcgcGVybWlzc2lvbiBjaGVja3MgYW5kIGF0dGFjaCB0eXBlIHZhbGlkYXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYENHUk9VUF9TS0JgIGFuZCBub3cgaW5jb3Jwb3JhdGluZyBgTFNNYCBwcm9ncmFtcy4gVGhlIGtleSBjaGFuZ2VzIGFyZTpcblxuMS4gICoqUmVvcmdhbml6YXRpb24gb2YgQ2hlY2tzOioqIFRoZSBgQ0FQX05FVF9BRE1JTmAgcGVybWlzc2lvbiBjaGVjayBmb3IgYENHUk9VUF9TS0JgIGlzIG1vdmVkIGZyb20gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYCB0byBhIG5ldyBoZWxwZXIgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKClgLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNlcGFyYXRpb24gb2YgY29uY2VybnMg4oCTIGF0dGFjaCB0eXBlIGNvbXBhdGliaWxpdHkgYW5kIHBlcm1pc3Npb25zIGFyZSBub3cgaGFuZGxlZCBkaXN0aW5jdGx5LlxuMi4gICoqTFNNIFN1cHBvcnQ6KiogIGBCUEZfUFJPR19UWVBFX0xTTWAgaXMgbm93IGV4cGxpY2l0bHkgc3VwcG9ydGVkIGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoKWAuXG4zLiAgKipMaW5rIFVwZGF0ZSBDaGVjazoqKiAgSW4gYGxpbmtfdXBkYXRlKClgLCB0aGVyZSdzIGEgbmV3IGNoZWNrIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoKWAgdG8gZW5zdXJlIHRoZSBhdHRhY2ggdHlwZSBvZiB0aGUgKm5ldyogcHJvZ3JhbSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGV4aXN0aW5nIGxpbmsncyB0eXBlLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGxpbmsgaW50ZWdyaXR5IGR1cmluZyB1cGRhdGVzLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGFuYWx5emUgZm9yIHRoaXMgc3BlY2lmaWNhbGx5IGZvciBLTVNBTi4gTXkgYW5hbHlzaXMgaXMgYXMgZm9sbG93czpcblxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgQWxsb2NhdGlvbi9Db3B5OioqICBJIHNlZSBubyBldmlkZW5jZSBvZiBhbGxvY2F0aW5nIG9yIGNvcHlpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBvbmx5IGFsdGVycyB0aGUgdmFsaWRhdGlvbiBhbmQgcGVybWlzc2lvbiBjaGVja3MuXG4qICAgKipObyBSZWFkcyBvZiBVbmluaXRpYWxpemVkIE1lbW9yeSBvciBTdHJ1Y3QgUGFkZGluZzoqKiBUaGUgY29kZSByZWFkcyBmcm9tIGNsZWFybHkgZGVmaW5lZCBmaWVsZHMgb2Ygc3RydWN0dXJlcyBsaWtlIGBwcm9nLVx1MDAzZXR5cGVgLCBgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZWAsIGBwcm9nLVx1MDAzZWF1eC1cdTAwM2V0b2tlbmAsIGFuZCBgYXR0ci1cdTAwM2UuLi5gIGFuZCBgbGluay1cdTAwM2VhdHRhY2hfdHlwZWAuIFRoZXJlIGFyZSBubyBhcHBhcmVudCByZWFkcyBmcm9tIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHBhZGRpbmcuXG4qICAgKipObyBCdWZmZXIgTGVuZ3RoIE1hbmlwdWxhdGlvbi9Db3B5IEJvdW5kIElzc3VlczoqKiAgVGhpcyBwYXRjaCBkb2VzIG5vdCBhcHBlYXIgdG8gaW52b2x2ZSBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbiBvciBhbnkgY29uY2VybnMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGNvcGllcy5cbiogICAqKk5vIEV4cG9zdXJlIG9mIFN0YWNrIG9yIEhlYXAgRGF0YToqKiBJIGRvbid0IHNlZSBhbnkgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGNvdWxkIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknZCBub3cgcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCwgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAgYW5kIGBsaW5rX3VwZGF0ZWAgYXMgd2VsbCBhcyBhbnkgc3Vycm91bmRpbmcgY29kZSB3aXRoIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBkb3VibGUtY2hlY2sgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBsb29raW5nIGZvciBhbnkgc3VidGxlIGdvdGNoYXMuIEJ1dCBteSBndXQgZmVlbGluZyBpcyB0aGUgcGF0Y2ggb25seSBpbnZvbHZlcyBzdHJ1Y3R1cmFsIGNoYW5nZXMgYW5kIGxvZ2ljIHJlZmFjdG9yaW5nLCB3aXRoIG5vIGV4cGxpY2l0IG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzLlxuXG5UaGVyZWZvcmUsIG15IHByZWxpbWluYXJ5IGFzc2Vzc21lbnQgaXMgdGhhdCAqKmBOZWVkc0tNU0FOID0gZmFsc2VgKiouIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhpcyB3aXRoIGEgYnJpZWYgY29kZSByZXZpZXcgZm9yIGFic29sdXRlIGNlcnRhaW50eSwgYnV0IEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIEtNU0FOLXJlbGV2YW50IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MzIuMTcwMzY0NTg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDc1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NDc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXFxuNDQ3NjpcXHR7XFxuNDQ3NzpcXHRcXHRlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGU7XFxuNDQ3ODpcXHRcXG40NDc5OlxcdFxcdHN3aXRjaCAocHJvZy1cXHUwMDNldHlwZSkge1xcbjQ0ODA6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLOlxcbjQ0ODE6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XFxuNDQ4MjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XFxuNDQ4MzpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxcbjQ0ODQ6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcXG40NDg1OlxcdFxcdFxcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMO1xcbjQ0ODY6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XFxuNDQ4NzpcXHRcXHRcXHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XFxuNDQ4ODpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBwdHlwZSlcXG40NDg5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0OTA6XFx0XFxuNDQ5MTpcXHRcXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNlZW5mb3JjZV9leHBlY3RlZF9hdHRhY2hfdHlwZSBcXHUwMDI2XFx1MDAyNlxcbjQ0OTI6XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR0YWNoX3R5cGUgP1xcbjQ0OTM6XFx0XFx0XFx0XFx0LUVJTlZBTCA6IDA7XFxuNDQ5NDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbjQ0OTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDQ5NjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTkVURklMVEVSOlxcbjQ0OTc6XFx0XFx0XFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9ORVRGSUxURVIpXFxuNDQ5ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NDk5OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1MDA6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQ6XFxuNDUwMTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVDpcXG40NTAyOlxcdFxcdFxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfUEVSRl9FVkVOVClcXG40NTAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDUwNTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfS1BST0JFOlxcbjQ1MDY6XFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkgXFx1MDAyNlxcdTAwMjZcXG40NTA3OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX01VTFRJKVxcbjQ1MDg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUwOTpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OIFxcdTAwMjZcXHUwMDI2XFxuNDUxMDpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OKVxcbjQ1MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUxMjpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSBcXHUwMDI2XFx1MDAyNlxcbjQ1MTM6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkpXFxuNDUxNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTE1OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04gXFx1MDAyNlxcdTAwMjZcXG40NTE2OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04pXFxuNDUxNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTE4OlxcdFxcdFxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfUEVSRl9FVkVOVCBcXHUwMDI2XFx1MDAyNlxcbjQ1MTk6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkgXFx1MDAyNlxcdTAwMjZcXG40NTIwOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX1NFU1NJT04gXFx1MDAyNlxcdTAwMjZcXG40NTIxOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX01VTFRJIFxcdTAwMjZcXHUwMDI2XFxuNDUyMjpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9TRVNTSU9OKVxcbjQ1MjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUyNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NTI1OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFM6XFxuNDUyNjpcXHRcXHRcXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9JTkdSRVNTIFxcdTAwMjZcXHUwMDI2XFxuNDUyNzpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9FR1JFU1MgXFx1MDAyNlxcdTAwMjZcXG40NTI4OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BSSU1BUlkgXFx1MDAyNlxcdTAwMjZcXG40NTI5OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BFRVIpXFxuNDUzMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTMxOlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1MzI6XFx0XFx0ZGVmYXVsdDpcXG40NTMzOlxcdFxcdFxcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcXG40NTM0OlxcdFxcdFxcdGlmIChwdHlwZSA9PSBCUEZfUFJPR19UWVBFX1VOU1BFQyB8fCBwdHlwZSAhPSBwcm9nLVxcdTAwM2V0eXBlKVxcbjQ1MzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUzNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NTM3OlxcdFxcdH1cXG40NTM4OlxcdH1cXG40NTM5OlxcdFxcbjQ1NDA6XFx0c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuNDU0MTpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG40NTQyOlxcdHtcXG40NTQzOlxcdFxcdC8qXFxuNDU0NDpcXHRcXHQgKiBDR1JPVVBfU0tCIHByb2dyYW1zIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2aWxlZ2VkIHVzZXJzLCBzbyBjaGVja1xcbjQ1NDU6XFx0XFx0ICogcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXFxuNDU0NjpcXHRcXHQgKi9cXG40NTQ3OlxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcXHUwMDI2XFx1MDAyNlxcbjQ1NDg6XFx0XFx0ICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcXG40NTQ5OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuNDU1MDpcXHRcXG40NTUxOlxcdFxcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xcbjQ1NTI6XFx0fVxcbjQ1NTM6XFx0XFxuNDU1NDpcXHRzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjMyLjE3MDc3OTMxNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODAyMzkwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBCUEYgTGluayBVcGRhdGUgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGEgYml0IGRlZXBlci4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcG90ZW50aWFsIGlzc3VlLCBJIHNob3VsZCBleHBhbmQgbXkgc2NvcGUuIExldCdzIG5vdCBqdXN0IGZvY3VzIG9uIHRoZSBvYnZpb3VzOyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgc3VidGxlIGhpZGluZyBpbiBwbGFpbiBzaWdodC4gSSdtIGdvaW5nIHRvIGhlYWQgb3ZlciB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYGxpbmtfdXBkYXRlKClgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBhcmVhIGZvciBhIG1pc2NhbGN1bGF0aW9uIHRvIGx1cmssIGdpdmVuIHRoYXQgaXQncyBkaXJlY3RseSBpbnZvbHZlZCBpbiwgd2VsbCwgKnVwZGF0aW5nKiBCUEYgbGlua3MuIFRpbWUgdG8gbWV0aWN1bG91c2x5IGRpc3NlY3QgdGhlIGNvZGUgYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhhdCBmdW5jdGlvbi4gSXQncyB0aW1lIHRvIHB1dCBvbiB0aGUgZGV0ZWN0aXZlIGhhdCBhbmQgdHJ5IHRvIGZpbmQgYSBjcmFjayBpbiB0aGUgYXJtb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjMzLjk3MzE3NDAxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41OTUxOlxcdFxcbjU5NTI6XFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmxpbmtfZmQpO1xcbjU5NTM6XFx0XFx0aWYgKElTX0VSUihsaW5rKSlcXG41OTU0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGxpbmspO1xcbjU5NTU6XFx0XFxuNTk1NjpcXHRcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfbWFwKSB7XFxuNTk1NzpcXHRcXHRcXHRyZXQgPSBsaW5rX3VwZGF0ZV9tYXAobGluaywgYXR0cik7XFxuNTk1ODpcXHRcXHRcXHRnb3RvIG91dF9wdXRfbGluaztcXG41OTU5OlxcdFxcdH1cXG41OTYwOlxcdFxcbjU5NjE6XFx0XFx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubmV3X3Byb2dfZmQpO1xcbjU5NjI6XFx0XFx0aWYgKElTX0VSUihuZXdfcHJvZykpIHtcXG41OTYzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIobmV3X3Byb2cpO1xcbjU5NjQ6XFx0XFx0XFx0Z290byBvdXRfcHV0X2xpbms7XFxuNTk2NTpcXHRcXHR9XFxuNTk2NjpcXHRcXG41OTY3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG41OTY4OlxcdFxcdFxcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcXG41OTY5OlxcdFxcdFxcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XFxuNTk3MDpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG9sZF9wcm9nKTtcXG41OTcxOlxcdFxcdFxcdFxcdG9sZF9wcm9nID0gTlVMTDtcXG41OTcyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG41OTczOlxcdFxcdFxcdH1cXG41OTc0OlxcdFxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcXG41OTc1OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuNTk3NjpcXHRcXHRcXHRnb3RvIG91dF9wdXRfcHJvZ3M7XFxuNTk3NzpcXHRcXHR9XFxuNTk3ODpcXHRcXG41OTc5OlxcdFxcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbjU5ODA6XFx0XFx0aWYgKHJldClcXG41OTgxOlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG41OTgyOlxcdFxcbjU5ODM6XFx0XFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cpXFxuNTk4NDpcXHRcXHRcXHRyZXQgPSBsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7XFxuNTk4NTpcXHRcXHRlbHNlXFxuNTk4NjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjU5ODc6XFx0XFxuNTk4ODpcXHRvdXRfcHV0X3Byb2dzOlxcbjU5ODk6XFx0XFx0aWYgKG9sZF9wcm9nKVxcbjU5OTA6XFx0XFx0XFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcXG41OTkxOlxcdFxcdGlmIChyZXQpXFxuNTk5MjpcXHRcXHRcXHRicGZfcHJvZ19wdXQobmV3X3Byb2cpO1xcbjU5OTM6XFx0b3V0X3B1dF9saW5rOlxcbjU5OTQ6XFx0XFx0YnBmX2xpbmtfcHV0X2RpcmVjdChsaW5rKTtcXG41OTk1OlxcdFxcdHJldHVybiByZXQ7XFxuNTk5NjpcXHR9XFxuNTk5NzpcXHRcXG41OTk4OlxcdCNkZWZpbmUgQlBGX0xJTktfREVUQUNIX0xBU1RfRklFTEQgbGlua19kZXRhY2gubGlua19mZFxcbjU5OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjMzLjk3MzU2NjUxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTk2NjM5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGNvbmNsdXNpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBleGlzdGluZyBCUEYgaW5mcmFzdHJ1Y3R1cmUsIGZvY3VzaW5nIG9uIHRoZSB2YWxpZGF0aW9uIGFuZCBhdXRob3JpemF0aW9uIGNoZWNrcyBmb3IgQlBGIHByb2dyYW0gYXR0YWNobWVudHMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbG9naWNhbCBjaGVja3Mgb24gdGhlIGBwcm9nYCBhbmQgYGxpbmtgIHN0cnVjdHVyZXMg4oCTIHNwZWNpZmljYWxseSBjYXBhYmlsaXR5IHJlcXVpcmVtZW50cyBhbmQgYXR0YWNoIHR5cGUgY29tcGF0aWJpbGl0eS5cblxuQ3J1Y2lhbGx5LCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgYnVmZmVycywgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGRhdGEgaXNzdWVzLCBubyBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGFic29sdXRlbHkgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcyB0aGF0IEkgY2FuIHNlZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGF0IGFzc2Vzc21lbnQsIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuTm93LCBsZXQgbWUgYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIEZpcnN0LCB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgcHJvZ3JhbSBhdHRhY2ggdmFsaWRhdGlvbiBsb2dpYy4gSXQgc2VwYXJhdGVzIG91dCB0aGUgY2FwYWJpbGl0eSBjaGVja3MgKGhhbmRsZWQgYnkgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCkgZnJvbSB0aGUgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiAoYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWApLiBJdCBhbHNvIGluY29ycG9yYXRlcyBzdXBwb3J0IGZvciBgQlBGX1BST0dfVFlQRV9MU01gIGluIHRoZSB0eXBlIGNoZWNrcyBhbmQgZW5zdXJlcyBuZXcgcHJvZ3JhbSBhdHRhY2ggdHlwZXMgYXJlIHByb3Blcmx5IHZhbGlkYXRlZCB3aXRoaW4gYGxpbmtfdXBkYXRlKClgLlxuXG5UaGUgcmVhc29uIEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIG9wZXJhdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXNuJ3QgY3JlYXRlIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIG1lbW9yeSBwcm9ibGVtcywgb3IgY3JlYXRlIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24tbGVhayB2ZWN0b3JzLiBUaGUgcGF0Y2gncyBmb2N1cyBpcyBvbiBjb250cm9sLWZsb3csIHBlcm1pc3Npb24gYW5kIHR5cGUgdmFsaWRhdGlvbiBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIEFueSBleGlzdGluZyBpc3N1ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lcyBzaG91bGQgYmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIHJlZmNvdW50aW5nIG1lY2hhbmlzbXMgYW5kIEtBU0FOLlxuXG5BbHJpZ2h0LCB0aGF0J3MgbXkgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjIsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MzcuOTcwMjA5Njk4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbW9kaWZ5IGNvbnRyb2wtZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYyB1c2luZyBhbHJlYWR5LWluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgKGJwZl9wcm9nIGFuZCBicGZfbGluaykuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgc2l6ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgdXBkYXRlIHZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQgc2VwYXJhdGVzIHBlcm1pc3Npb24gY2hlY2tzIGZvciBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgaW50byBhIGhlbHBlciBmdW5jdGlvbiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0pLCBhZGRzIGF0dGFjaC10eXBlIHZhbGlkYXRpb24gZm9yIEJQRl9QUk9HX1RZUEVfTFNNIHByb2dyYW1zLCBhbmQgZW5mb3JjZXMgYXR0YWNoLXR5cGUgY29tcGF0aWJpbGl0eSBjaGVja2luZyBvbiB0aGUgcmVwbGFjZW1lbnQgcHJvZ3JhbSBkdXJpbmcgYnBmX2xpbmsgdXBkYXRlIChsaW5rX3VwZGF0ZSkuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IG1vZGlmeSBjb250cm9sLWZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMgdXNpbmcgYWxyZWFkeS1pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIChicGZfcHJvZyBhbmQgYnBmX2xpbmspLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtdgn9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 06:05:15 +0000 UTC FinishedAt: 2026-09-07 06:29:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b0ca562e0d05cf7afedcfa71c9aed180b72bcc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "963fd7bb-85a3-477f-a50e-579902071249" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_attach", "link_create", "link_update", "bpf_prog_attach_check_attach_type", "bpf_prog_attach_check_perm" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtsaW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUmIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IG1vZGlmeSBjb250cm9sLWZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMgdXNpbmcgYWxyZWFkeS1pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIChicGZfcHJvZyBhbmQgYnBmX2xpbmspLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNGZkOWI2MTUwNzdmMjk0NzdjZWQ3NGMxNWYzZmJkNjE4NmVkMDM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjoyODoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi4yYmNkM2YzYTJhNTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNDQ4MSwxNCAmIzQzOzQ0ODEsOSBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUjpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbiBcdFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxuLVx0XHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbi1cdFx0XHQvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci5cbi1cdFx0XHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVxuIFx0XHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XG4gXHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gcHR5cGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNDU0Miw2ICYjNDM7NDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2tcbiYjNDM7XHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiBcdFx0XHRcdGJvb2wgY2hlY2tfYXR5cGUpXG4ge1xuQEAgLTQ2MDYsNyAmIzQzOzQ2MTUsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuJiM0MztcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCAmIzQzOzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csXG4tXHRcdFx0XHRcdFx0YXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC01OTY4LDYgJiM0Mzs1OTc2LDEwIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstXHUwMDNlYXR0YWNoX3R5cGUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4mIzQzO1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jXG5pbmRleCAxNTA5M2E2OTUxMGViLi4zYjQzYzM0OTE3Y2NjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NhcF9oZWxwZXJzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfaGVscGVycy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdGluZ19oZWxwZXJzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X2Nncm91cF9saW5rLnNrZWwuaFwmIzM0O1xuQEAgLTI0LDcgJiM0MzsyNSw3NyBAQCBpbnQgcGluZ19hbmRfY2hlY2soaW50IGV4cF9jYWxscywgaW50IGV4cF9hbHRfY2FsbHMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgX191NjQgY2FwcyA9ICgxVUxMIFx1MDAzY1x1MDAzYyBDQVBfTkVUX0FETUlOKSB8ICgxVUxMIFx1MDAzY1x1MDAzYyBDQVBfU1lTX0FETUlOKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuJiM0MztcdF9fdTY0IHNhdmVkX2NhcHMgPSAwO1xuJiM0MztcdGludCBjZ19mZCA9IC0xLCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2Nncm91cF9saW5rX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtjZ19pbml0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Y2dfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoXCYjMzQ7L2Nncm91cF9saW5rX3VwZGF0ZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoY2dfZmQsIDAsIFwmIzM0O2NnX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGpvaW5fY2dyb3VwKFwmIzM0Oy9jZ3JvdXBfbGlua191cGRhdGVcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Y2dfam9pblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLVx1MDAzZXByb2dzLnNlbmRtc2c0LCBjZ19mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwmIzM0O2F0dGFjaF9zZW5kbXNnNFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX191cGRhdGVfcHJvZ3JhbShsaW5rLCBza2VsLVx1MDAzZXByb2dzLnNlbmRtc2c2KTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcJiMzNDtyZWplY3Rfc2VuZG1zZzZfdXBkYXRlXCYjMzQ7KTtcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRsaW5rID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gY2FwX2Rpc2FibGVfZWZmZWN0aXZlKGNhcHMsIFx1MDAyNnNhdmVkX2NhcHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZHJvcF9jYXBzX2Zvcl9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIFwmIzM0O2F0dGFjaF93aXRob3V0X25ldF9hZG1pblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihsaW5rKTtcbiYjNDM7XHRsaW5rID0gTlVMTDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FUEVSTSwgXCYjMzQ7YXR0YWNoX2VyclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cmVzdG9yZV9jYXBzX2Zvcl9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7YXR0YWNoX2VncmVzc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCBcdTAwMjZzYXZlZF9jYXBzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Ryb3BfY2Fwc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX191cGRhdGVfcHJvZ3JhbShsaW5rLCBza2VsLVx1MDAzZXByb2dzLmVncmVzc19hbHQpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3VwZGF0ZV93aXRob3V0X25ldF9hZG1pblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3Jlc3RvcmVfY2Fwc1wmIzM0Oyk7XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0aWYgKGNnX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNnX2ZkKTtcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0MztcdHRlc3RfY2dyb3VwX2xpbmtfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0c2tlbCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKHZvaWQpXG4ge1xuIFx0c3RydWN0IHtcbiBcdFx0Y29uc3QgY2hhciAqcGF0aDtcbkBAIC0yNTMsMyAmIzQzOzMyNCwxMSBAQCB2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4gXHR9XG4gXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuIH1cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VwZGF0ZVwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG5pbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbkBAIC03NCw2ICYjNDM7NzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKVxuIFx0aW50IGJpbmRfcHJvZ19mZCA9IC0xO1xuIFx0aW50IGJpbmRfbGlua19mZCA9IC0xO1xuIFx0aW50IGNsb25lX3Byb2dfZmQgPSAtMTtcbiYjNDM7XHRpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTtcbiBcdGludCBlcnIsIGZkLCBwcmlvO1xuIFx0c29ja2xlbl90IHNvY2tsZW47XG4gXG5AQCAtMTU2LDYgJiM0MzsxNTcsMTcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZClcbiBcdEFTU0VSVF9FUShxdWVyeV9wcm9nX2NudChjZ3JvdXBfZmQsIFwmIzM0O2JwZl9sc21fc29ja2V0X2JpbmRcJiMzNDspLCAxLCBcJiMzNDtwcm9nIGNvdW50XCYjMzQ7KTtcbiBcdEFTU0VSVF9FUShxdWVyeV9wcm9nX2NudChjZ3JvdXBfZmQsIE5VTEwpLCA0LCBcJiMzNDt0b3RhbCBwcm9nIGNvdW50XCYjMzQ7KTtcbiBcbiYjNDM7XHRzb2NrZXRfbGlua19mZCA9XG4mIzQzO1x0XHRicGZfbGlua19jcmVhdGUoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc29ja2V0X2ZpcnN0KSxcbiYjNDM7XHRcdFx0XHRjZ3JvdXBfZmQsIEJQRl9MU01fQ0dST1VQLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzb2NrZXRfbGlua19mZCwgMCwgXCYjMzQ7bGluayBjcmVhdGUgc29ja2V0X2ZpcnN0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZGV0YWNoX2Nncm91cDtcbiYjNDM7XHRlcnIgPSBicGZfbGlua191cGRhdGUoc29ja2V0X2xpbmtfZmQsXG4mIzQzO1x0XHRcdCAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnNvY2tldF9jcmVhdGVfbHNtKSxcbiYjNDM7XHRcdFx0ICAgICAgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCYjMzQ7cmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGVcJiMzNDspO1xuJiM0MztcdGNsb3NlKHNvY2tldF9saW5rX2ZkKTtcbiYjNDM7XG4gXHQvKiBBdHRhY2ggYW5vdGhlciBpbnN0YW5jZSBvZiBiaW5kIHByb2dyYW0gdG8gYW5vdGhlciBjZ3JvdXAuXG4gXHQgKiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSByZXVzZSBvZiB0aGUgdHJhbXBvbGluZSBzaGltICh0d29cbiBcdCAqIHByb2dyYW1zIGF0dGFjaGluZyB0byB0aGUgc2FtZSBidGZfaWQpLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG5pbmRleCAzYmZhNDc5MTA0YmU4Li4zMDcyNzk0NWNlY2MzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuQEAgLTIxMyw2ICYjNDM7MjEzLDEyIEBAIGludCBCUEZfUFJPRyhzb2NrZXRfZmlyc3QsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7bHNtL3NvY2tldF9jcmVhdGVcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhzb2NrZXRfY3JlYXRlX2xzbSwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7bHNtX2Nncm91cC9zb2NrZXRfY3JlYXRlXCYjMzQ7KVxuIGludCBCUEZfUFJPRyhzb2NrZXRfc2Vjb25kLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybilcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmNcbmluZGV4IDRmYWJhODhlNDVhNWEuLjEwNzQyOTYzOGY1NDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG5AQCAtMjAsNSAmIzQzOzIwLDE2IEBAIGludCBlZ3Jlc3NfYWx0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1jaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztTRUMoXCYjMzQ7Y2dyb3VwL3NlbmRtc2c0XCYjMzQ7KVxuJiM0MztpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4gXG4mIzQzO1NFQyhcJiMzNDtjZ3JvdXAvc2VuZG1zZzZcJiMzNDspXG4mIzQzO2ludCBzZW5kbXNnNihzdHJ1Y3QgYnBmX3NvY2tfYWRkciAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGZkOWI2MTUwNzdmMjk0NzdjZWQ3NGMxNWYzZmJkNjE4NmVkMDM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNjoyODoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggNjg3NGJhMTQyNGFmMC4uMmJjZDNmM2EyYTU1OSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmMKQEAgLTQ0ODEsMTQgJiM0Mzs0NDgxLDkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCWNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOgogCWNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDoKIAljYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOgomIzQzOwljYXNlIEJQRl9QUk9HX1RZUEVfTFNNOgogCQlyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDsKIAljYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjoKLQkJaWYgKCFicGZfdG9rZW5fY2FwYWJsZShwcm9nLSZndDthdXgtJmd0O3Rva2VuLCBDQVBfTkVUX0FETUlOKSkKLQkJCS8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLgotCQkJICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuCi0JCQkgKi8KLQkJCXJldHVybiAtRVBFUk07Ci0KIAkJcHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpOwogCQlpZiAocHJvZy0mZ3Q7dHlwZSAhPSBwdHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDU0Miw2ICYjNDM7NDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJfQogfQogCiYjNDM7c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2sKJiM0MzsJICogcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgJmFtcDsmYW1wOwomIzQzOwkgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctJmd0O2F1eC0mZ3Q7dG9rZW4sIENBUF9ORVRfQURNSU4pKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLAogCQkJCWJvb2wgY2hlY2tfYXR5cGUpCiB7CkBAIC00NjA2LDcgJiM0Mzs0NjE1LDcgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJaWYgKElTX0VSUihwcm9nKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJvZyk7CiAKLQlpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dHItJmd0O2F0dGFjaF90eXBlKSkgewomIzQzOwlpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci0mZ3Q7YXR0YWNoX3R5cGUpKSB7CiAJCWJwZl9wcm9nX3B1dChwcm9nKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTgwNSw4ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csCi0JCQkJCQlhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItJmd0O2xpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtNTk2OCw2ICYjNDM7NTk3NiwxMCBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCQlnb3RvIG91dF9wdXRfcHJvZ3M7CiAJfQogCiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay0mZ3Q7YXR0YWNoX3R5cGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0X3Byb2dzOwomIzQzOwogCWlmIChsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKQogCQlyZXQgPSBsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMKaW5kZXggMTUwOTNhNjk1MTBlYi4uM2I0M2MzNDkxN2NjYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jCkBAIC0xLDYgJiM0MzsxLDcgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtjYXBfaGVscGVycy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Y2dyb3VwX2hlbHBlcnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3RpbmdfaGVscGVycy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9jZ3JvdXBfbGluay5za2VsLmgmIzM0OwpAQCAtMjQsNyAmIzQzOzI1LDc3IEBAIGludCBwaW5nX2FuZF9jaGVjayhpbnQgZXhwX2NhbGxzLCBpbnQgZXhwX2FsdF9jYWxscykKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfdXBkYXRlKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBfX3U2NCBjYXBzID0gKDFVTEwgJmx0OyZsdDsgQ0FQX05FVF9BRE1JTikgfCAoMVVMTCAmbHQ7Jmx0OyBDQVBfU1lTX0FETUlOKTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJX191NjQgc2F2ZWRfY2FwcyA9IDA7CiYjNDM7CWludCBjZ19mZCA9IC0xLCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2Nncm91cF9saW5rX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NnX2luaXQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWNnX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKCYjMzQ7L2Nncm91cF9saW5rX3VwZGF0ZSYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2dfZmQsIDAsICYjMzQ7Y2dfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBqb2luX2Nncm91cCgmIzM0Oy9jZ3JvdXBfbGlua191cGRhdGUmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjZ19qb2luJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3Muc2VuZG1zZzQsIGNnX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssICYjMzQ7YXR0YWNoX3NlbmRtc2c0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC0mZ3Q7cHJvZ3Muc2VuZG1zZzYpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCAmIzM0O3JlamVjdF9zZW5kbXNnNl91cGRhdGUmIzM0Oyk7CiYjNDM7CWJwZl9saW5rX19kZXN0cm95KGxpbmspOwomIzQzOwlsaW5rID0gTlVMTDsKJiM0MzsKJiM0MzsJZXJyID0gY2FwX2Rpc2FibGVfZWZmZWN0aXZlKGNhcHMsICZhbXA7c2F2ZWRfY2Fwcyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtkcm9wX2NhcHNfZm9yX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLmVncmVzcywgY2dfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssICYjMzQ7YXR0YWNoX3dpdGhvdXRfbmV0X2FkbWluJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwllcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspOwomIzQzOwlsaW5rID0gTlVMTDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoZXJyLCAtRVBFUk0sICYjMzQ7YXR0YWNoX2VyciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gY2FwX2VuYWJsZV9lZmZlY3RpdmUoc2F2ZWRfY2FwcyAmYW1wOyBjYXBzLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Jlc3RvcmVfY2Fwc19mb3JfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3MuZWdyZXNzLCBjZ19mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9lZ3Jlc3MmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCAmYW1wO3NhdmVkX2NhcHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7ZHJvcF9jYXBzJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC0mZ3Q7cHJvZ3MuZWdyZXNzX2FsdCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7dXBkYXRlX3dpdGhvdXRfbmV0X2FkbWluJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgJmFtcDsgY2FwcywgTlVMTCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7cmVzdG9yZV9jYXBzJiMzNDspOwomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKGNnX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ19mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7CXRlc3RfY2dyb3VwX2xpbmtfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXNrZWwgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCh2b2lkKQogewogCXN0cnVjdCB7CiAJCWNvbnN0IGNoYXIgKnBhdGg7CkBAIC0yNTMsMyAmIzQzOzMyNCwxMSBAQCB2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpCiAJfQogCWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiB9CiYjNDM7CiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQl0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCgpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VwZGF0ZSYjMzQ7KSkKJiM0MzsJCXRlc3RfY2dyb3VwX2xpbmtfdXBkYXRlKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jCmluZGV4IDQxZTg2NzQ2N2Y2YzYuLjBkZDQ0ZGJiOWM5NWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMKQEAgLTc0LDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpCiAJaW50IGJpbmRfcHJvZ19mZCA9IC0xOwogCWludCBiaW5kX2xpbmtfZmQgPSAtMTsKIAlpbnQgY2xvbmVfcHJvZ19mZCA9IC0xOwomIzQzOwlpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTsKIAlpbnQgZXJyLCBmZCwgcHJpbzsKIAlzb2NrbGVuX3Qgc29ja2xlbjsKIApAQCAtMTU2LDYgJiM0MzsxNTcsMTcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZCkKIAlBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCAmIzM0O2JwZl9sc21fc29ja2V0X2JpbmQmIzM0OyksIDEsICYjMzQ7cHJvZyBjb3VudCYjMzQ7KTsKIAlBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBOVUxMKSwgNCwgJiMzNDt0b3RhbCBwcm9nIGNvdW50JiMzNDspOwogCiYjNDM7CXNvY2tldF9saW5rX2ZkID0KJiM0MzsJCWJwZl9saW5rX2NyZWF0ZShicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Muc29ja2V0X2ZpcnN0KSwKJiM0MzsJCQkJY2dyb3VwX2ZkLCBCUEZfTFNNX0NHUk9VUCwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNvY2tldF9saW5rX2ZkLCAwLCAmIzM0O2xpbmsgY3JlYXRlIHNvY2tldF9maXJzdCYjMzQ7KSkKJiM0MzsJCWdvdG8gZGV0YWNoX2Nncm91cDsKJiM0MzsJZXJyID0gYnBmX2xpbmtfdXBkYXRlKHNvY2tldF9saW5rX2ZkLAomIzQzOwkJCSAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5zb2NrZXRfY3JlYXRlX2xzbSksCiYjNDM7CQkJICAgICAgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FSU5WQUwsICYjMzQ7cmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGUmIzM0Oyk7CiYjNDM7CWNsb3NlKHNvY2tldF9saW5rX2ZkKTsKJiM0MzsKIAkvKiBBdHRhY2ggYW5vdGhlciBpbnN0YW5jZSBvZiBiaW5kIHByb2dyYW0gdG8gYW5vdGhlciBjZ3JvdXAuCiAJICogVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgcmV1c2Ugb2YgdGhlIHRyYW1wb2xpbmUgc2hpbSAodHdvCiAJICogcHJvZ3JhbXMgYXR0YWNoaW5nIHRvIHRoZSBzYW1lIGJ0Zl9pZCkuCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYwppbmRleCAzYmZhNDc5MTA0YmU4Li4zMDcyNzk0NWNlY2MzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMKQEAgLTIxMyw2ICYjNDM7MjEzLDEyIEBAIGludCBCUEZfUFJPRyhzb2NrZXRfZmlyc3QsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7bHNtL3NvY2tldF9jcmVhdGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0coc29ja2V0X2NyZWF0ZV9sc20sIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7bHNtX2Nncm91cC9zb2NrZXRfY3JlYXRlJiMzNDspCiBpbnQgQlBGX1BST0coc29ja2V0X3NlY29uZCwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pCiB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYwppbmRleCA0ZmFiYTg4ZTQ1YTVhLi4xMDc0Mjk2MzhmNTQzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMKQEAgLTIwLDUgJiM0MzsyMCwxNiBAQCBpbnQgZWdyZXNzX2FsdChzdHJ1Y3QgX19za19idWZmICpza2IpCiAJcmV0dXJuIDE7CiB9CiAKLWNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MztTRUMoJiMzNDtjZ3JvdXAvc2VuZG1zZzQmIzM0OykKJiM0MztpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAxOwomIzQzO30KIAomIzQzO1NFQygmIzM0O2Nncm91cC9zZW5kbXNnNiYjMzQ7KQomIzQzO2ludCBzZW5kbXNnNihzdHJ1Y3QgYnBmX3NvY2tfYWRkciAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBhbmQgRGV0ZXJtaW5pbmcgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5IGxpdmVzLiBJIHNlZSB0aGV5JiMzOTt2ZSBtYWRlIHNvbWUgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGF0dGFjaG1lbnQgYW5kIHBlcm1pc3Npb25zIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV54oCZdmUgaW50cm9kdWNlZCBhIG5ldyBjYXNlIGZvciBgQlBGX1BST0dfVFlQRV9MU01gIHdpdGhpbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgd2hpY2ggbm93IGV4cGxpY2l0bHkgdmVyaWZpZXMgdGhlIGV4cGVjdGVkIGF0dGFjaG1lbnQgdHlwZS4gVGhhdCYjMzk7cyBnb29kLCBncmFudWxhciBjb250cm9sLiBUaGUgcmVtb3ZhbCBvZiB0aGUgY2FwYWJpbGl0eSBjaGVjayBmcm9tIHRoZSBgQ0dST1VQX1NLQmAgdHlwZSBpbiB0aGUgc2FtZSBmdW5jdGlvbiBjYXVnaHQgbXkgZXllIOKAkyB0aGUgaW50cm9kdWN0aW9uIG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAgaXMgdGhlIHJlcGxhY2VtZW50LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LgoKRGlnZ2luZyBpbnRvIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAsIGl0IGNsZWFybHkgaGFuZGxlcyB0aGUgcGVybWlzc2lvbnMgZm9yIGBDR1JPVVBfU0tCYCB0eXBlcyBieSBjaGVja2luZyBmb3IgdGhlIGBDQVBfTkVUX0FETUlOYCBjYXBhYmlsaXR5LiBJdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyB0byBzZXBhcmF0ZSBwZXJtaXNzaW9uIGxvZ2ljIGZyb20gdHlwZSB2ZXJpZmljYXRpb24sIGJ1dCBpdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYXR0YWNobWVudCBsb2dpYyBhbmQgcmVxdWlyZXMgZGVlcGVyIHNjcnV0aW55LiBUaGUgZmFjdCB0aGF0IGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgIG5vdyB1c2UgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBoaWdobGlnaHRzIHRoaXMuIFRoZSBhZGRpdGlvbiBvZiB0aGUgbmV3IGNoZWNrIGluIGBsaW5rX3VwZGF0ZWAgaXMgaW1wb3J0YW50LCB0b28uCgpUaGUgcHJlc2VuY2Ugb2Ygc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYCBmb3IgY2dyb3VwIGxpbmsgdXBkYXRlcyBhbmQgTFNNIGNncm91cCBsaW5rIHVwZGF0ZXMgaXMgaGVscGZ1bCwgYXMgdGhlc2UgdGVzdHMgc2hvdWxkIHByb3ZpZGUgc29tZSBiYXNpYyBjb3ZlcmFnZS4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBYnNvbHV0ZWx5ISBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBjb250YWlucyB0aGUgYGJwZigyKWAgc3lzY2FsbCBoYW5kbGVycyDigJMgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGBsaW5rX3VwZGF0ZWAsIGFuZCB0aGUgYWxsLWltcG9ydGFudCBjaGVjayBmdW5jdGlvbnMuIEdpdmVuIHRoZSBCUEYgc3lzY2FsbCBpcyBmdW5kYW1lbnRhbCwgdGhpcyBpcyByZWFkaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBCUEYgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfQVRUQUNIYCwgYEJQRl9MSU5LX0NSRUFURWAsIGFuZCBgQlBGX0xJTktfVVBEQVRFYC4KCk5leHQsIGlzIHRoaXMgcGF0Y2ggJiMzNDtXb3J0aEZ1enppbmcmIzM0Oz8gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY3JpdGVyaWEgZm9yIHdvcnRoaW5lc3MsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gQWNjb3JkaW5nIHRvIHRoZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgY3JpdGVyaWEsIGFueSBjaGFuZ2VzIHRvIHRoZSBCUEYgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGFyb3VuZCBzeXNjYWxsIGhhbmRsaW5nIGFuZCBwZXJtaXNzaW9uIGNoZWNrcywgd2FycmFudCB0aG9yb3VnaCBmdXp6aW5nLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGVybWlzc2lvbiBjaGVjayBsb2dpYyBmb3IgbGluayBjcmVhdGlvbiwgbGluayB1cGRhdGluZywgYW5kIGF0dGFjaG1lbnQsIGFuZCBhZGRzIG5ldyB0eXBlIHZlcmlmaWNhdGlvbiBpbiBgbGlua191cGRhdGVgLCBhcyB3ZWxsIGFzIGNoZWNrcyBmb3IgTFNNIHByb2dyYW0gYXR0YWNoIHR5cGUuIFRoZXNlIG1vZGlmaWNhdGlvbnMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgd2hpY2ggaXMgZGlyZWN0bHkgZXhwb3NlZCB2aWEgdGhlIEJQRiBzeXNjYWxsIGludGVyZmFjZSwgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gaWRlbnRpZnkgYW55IHJlbGV2YW50IENPTkZJRyByZXF1aXJlbWVudHMgZm9yIHRoZSBjb2RlLCB0byBlbnN1cmUgZnV6emluZyBpcyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIENPTkZJR3MgcmVxdWlyZWQgZm9yIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX1RZUEVfTFNNYCBhbmQgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIHByb2Nlc3MgaXMgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX0tFWVMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGtleXMub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zNj1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOC1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDItZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQ2PWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFzay5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ5LSMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcnlwdG8ub1xua2VybmVsL2JwZi9NYWtlZmlsZS02My1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT02ND1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xua2VybmVsL2JwZi9NYWtlZmlsZS02NS1cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfcmVsb2NhdGUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBrbWVtX2NhY2hlX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS03MC1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZG1hYnVmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS03Mi1lbmRpZlxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTQzLVxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTE0NS1cdGJwZl9wcm9nX3N0cmVhbV9pbml0KGZwKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDczPUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjQ3Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI0Nzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3OC1pbnQgYnBmX3BhdGNoX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiBzdGFja19kZXB0aClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDQxPXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxua2VybmVsL2JwZi9jb3JlLmMtMzA0Mi17XG5rZXJuZWwvYnBmL2NvcmUuYzozMDQzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwNDQtXHRzdHJ1Y3QgYnRmX21vZF9wYWlyICpidGZfbW9kO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMwNjI9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzA2Ny1cdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcbmtlcm5lbC9icGYvY29yZS5jOjMwNjg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzA2OS1cdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVx1MDAzZWtmdW5jX2J0Zl90YWIpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMzOTQ9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxua2VybmVsL2JwZi9jb3JlLmMtMzM5NS17XG5rZXJuZWwvYnBmL2NvcmUuYzozMzk2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMzOTctXHRzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSBzcztcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDM0PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTM0MzgtXG5rZXJuZWwvYnBmL2NvcmUuYzozNDM5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0NDAtX193ZWFrIGJvb2wgYnBmX2FyZW5hX2hhbmRsZV9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpc193cml0ZSxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDY1PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xua2VybmVsL2JwZi9jb3JlLmMtMzQ2Ni1cbmtlcm5lbC9icGYvY29yZS5jOjM0Njc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMzQ2OC1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjEtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MjI6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMy1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzY5PXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODA3Olx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIEJQRiBTeXNjYWxsIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQlBGIHN5c2NhbGwgaW1wbGVtZW50YXRpb24gYmV0dGVyLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhIGNvdXBsZSBvZiBzcGVjaWZpYyBzZWN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBGaXJzdCwgSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyBsaW5lcyA0NDgwIHRocm91Z2ggNDYyMC4gVGhpcyBjaHVuayBwcm9iYWJseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBzeXNjYWxsIGhhbmRsaW5nLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIG9yIHBlcmhhcHMgYSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSBvciB2YWxpZGF0aW9uIHN0YWdlLiBUaGVuLCBJIHdpbGwgbW92ZSBvbiBhbmQgc2NydXRpbml6ZSBsaW5lcyA1ODAwLTYwMDAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSBoYW5kbGluZyBhIGRpZmZlcmVudCBmdW5jdGlvbiBvciBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtIG9yIGEgY3JpdGljYWwgbG9vcC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgYmVmb3JlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgZmxvd3MgYW5kIGFueSBlcnJvciBoYW5kbGluZyBpbiB0aGVzZSBwYXJ0cyBvZiB0aGUgY29kZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDc1Olx0XHRcdFx0XHRcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG40NDc2Olx0e1xuNDQ3NzpcdFx0ZW51bSBicGZfcHJvZ190eXBlIHB0eXBlO1xuNDQ3ODpcdFxuNDQ3OTpcdFx0c3dpdGNoIChwcm9nLVx1MDAzZXR5cGUpIHtcbjQ0ODA6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSzpcbjQ0ODE6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxuNDQ4MjpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxuNDQ4MzpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcbjQ0ODQ6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG40NDg1Olx0XHRcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XG40NDg2Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbjQ0ODc6XHRcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuNDQ4ODpcdFx0XHRpZiAocHJvZy1cdTAwM2V0eXBlICE9IHB0eXBlKVxuNDQ4OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ5MDpcdFxuNDQ5MTpcdFx0XHRyZXR1cm4gcHJvZy1cdTAwM2VlbmZvcmNlX2V4cGVjdGVkX2F0dGFjaF90eXBlIFx1MDAyNlx1MDAyNlxuNDQ5MjpcdFx0XHRcdHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR0YWNoX3R5cGUgP1xuNDQ5MzpcdFx0XHRcdC1FSU5WQUwgOiAwO1xuNDQ5NDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0VYVDpcbjQ0OTU6XHRcdFx0cmV0dXJuIDA7XG40NDk2Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfTkVURklMVEVSOlxuNDQ5NzpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX05FVEZJTFRFUilcbjQ0OTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ0OTk6XHRcdFx0cmV0dXJuIDA7XG40NTAwOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcbjQ1MDE6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxuNDUwMjpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1BFUkZfRVZFTlQpXG40NTAzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTA0Olx0XHRcdHJldHVybiAwO1xuNDUwNTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0tQUk9CRTpcbjQ1MDY6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MDc6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkpXG40NTA4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTA5Olx0XHRcdGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTiBcdTAwMjZcdTAwMjZcbjQ1MTA6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTilcbjQ1MTE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MTI6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MTM6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkpXG40NTE0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTE1Olx0XHRcdGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTiBcdTAwMjZcdTAwMjZcbjQ1MTY6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTilcbjQ1MTc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MTg6XHRcdFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9QRVJGX0VWRU5UIFx1MDAyNlx1MDAyNlxuNDUxOTpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MjA6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTiBcdTAwMjZcdTAwMjZcbjQ1MjE6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkgXHUwMDI2XHUwMDI2XG40NTIyOlx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04pXG40NTIzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTI0Olx0XHRcdHJldHVybiAwO1xuNDUyNTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcbjQ1MjY6XHRcdFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9UQ1hfSU5HUkVTUyBcdTAwMjZcdTAwMjZcbjQ1Mjc6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UQ1hfRUdSRVNTIFx1MDAyNlx1MDAyNlxuNDUyODpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX05FVEtJVF9QUklNQVJZIFx1MDAyNlx1MDAyNlxuNDUyOTpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX05FVEtJVF9QRUVSKVxuNDUzMDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUzMTpcdFx0XHRyZXR1cm4gMDtcbjQ1MzI6XHRcdGRlZmF1bHQ6XG40NTMzOlx0XHRcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcbjQ1MzQ6XHRcdFx0aWYgKHB0eXBlID09IEJQRl9QUk9HX1RZUEVfVU5TUEVDIHx8IHB0eXBlICE9IHByb2ctXHUwMDNldHlwZSlcbjQ1MzU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MzY6XHRcdFx0cmV0dXJuIDA7XG40NTM3Olx0XHR9XG40NTM4Olx0fVxuNDUzOTpcdFxuNDU0MDpcdHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuNDU0MTpcdFx0XHRcdFx0ICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG40NTQyOlx0e1xuNDU0MzpcdFx0LypcbjQ1NDQ6XHRcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXG40NTQ1Olx0XHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbjQ1NDY6XHRcdCAqL1xuNDU0NzpcdFx0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG40NTQ4Olx0XHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbjQ1NDk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjQ1NTA6XHRcbjQ1NTE6XHRcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuNDU1MjpcdH1cbjQ1NTM6XHRcbjQ1NTQ6XHRzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoaXMgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyBga2VybmVsL2JwZi9zeXNjYWxsLmNgIC0gTGluZXMgNTgwMC02MDAwKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU4MDAgdG8gNjAwMC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkIG9yIGNhbGxlZCBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGUgbGluZSByYW5nZSwgaXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgYSBzcGVjaWZpYyBCUEYgc3lzdGVtIGNhbGwgb3IgYSBzZWdtZW50IG9mIGEgbGFyZ2VyIHN5c3RlbSBjYWxsJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLgoKTXkgZmlyc3QgZ3Vlc3MgaXMgdGhhdCB3ZSBhcmUgaW4gdGhlIGNvbnRleHQgb2YgYW4gYWN0dWFsIEJQRiBwcm9ncmFtLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Npbmcgb2Ygc29tZSBCUEYgc3lzdGVtIGNhbGwuIEkmIzM5O20gbWVudGFsbHkgY2hlY2tpbmcgd2hhdCBjYWxscyBhcmUgaW4gdGhlIHN5c3RlbSBjYWxscyBsaWtlIGBicGZfcHJvZ19sb2FkYCBvciBgYnBmX3Byb2dfYXR0YWNoYC4gSXMgaXQgdmFsaWRhdGlvbj8gU2VjdXJpdHkgY2hlY2tzPyBSZXNvdXJjZSBhY2NvdW50aW5nPyBPciBtYXliZSBpdCBpcyBzb21lIHNvcnQgb2YgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgZXZlbiBiZSByZWxhdGVkIHRvIHRoZSB0cmFjaW5nIEFQSSwgZ2l2ZW4gd2hlcmUgd2UgYXJlLgoKSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBgc3lzY2FsbC5jYC4gV2hlcmUgaW4gdGhlIGZsb3cgZG9lcyB0aGlzIGZhbGw/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG9zc2libHkgc2VlaW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQlBGIHZlcmlmaWVyIG9yIHRoZSBKSVQgY29tcGlsZXIsIGRlcGVuZGluZyBvbiB0aGUgbmF0dXJlIG9mIHRoZSBzcGVjaWZpYyBCUEYgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZC4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyDigJMgdGhvc2UgYXJlIGFsd2F5cyBhIGNvbmNlcm4gaW4gdGhpcyBhcmVhLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGhvb2sgcG9pbnQgb3IgYSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbiBoYXBwZW5pbmcgaGVyZSB0aGF0IGlzIHdvcnRoIG5vdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTgwNTpcdFx0aW50IHJldDtcbjU4MDY6XHRcbjU4MDc6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9MSU5LX0NSRUFURSkpXG41ODA4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTgwOTpcdFxuNTgxMDpcdFx0aWYgKGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgPT0gQlBGX1NUUlVDVF9PUFMpXG41ODExOlx0XHRcdHJldHVybiBicGZfc3RydWN0X29wc19saW5rX2NyZWF0ZShhdHRyKTtcbjU4MTI6XHRcbjU4MTM6XHRcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5wcm9nX2ZkKTtcbjU4MTQ6XHRcdGlmIChJU19FUlIocHJvZykpXG41ODE1Olx0XHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuNTgxNjpcdFxuNTgxNzpcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG41ODE4Olx0XHRpZiAocmV0KVxuNTgxOTpcdFx0XHRnb3RvIG91dDtcbjU4MjA6XHRcbjU4MjE6XHRcdHN3aXRjaCAocHJvZy1cdTAwM2V0eXBlKSB7XG41ODIyOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbjU4MjM6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSzpcbjU4MjQ6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxuNTgyNTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTOlxuNTgyNjpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9ERVZJQ0U6XG41ODI3Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NZU0NUTDpcbjU4Mjg6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcbjU4Mjk6XHRcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbjU4MzA6XHRcdFx0YnJlYWs7XG41ODMxOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxuNTgzMjpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxuNTgzMzpcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcbjU4MzQ6XHRcdFx0XHRcdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfYnRmX2lkLFxuNTgzNTpcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmcuY29va2llLFxuNTgzNjpcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbjU4Mzc6XHRcdFx0YnJlYWs7XG41ODM4Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxuNTgzOTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1RSQUNJTkc6XG41ODQwOlx0XHRcdGlmIChhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlICE9IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpIHtcbjU4NDE6XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuNTg0MjpcdFx0XHRcdGdvdG8gb3V0O1xuNTg0MzpcdFx0XHR9XG41ODQ0Olx0XHRcdGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9SQVdfVFApXG41ODQ1Olx0XHRcdFx0cmV0ID0gYnBmX3Jhd190cF9saW5rX2F0dGFjaChwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmcuY29va2llLFxuNTg0NjpcdFx0XHRcdFx0XHRcdCAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG41ODQ3Olx0XHRcdGVsc2UgaWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0lURVIpXG41ODQ4Olx0XHRcdFx0cmV0ID0gYnBmX2l0ZXJfbGlua19hdHRhY2goYXR0ciwgdWF0dHIsIHByb2cpO1xuNTg0OTpcdFx0XHRlbHNlIGlmIChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxuNTg1MDpcdFx0XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG41ODUxOlx0XHRcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXG41ODUyOlx0XHRcdFx0cmV0ID0gYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHByb2csIGF0dHIpO1xuNTg1MzpcdFx0XHRlbHNlXG41ODU0Olx0XHRcdFx0cmV0ID0gYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gocHJvZyxcbjU4NTU6XHRcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcbjU4NTY6XHRcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9idGZfaWQsXG41ODU3Olx0XHRcdFx0XHRcdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nLmNvb2tpZSxcbjU4NTg6XHRcdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbjU4NTk6XHRcdFx0YnJlYWs7XG41ODYwOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1I6XG41ODYxOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuNTg2MjpcdFx0XHRyZXQgPSBuZXRuc19icGZfbGlua19jcmVhdGUoYXR0ciwgcHJvZyk7XG41ODYzOlx0XHRcdGJyZWFrO1xuNTg2NDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX01TRzpcbjU4NjU6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19TS0I6XG41ODY2Olx0XHRcdHJldCA9IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGF0dHIsIHByb2cpO1xuNTg2NzpcdFx0XHRicmVhaztcbjU4Njg6XHQjaWZkZWYgQ09ORklHX05FVFxuNTg2OTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1hEUDpcbjU4NzA6XHRcdFx0cmV0ID0gYnBmX3hkcF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbjU4NzE6XHRcdFx0YnJlYWs7XG41ODcyOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxuNTg3MzpcdFx0XHRpZiAoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSA9PSBCUEZfVENYX0lOR1JFU1MgfHxcbjU4NzQ6XHRcdFx0ICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgPT0gQlBGX1RDWF9FR1JFU1MpXG41ODc1Olx0XHRcdFx0cmV0ID0gdGN4X2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xuNTg3NjpcdFx0XHRlbHNlXG41ODc3Olx0XHRcdFx0cmV0ID0gbmV0a2l0X2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xuNTg3ODpcdFx0XHRicmVhaztcbjU4Nzk6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9ORVRGSUxURVI6XG41ODgwOlx0XHRcdHJldCA9IGJwZl9uZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbjU4ODE6XHRcdFx0YnJlYWs7XG41ODgyOlx0I2VuZGlmXG41ODgzOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcbjU4ODQ6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzOgoKKipBbmFseXppbmcgYGxpbmtfdXBkYXRlYCBBcm91bmQgTGluZSA1OTUwLTYwMDAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBsaW5rX3VwZGF0ZWAgYmV0d2VlbiBsaW5lcyA1OTUwIGFuZCA2MDAwLiBDb25zaWRlcmluZyBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBzeXN0ZW1zLCB0aGlzIGlzIGxpa2VseSBhIGNydWNpYWwgc2VjdGlvbi4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBoYW5kbGluZyBhIHNwZWNpZmljIHVwZGF0ZSByZWxhdGVkIHRvIGxpbmtpbmcsIHdoaWNoIGNvdWxkIG1lYW4gYW55dGhpbmcgZnJvbSBncmFwaCB0cmF2ZXJzYWxzIHRvIHJlc291cmNlIGFzc2lnbm1lbnRzLCBvciBtYXliZSBldmVuIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBsaW5lIG51bWJlcnMgY2FuIGJlIGltcHJlY2lzZSB3aXRob3V0IHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZmlsZSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaWFibGVzIGFuZCBmdW5jdGlvbiBjYWxscyBpbW1lZGlhdGVseSBhcm91bmQgdGhhdCByYW5nZSB0byBnZXQgdGhlIGJlc3QgZmVlbCBmb3IgdGhlIGludGVudC4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBjb21wbGV4IGludGVycGxheSBvZiBkYXRhIHN0cnVjdHVyZXMsIHBvdGVudGlhbGx5IGludm9sdmluZyB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIHNwZWNpZmljIGxpbmssIHRoZSB2YWxpZGF0aW9uIG9mIGl0cyBwcm9wZXJ0aWVzLCBhbmQgdGhlIGNhc2NhZGluZyBlZmZlY3RzIG9mIHRoYXQgdXBkYXRlIG9uIGRlcGVuZGVudCBjb21wb25lbnRzLiBLbm93aW5nIGhvdyB0aG9yb3VnaGx5IHRoZSBkZXZlbG9wZXJzIHRob3VnaHQgdGhyb3VnaCB0aG9zZSBlZGdlIGNhc2VzIHdpbGwgcHJvdmlkZSBhIHF1aWNrIHNlbnNlIG9mIHRoZSBjb2RlJiMzOTtzIG1hdHVyaXR5LiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgc3BvdCB0aGUgaGlnaC1sZXZlbCBsb2dpYyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB0aGF0IG1pZ2h0IHJlcXVpcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgYmUgc3ViamVjdCB0byBhIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU5NTE6XHRcbjU5NTI6XHRcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmxpbmtfZmQpO1xuNTk1MzpcdFx0aWYgKElTX0VSUihsaW5rKSlcbjU5NTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIobGluayk7XG41OTU1Olx0XG41OTU2Olx0XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xuNTk1NzpcdFx0XHRyZXQgPSBsaW5rX3VwZGF0ZV9tYXAobGluaywgYXR0cik7XG41OTU4Olx0XHRcdGdvdG8gb3V0X3B1dF9saW5rO1xuNTk1OTpcdFx0fVxuNTk2MDpcdFxuNTk2MTpcdFx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5uZXdfcHJvZ19mZCk7XG41OTYyOlx0XHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuNTk2MzpcdFx0XHRyZXQgPSBQVFJfRVJSKG5ld19wcm9nKTtcbjU5NjQ6XHRcdFx0Z290byBvdXRfcHV0X2xpbms7XG41OTY1Olx0XHR9XG41OTY2Olx0XG41OTY3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbjU5Njg6XHRcdFx0b2xkX3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCk7XG41OTY5Olx0XHRcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XG41OTcwOlx0XHRcdFx0cmV0ID0gUFRSX0VSUihvbGRfcHJvZyk7XG41OTcxOlx0XHRcdFx0b2xkX3Byb2cgPSBOVUxMO1xuNTk3MjpcdFx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbjU5NzM6XHRcdFx0fVxuNTk3NDpcdFx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG41OTc1Olx0XHRcdHJldCA9IC1FSU5WQUw7XG41OTc2Olx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbjU5Nzc6XHRcdH1cbjU5Nzg6XHRcbjU5Nzk6XHRcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay1cdTAwM2VhdHRhY2hfdHlwZSk7XG41OTgwOlx0XHRpZiAocmV0KVxuNTk4MTpcdFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG41OTgyOlx0XG41OTgzOlx0XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cpXG41OTg0Olx0XHRcdHJldCA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7XG41OTg1Olx0XHRlbHNlXG41OTg2Olx0XHRcdHJldCA9IC1FSU5WQUw7XG41OTg3Olx0XG41OTg4Olx0b3V0X3B1dF9wcm9nczpcbjU5ODk6XHRcdGlmIChvbGRfcHJvZylcbjU5OTA6XHRcdFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcbjU5OTE6XHRcdGlmIChyZXQpXG41OTkyOlx0XHRcdGJwZl9wcm9nX3B1dChuZXdfcHJvZyk7XG41OTkzOlx0b3V0X3B1dF9saW5rOlxuNTk5NDpcdFx0YnBmX2xpbmtfcHV0X2RpcmVjdChsaW5rKTtcbjU5OTU6XHRcdHJldHVybiByZXQ7XG41OTk2Olx0fVxuNTk5NzpcdFxuNTk5ODpcdCNkZWZpbmUgQlBGX0xJTktfREVUQUNIX0xBU1RfRklFTEQgbGlua19kZXRhY2gubGlua19mZFxuNTk5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDk2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZywgc3BlY2lmaWNhbGx5IGhvdyBpdCBhZmZlY3RzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmtpbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgZGlyZWN0bHkgY2FsbGVkIGBsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nYCB3aXRob3V0IHBlcmZvcm1pbmcgYSBjcnVjaWFsIGNoZWNrOiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLSZndDthdHRhY2hfdHlwZSlgLiBOb3csIHRoYXQgY2hlY2sgaXMgYmVpbmcgZG9uZSAqYmVmb3JlKiB0aGUgdXBkYXRlLCB3aGljaCBpcyBnb29kLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgaXMgZG9pbmcuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHZhbGlkYXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgb2YgYSBwcm9ncmFtJiMzOTtzIHR5cGUgd2l0aCB0aGUgYXR0YWNobWVudCB0eXBlLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaGFkIGEgY3JpdGljYWwgb3ZlcnNpZ2h0LCBuYW1lbHkgdGhhdCBpdCBkaWRuJiMzOTt0IGhhbmRsZSBgQlBGX1BST0dfVFlQRV9MU01gIGNvcnJlY3RseS4gSXQgYXBwZWFycyB0aGF0IHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfUFJPR19UWVBFX0xTTWAgYW5kIGBCUEZfTFNNX0NHUk9VUGAgdGhlIGNoZWNrIHdvdWxkIHBhc3MgZXZlbiB3aGVuIHRoZSBwcm9ncmFtJiMzOTtzICpleHBlY3RlZCogYXR0YWNoIHR5cGUgZGlkbiYjMzk7dCBtYXRjaCB0aGUgb25lIGJlaW5nIHVzZWQsIHdoaWNoIGlzIGEgbWFqb3Igc2VjdXJpdHkgZmxhdy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgY2FzZSBCUEZfUFJPR19UWVBFX0xTTWAgYWRkcmVzc2VzIHRoaXMgdnVsbmVyYWJpbGl0eSwgZW5zdXJpbmcgdGhlIGBleHBlY3RlZF9hdHRhY2hfdHlwZWAgYWxpZ25zIHdpdGggdGhlIGFjdHVhbCBgYXR0YWNoX3R5cGVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc291bmQuCgpUaGUgdGhpcmQgY2hhbmdlIGludm9sdmVzIHNlcGFyYXRpbmcgdGhlIHBlcm1pc3Npb24gY2hlY2sgZm9yIGBDR1JPVVBfU0tCYCBmcm9tIHRoZSBgYXR0YWNoX3R5cGVgIHZhbGlkYXRpb24uIEl0JiMzOTtzIGEgc21hcnQgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4KCk5vdyBJIG5lZWQgdG8gZm9jdXMgb24ga2V5IHN5bWJvbHMuIFRoZXNlIGFyZSBnb2luZyB0byBiZSBteSBmb2N1cyBwb2ludHM6IGBicGZfcHJvZ19hdHRhY2hgIChhbmQsIGNvbnNlcXVlbnRseSwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWApLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC4KCkkga25vdyB0aGVzZSBhcmUgYWxsIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCYjMzk7cyBjb25maXJtOiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBhbmQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCBhcmUgc3RhdGljLiBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAgYXJlIGFsc28gc3RhdGljLCBhbmQgY2FsbGVkIGluIGBfX3N5c19icGZgLiBUaGVzZSBhbGwgdHlwaWNhbGx5IGV4aXN0IGFzIHN5bWJvbHMgaW4gdm1saW51eC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIG5hcnJvdyBkb3duIG15IGZvY3VzIHRvIHRob3NlIGZpdmUgc3ltYm9sczogYGxpbmtfdXBkYXRlYCwgYGxpbmtfY3JlYXRlYCwgYGJwZl9wcm9nX2F0dGFjaGAsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBhbmQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYC4KCkFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICp1YmlxdWl0b3VzKj8gTm8uIFRoZXkgYXJlIEJQRi1zcGVjaWZpYyBlbnRyeSBwb2ludHMgYW5kIGhlbHBlcnMgcmVsYXRlZCB0byBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgbWFuYWdlbWVudCwgbm90IGdlbmVyYWwga2VybmVsIHV0aWxpdGllcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRvIGNvbXBpbGUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX0JQRl9MU01gLCBgQ09ORklHX0NHUk9VUF9CUEZgLCBvciBzaW1wbHkgYENPTkZJR19CUEZgIGFyZSBuZWVkZWQuIEtjb25maWcgd2lsbCBiZSBteSBndWlkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzYzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIGZvciBCUEZfU1lTQ0FMTCBpbiBLY29uZmlncyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCBhY3Jvc3MgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBpc24mIzM5O3QgdXN1YWxseSBzb21ldGhpbmcgSSYjMzk7ZCBhcHByb2FjaCB3aXRob3V0IGEgc3BlY2lmaWMgY29udGV4dCwgc28gSSYjMzk7bSBsaWtlbHkgZGVidWdnaW5nIGEgcmVsYXRlZCBpc3N1ZSwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgZW5hYmxlbWVudCBkZXBlbmRlbmNpZXMsIG9yIHBvc3NpYmx5IGxvb2tpbmcgYXQgaG93IGl0JiMzOTtzIGhhbmRsZWQgaW4gYSBwYXJ0aWN1bGFyIHN1Yi1hcmNoaXRlY3R1cmUgb3IgZGlzdHJvLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cga2lja3MgaW46IEkgY291bGQgdXNlIGEgc2ltcGxlIGBncmVwYCBhY3Jvc3MgdGhlIGBLY29uZmlnYCBmaWxlcywgYnV0IEkga25vdyB0aGF0IGNhbiBiZSBpbmVmZmljaWVudCBhbmQgbWlzcyBzdWJ0bGV0aWVzLiBJIG5lZWQgdG8gYmUgbW9yZSBzdHJhdGVnaWMuIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IGJ5IGdldHRpbmcgbXkgc2VhcmNoIG9yZ2FuaXplZC4KCkkga25vdyB0aGVyZSBhcmUgdG9vbHMsIGxpa2VseSBidWlsdCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmLCB3aGljaCBjYW4gZmFjaWxpdGF0ZSB0aGlzIGxvb2t1cC4gSSB3YW50IHRoZSBtb3N0IHJlbGlhYmxlIHRvb2wsIHRoYXQgd29uJiMzOTt0IG1pc3MgYW55IGVkZ2UgY2FzZXMsIGxpa2UgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG9yIHZhcmlhYmxlIGFzc2lnbm1lbnQuIEkgbWlnaHQgc3RhcnQgd2l0aCBgZmluZGAgYW5kIGBncmVwYCBpZiBJJiMzOTttIG9uIGEgc3lzdGVtIHdpdGhvdXQgdGhlIGBrY29uZmlnLXR1aWAgYW5kIGl0cyBhc3NvY2lhdGVkIHRvb2xpbmcgcmVhZGlseSBhdmFpbGFibGUuIEhvd2V2ZXIgSSBzaG91bGQgZmlyc3QgY2hlY2sgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBuYXRpdmUgc2VhcmNoIGZ1bmN0aW9ucy4gSSBtaWdodCB1c2UgdGhlIGBtZW51Y29uZmlnYCBvciBgZGVmY29uZmlnYCB0b29scyBmb3IgYSBtb3JlIGluLWRlcHRoIGFwcHJvYWNoLCB3aGljaCBjYW4gaGlnaGxpZ2h0IGRlcGVuZGVuY2llcyBhbmQgdGhlIGxvZ2ljIGRyaXZpbmcgdGhlIG9wdGlvbiYjMzk7cyB2YWx1ZS4gCgpNeSBnb2FsczogcGlucG9pbnQgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyAqZGVmaW5lZCosIHdoZXJlIGl0JiMzOTtzICp1c2VkKiAoZS5nLiwgaW4gYGlmYCBzdGF0ZW1lbnRzLCBgc2VsZWN0YCBkaXJlY3RpdmVzLCBhc3NpZ25tZW50cyksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhpcyBhbHNvIGluY2x1ZGVzIGFueSBwb3RlbnRpYWwgYWxpYXNlcyBvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgY29udGV4dCBvZiB0aGUgc2V0dGluZyAtIGlzIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYz8gRHJpdmVyLXNwZWNpZmljPyBQYXJ0IG9mIGEgYnJvYWRlciBzZWN1cml0eSBmZWF0dXJlPyAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODY1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgZG93biB0byBhcm91bmQgbGluZSAzMCwgcmlnaHQgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCwgdGhlIG9uZXMgdGhhdCBkaWN0YXRlIHdoZXRoZXIgdGhlIEJQRiBzdWJzeXN0ZW0gZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBmdW5kYW1lbnRhbCBjb250cm9scy4gQXJlIHdlIGxvb2tpbmcgYXQgZW5hYmxpbmcgQlBGIGluIGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBtb3JlIGdyYW51bGFyIG9wdGlvbnMgdG8gY29uZmlndXJlIHNwZWNpZmljIEJQRiBmZWF0dXJlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGdhdGVrZWVwZXJzIOKAkyB0aGUgaW5pdGlhbCBib29sZWFucyB0aGF0IGRldGVybWluZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBlbnRpcmUgQlBGIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwga25vYnMgdG8gdHdpc3QgZm9yIGJyb2FkIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxuICAyNjpcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG4gIDI3Olx0XHRib29sXG4gIDI4Olx0XG4gIDI5Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDMyOlx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IEJQRlxuICAzNDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDM1Olx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzY6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzc6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM4Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzOTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDQwOlx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICA0MTpcdFx0ZGVmYXVsdCBuXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDQ6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIEJQRl9KSVRcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gQlBGXG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxuICA1MDpcdFx0c2VsZWN0IEVYRUNNRU1cbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxuICA1MzpcdFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbiAgNTQ6XHRcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxuICA1NTpcdFx0ICBwcm9ncmFtcy5cbiAgNTY6XHRcbiAgNTc6XHRcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XG4gIDU4Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA1OTpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXG4gIDYwOlx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbiAgNjM6XHRcdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbiAgNjQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbiAgNjU6XHRcdGhlbHBcbiAgNjY6XHRcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxuICA2NzpcdFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXG4gIDY4Olx0XG4gIDY5Olx0XHQgIFdoZW4gQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OIGlzIGVuYWJsZWQsIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxuICA3MDpcdFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcbiAgNzE6XHRcdCAgcmV0dXJuIGZhaWx1cmUuXG4gIDcyOlx0XG4gIDczOlx0Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxuICA3NDpcdFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDc2Olx0XG4gIDc3Olx0Y29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiAgNzg6XHRcdGJvb2wgXCYjMzQ7RGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcJiMzNDtcbiAgNzk6XHRcdGRlZmF1bHQgeVxuICA4MDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICA4MTpcdFx0aGVscFxuICA4MjpcdFx0ICBEaXNhYmxlcyB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHQgYnkgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZ1xuICA4MzpcdFx0ICAvcHJvYy9zeXMva2VybmVsL3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWQga25vYiB0byAyLiBBbiBhZG1pbiBjYW5cbiAgODQ6XHRcdCAgc3RpbGwgcmVlbmFibGUgaXQgYnkgc2V0dGluZyBpdCB0byAwIGxhdGVyIG9uLCBvciBwZXJtYW5lbnRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM6IENHUk9VUF9CUEYgYW5kIEJQRl9MU00qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIGtlcm5lbCBzZWN1cml0eSwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IHByb2plY3QuIEkgbmVlZCB0byBleHBsaWNpdGx5IGFjY291bnQgZm9yIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSB0aGV5JiMzOTtyZSBoYW5kbGVkOyB0aGV5JiMzOTtyZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgd2UgKmhhdmUqIHRvIGFkZHJlc3MuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGludGVyYWN0IHdpdGggb3VyIHNhbmRib3hpbmcvc2VjdXJpdHkgcG9saWNpZXMuIEFyZSBvdXIgZUJQRiBmaWx0ZXJzIHByb3Blcmx5IGFjY291bnRpbmcgZm9yIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBjZ3JvdXBzPyBEbyB3ZSBoYXZlIHBvdGVudGlhbCBieXBhc3NlcyBpZiBhIG1hbGljaW91cyBhY3RvciBjYW4gaW5mbHVlbmNlIGJvdGggY2dyb3VwIGFzc2lnbm1lbnRzICphbmQqIHRoZSBCUEYgY29kZT8gV2UgbmVlZCBhIGNsZWFyIGF1ZGl0IHBhdGggaGVyZS4KCkFuZCB3aGF0IGFib3V0IGBCUEZfTFNNYD8gSSBrbm93IGl0JiMzOTtzIHJlbGF0aXZlbHkgbmV3LCBidXQgdGhlIHBvd2VyIGl0IG9mZmVycywgaW4gdGhlIHdyb25nIGhhbmRzLCBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIGl0LCBob3cgd2UmIzM5O3ZlIGNvbmZpZ3VyZWQgaXQsIGFuZCwgY3JpdGljYWxseSwgaG93IHdlJiMzOTtyZSAqdmFsaWRhdGluZyogYW55IGNoYW5nZXMgbWFkZSB0aHJvdWdoIGl0LiBBcmUgb3VyIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbXMgcm9idXN0IGVub3VnaCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24/IElzIG91ciBsb2dnaW5nIHN1ZmZpY2llbnRseSBncmFudWxhciB0byBkZXRlY3QgYW5kIHJlc3BvbmQgdG8gc3VzcGljaW91cyBiZWhhdmlvciByZWxhdGVkIHRvIGBCUEZfTFNNYCBldmVudHM/IFRoaXMgcmVxdWlyZXMgbW9yZSB0aGFuIGEgY3Vyc29yeSBnbGFuY2U7IGl0IGRlc2VydmVzIGRlZXAgc2NydXRpbnkgdG8gZW5zdXJlIHdlIGhhdmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNlZCBhIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdHkuIEl0IGlzIHdvcnRoIGdvaW5nIGJhY2sgYW5kIGRpZ2dpbmcgdXAgdGhlIGRvY3VtZW50YXRpb24gdG8gZG91YmxlIGNoZWNrIGFueSBhc3N1bXB0aW9ucyBJIGhhdmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEZ8Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDU9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTUtXG5pbml0L0tjb25maWc6MTM1Njpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTctXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05ND1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05NS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Njpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgUmVsYXRlZCB0byBCUEYgYW5kIExTTSoqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgQ29tbW9uIEdyb3VwIEJQRiAoYENHUk9VUF9CUEZgKSBhbmQgdGhlIEJQRiBMU00gaW50ZWdyYXRpb24gKGBCUEZfTFNNYCkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgYW5kIGluc3BlY3QgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgYW5kIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgdGhlIGxpbmVzIG9mIGNvZGUgYXJvdW5kIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgcHJvdmlkZXMgY29udGV4dC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGNvbmZsaWN0cz8gV2hhdCBleGFjdGx5IGRvZXMgZW5hYmxpbmcvZGlzYWJsaW5nIGVhY2ggb3B0aW9uIGVudGFpbD8gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgQlBGIGZlYXR1cmVzIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgdGhleSBoYXZlLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyBJJiMzOTttIGFib3V0IHRvIGNvbmR1Y3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU1Olx0XG4xMzU2Olx0Y29uZmlnIENHUk9VUF9CUEZcbjEzNTc6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4xMzU4Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4xMzU5Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuMTM2MDpcdFx0aGVscFxuMTM2MTpcdFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXG4xMzYyOlx0XHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXG4xMzYzOlx0XG4xMzY0Olx0XHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcbjEzNjU6XHRcdCAgb2YgYXR0YWNobWVudC4gRm9yIGluc3RhbmNlLCBwcm9ncmFtcyB0aGF0IGFyZSBhdHRhY2hlZCB1c2luZ1xuMTM2NjpcdFx0ICBCUEZfQ0dST1VQX0lORVRfSU5HUkVTUyB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBpbmdyZXNzIHBhdGggb2ZcbjEzNjc6XHRcdCAgaW5ldCBzb2NrZXRzLlxuMTM2ODpcdFxuMTM2OTpcdGNvbmZpZyBDR1JPVVBfTUlTQ1xuMTM3MDpcdFx0Ym9vbCBcJiMzNDtNaXNjIHJlc291cmNlIGNvbnRyb2xsZXJcJiMzNDtcbjEzNzE6XHRcdGRlZmF1bHQgblxuMTM3MjpcdFx0aGVscFxuMTM3MzpcdFx0ICBQcm92aWRlcyBhIGNvbnRyb2xsZXIgZm9yIG1pc2NlbGxhbmVvdXMgcmVzb3VyY2VzIG9uIGEgaG9zdC5cbjEzNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBCUEYgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhbmQgc3BlY2lmaWNhbGx5IHRoZSBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVncmF0aW9uLiBUbyBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHJlYXNvbmFibHkgY2VydGFpbiBpdCYjMzk7cyBpbiB0aGVyZSBzb21ld2hlcmUsIGxpa2VseSB0b3dhcmQgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBCUEYmIzM5O3MgY29yZSBmZWF0dXJlcy4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDk2IGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gemVybyBpbiBvbiBgQlBGX0xTTWAuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgYmUgZW5vdWdoIHRvIGZpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFxuICA5NjpcdGNvbmZpZyBCUEZfTFNNXG4gIDk3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk5Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gMTAwOlx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gMTAxOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMDI6XHRcdGhlbHBcbiAxMDM6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwNDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwNTpcdFxuIDEwNjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBCUEZfSklUX0tBU0FOXG4gMTA5Olx0XHRib29sXG4gMTEwOlx0XHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cbiAxMTE6XHRcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuIDExMjpcdFx0ZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DXG4gMTEzOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMTQ6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY3MwoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQ29uZmlybWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoaXMgZnV6emluZyB0YXJnZXQgaXMgc291bmQuIEZpcnN0LCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgdGhlIGluaXRpYWwgaW5kaWNhdG9yLiBEaWdnaW5nIGRlZXBlciwgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbiB3aXRoIGF0dGFjaCB0eXBlIHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBoYW5kbGluZyBgQlBGX1BST0dfVFlQRV9MU01gIHdpdGhpbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYW5kIGFsc28gcmVmYWN0b3JpbmcgdGhlIGNhcGFiaWxpdHkgY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGludG8gYSBuZXcgaGVscGVyLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gLiBUaGVzZSBhcmUgYWxsIGFjY2Vzc2libGUgQlBGIHN5c2NhbGxzLCBwYXJ0aWN1bGFybHkgdGhlIGBCUEZfUFJPR19BVFRBQ0hgLCBgQlBGX0xJTktfQ1JFQVRFYCwgYW5kIGBCUEZfTElOS19VUERBVEVgIGNhbGxzLCBhbGwgb2Ygd2hpY2ggYXJlIHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGF0IGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vayB3aXRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayBjb3JyZWN0OiBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgQlBGX0xTTWAgYWxsIHNlZW0gZXNzZW50aWFsIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgbGV0JiMzOTtzIHZlcmlmeSBvdXIgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRoZSByaWdodCBlbnRyeSBwb2ludHMuIE9rYXksIGEgcXVpY2sgZG91YmxlLWNoZWNrOiBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYGxpbmtfdXBkYXRlYCwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAsIGFuZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIC0gYWxsIG9mIHRoZW0gYXJlIHJpZ2h0IG9uIHRhcmdldC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY292ZXIgdGhlIHJlbGV2YW50IGxvZ2ljIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLgoKTm93LCB3aXRoIHRoaXMgY29uZmlybWF0aW9uLCBJJiMzOTttIGNvbWZvcnRhYmxlIHByb2NlZWRpbmcuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7bGlua19jcmVhdGUmIzM0OywKICAgICYjMzQ7bGlua191cGRhdGUmIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBCUEYgc3lzY2FsbCBsb2dpYyBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYywgaW50cm9kdWNpbmcgYXR0YWNoIHR5cGUgdmVyaWZpY2F0aW9uIGZvciBsaW5rX3VwZGF0ZSwgY2hlY2tpbmcgTFNNIGV4cGVjdGVkIGF0dGFjaCB0eXBlcyBpbiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUsIGFuZCByZWZhY3RvcmluZyBjZ3JvdXAtc2tiIGNhcGFiaWxpdHkgY2hlY2tzIGludG8gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0uIFRoZXNlIGVudHJ5cG9pbnRzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoMikgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IG1vZGlmeSBjb250cm9sLWZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMgdXNpbmcgYWxyZWFkeS1pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIChicGZfcHJvZyBhbmQgYnBmX2xpbmspLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRmZDliNjE1MDc3ZjI5NDc3Y2VkNzRjMTVmM2ZiZDYxODZlZDAzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDY6Mjg6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjJiY2QzZjNhMmE1NTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC00NDgxLDE0ICYjNDM7NDQ4MSw5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKIAljYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUjoKIAljYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6CiAJY2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDoKJiM0MzsJY2FzZSBCUEZfUFJPR19UWVBFX0xTTToKIAkJcmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7CiAJY2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6Ci0JCWlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy0mZ3Q7YXV4LSZndDt0b2tlbiwgQ0FQX05FVF9BRE1JTikpCi0JCQkvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci4KLQkJCSAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgotCQkJICovCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCXB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTsKIAkJaWYgKHByb2ctJmd0O3R5cGUgIT0gcHR5cGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ1NDIsNiAmIzQzOzQ1MzcsMjAgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCX0KIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrCiYjNDM7CSAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCICZhbXA7JmFtcDsKJiM0MzsJICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLSZndDthdXgtJmd0O3Rva2VuLCBDQVBfTkVUX0FETUlOKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSwKIAkJCQlib29sIGNoZWNrX2F0eXBlKQogewpAQCAtNDYwNiw3ICYjNDM7NDYxNSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLSZndDthdHRhY2hfdHlwZSkpIHsKJiM0MzsJaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItJmd0O2F0dGFjaF90eXBlKSkgewogCQlicGZfcHJvZ19wdXQocHJvZyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU4MDUsOCAmIzQzOzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cikKIAlpZiAoSVNfRVJSKHByb2cpKQogCQlyZXR1cm4gUFRSX0VSUihwcm9nKTsKIAotCXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLAotCQkJCQkJYXR0ci0mZ3Q7bGlua19jcmVhdGUuYXR0YWNoX3R5cGUpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTU5NjgsNiAmIzQzOzU5NzYsMTAgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAkJZ290byBvdXRfcHV0X3Byb2dzOwogCX0KIAomIzQzOwlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstJmd0O2F0dGFjaF90eXBlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3B1dF9wcm9nczsKJiM0MzsKIAlpZiAobGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZykKIAkJcmV0ID0gbGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpOwogCWVsc2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jCmluZGV4IDE1MDkzYTY5NTEwZWIuLjNiNDNjMzQ5MTdjY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYwpAQCAtMSw2ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2FwX2hlbHBlcnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Nncm91cF9oZWxwZXJzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0aW5nX2hlbHBlcnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3RfY2dyb3VwX2xpbmsuc2tlbC5oJiMzNDsKQEAgLTI0LDcgJiM0MzsyNSw3NyBAQCBpbnQgcGluZ19hbmRfY2hlY2soaW50IGV4cF9jYWxscywgaW50IGV4cF9hbHRfY2FsbHMpCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZCkKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3QgX191NjQgY2FwcyA9ICgxVUxMICZsdDsmbHQ7IENBUF9ORVRfQURNSU4pIHwgKDFVTEwgJmx0OyZsdDsgQ0FQX1NZU19BRE1JTik7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7CiYjNDM7CV9fdTY0IHNhdmVkX2NhcHMgPSAwOwomIzQzOwlpbnQgY2dfZmQgPSAtMSwgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9jZ3JvdXBfbGlua19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjZ19pbml0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljZ19mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cCgmIzM0Oy9jZ3JvdXBfbGlua191cGRhdGUmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNnX2ZkLCAwLCAmIzM0O2NnX2NyZWF0ZSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gam9pbl9jZ3JvdXAoJiMzNDsvY2dyb3VwX2xpbmtfdXBkYXRlJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7Y2dfam9pbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLnNlbmRtc2c0LCBjZ19mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9zZW5kbXNnNCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtJmd0O3Byb2dzLnNlbmRtc2c2KTsKJiM0MzsJQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgJiMzNDtyZWplY3Rfc2VuZG1zZzZfdXBkYXRlJiMzNDspOwomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJbGluayA9IE5VTEw7CiYjNDM7CiYjNDM7CWVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCAmYW1wO3NhdmVkX2NhcHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7ZHJvcF9jYXBzX2Zvcl9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLSZndDtwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSX1BUUihsaW5rLCAmIzM0O2F0dGFjaF93aXRob3V0X25ldF9hZG1pbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJZXJyID0gbGliYnBmX2dldF9lcnJvcihsaW5rKTsKJiM0MzsJbGluayA9IE5VTEw7CiYjNDM7CWlmICghQVNTRVJUX0VRKGVyciwgLUVQRVJNLCAmIzM0O2F0dGFjaF9lcnImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgJmFtcDsgY2FwcywgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtyZXN0b3JlX2NhcHNfZm9yX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLmVncmVzcywgY2dfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDthdHRhY2hfZWdyZXNzJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgJmFtcDtzYXZlZF9jYXBzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Ryb3BfY2FwcyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtJmd0O3Byb2dzLmVncmVzc19hbHQpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3VwZGF0ZV93aXRob3V0X25ldF9hZG1pbiYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwllcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzICZhbXA7IGNhcHMsIE5VTEwpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3Jlc3RvcmVfY2FwcyYjMzQ7KTsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CWlmIChjZ19mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoY2dfZmQpOwomIzQzOwljbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpOwomIzQzOwl0ZXN0X2Nncm91cF9saW5rX19kZXN0cm95KHNrZWwpOwomIzQzOwlza2VsID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jZ3JvdXBfbGlua19hdHRhY2godm9pZCkKIHsKIAlzdHJ1Y3QgewogCQljb25zdCBjaGFyICpwYXRoOwpAQCAtMjUzLDMgJiM0MzszMjQsMTEgQEAgdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKQogCX0KIAljbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpOwogfQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJdGVzdF9jZ3JvdXBfbGlua19hdHRhY2goKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1cGRhdGUmIzM0OykpCiYjNDM7CQl0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuYwppbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jCkBAIC03NCw2ICYjNDM7NzQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKQogCWludCBiaW5kX3Byb2dfZmQgPSAtMTsKIAlpbnQgYmluZF9saW5rX2ZkID0gLTE7CiAJaW50IGNsb25lX3Byb2dfZmQgPSAtMTsKJiM0MzsJaW50IHNvY2tldF9saW5rX2ZkID0gLTE7CiAJaW50IGVyciwgZmQsIHByaW87CiAJc29ja2xlbl90IHNvY2tsZW47CiAKQEAgLTE1Niw2ICYjNDM7MTU3LDE3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpCiAJQVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgJiMzNDticGZfbHNtX3NvY2tldF9iaW5kJiMzNDspLCAxLCAmIzM0O3Byb2cgY291bnQmIzM0Oyk7CiAJQVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgTlVMTCksIDQsICYjMzQ7dG90YWwgcHJvZyBjb3VudCYjMzQ7KTsKIAomIzQzOwlzb2NrZXRfbGlua19mZCA9CiYjNDM7CQlicGZfbGlua19jcmVhdGUoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnNvY2tldF9maXJzdCksCiYjNDM7CQkJCWNncm91cF9mZCwgQlBGX0xTTV9DR1JPVVAsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzb2NrZXRfbGlua19mZCwgMCwgJiMzNDtsaW5rIGNyZWF0ZSBzb2NrZXRfZmlyc3QmIzM0OykpCiYjNDM7CQlnb3RvIGRldGFjaF9jZ3JvdXA7CiYjNDM7CWVyciA9IGJwZl9saW5rX3VwZGF0ZShzb2NrZXRfbGlua19mZCwKJiM0MzsJCQkgICAgICBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Muc29ja2V0X2NyZWF0ZV9sc20pLAomIzQzOwkJCSAgICAgIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCAmIzM0O3JlamVjdCBsc21fbWFjIGxpbmsgdXBkYXRlJiMzNDspOwomIzQzOwljbG9zZShzb2NrZXRfbGlua19mZCk7CiYjNDM7CiAJLyogQXR0YWNoIGFub3RoZXIgaW5zdGFuY2Ugb2YgYmluZCBwcm9ncmFtIHRvIGFub3RoZXIgY2dyb3VwLgogCSAqIFRoaXMgc2hvdWxkIHRyaWdnZXIgdGhlIHJldXNlIG9mIHRoZSB0cmFtcG9saW5lIHNoaW0gKHR3bwogCSAqIHByb2dyYW1zIGF0dGFjaGluZyB0byB0aGUgc2FtZSBidGZfaWQpLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMKaW5kZXggM2JmYTQ3OTEwNGJlOC4uMzA3Mjc5NDVjZWNjMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jCkBAIC0yMTMsNiAmIzQzOzIxMywxMiBAQCBpbnQgQlBGX1BST0coc29ja2V0X2ZpcnN0LCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2xzbS9zb2NrZXRfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHNvY2tldF9jcmVhdGVfbHNtLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O2xzbV9jZ3JvdXAvc29ja2V0X2NyZWF0ZSYjMzQ7KQogaW50IEJQRl9QUk9HKHNvY2tldF9zZWNvbmQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMKaW5kZXggNGZhYmE4OGU0NWE1YS4uMTA3NDI5NjM4ZjU0MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jCkBAIC0yMCw1ICYjNDM7MjAsMTYgQEAgaW50IGVncmVzc19hbHQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiAxOwogfQogCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7U0VDKCYjMzQ7Y2dyb3VwL3NlbmRtc2c0JiMzNDspCiYjNDM7aW50IHNlbmRtc2c0KHN0cnVjdCBicGZfc29ja19hZGRyICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiAKJiM0MztTRUMoJiMzNDtjZ3JvdXAvc2VuZG1zZzYmIzM0OykKJiM0MztpbnQgc2VuZG1zZzYoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgQXNzZXNzbWVudCBvZiBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgY3JlYXRpb24vdXBkYXRlIHJvdXRpbmVzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByZWZpbmluZyBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgYXR0YWNoIHR5cGUgdmFsaWRhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgQ0dST1VQX1NLQmAgYW5kIG5vdyBpbmNvcnBvcmF0aW5nIGBMU01gIHByb2dyYW1zLiBUaGUga2V5IGNoYW5nZXMgYXJlOgoKMS4gICoqUmVvcmdhbml6YXRpb24gb2YgQ2hlY2tzOioqIFRoZSBgQ0FQX05FVF9BRE1JTmAgcGVybWlzc2lvbiBjaGVjayBmb3IgYENHUk9VUF9TS0JgIGlzIG1vdmVkIGZyb20gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYCB0byBhIG5ldyBoZWxwZXIgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKClgLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNlcGFyYXRpb24gb2YgY29uY2VybnMg4oCTIGF0dGFjaCB0eXBlIGNvbXBhdGliaWxpdHkgYW5kIHBlcm1pc3Npb25zIGFyZSBub3cgaGFuZGxlZCBkaXN0aW5jdGx5LgoyLiAgKipMU00gU3VwcG9ydDoqKiAgYEJQRl9QUk9HX1RZUEVfTFNNYCBpcyBub3cgZXhwbGljaXRseSBzdXBwb3J0ZWQgaW4gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYC4KMy4gICoqTGluayBVcGRhdGUgQ2hlY2s6KiogIEluIGBsaW5rX3VwZGF0ZSgpYCwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYCB0byBlbnN1cmUgdGhlIGF0dGFjaCB0eXBlIG9mIHRoZSAqbmV3KiBwcm9ncmFtIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhpc3RpbmcgbGluayYjMzk7cyB0eXBlLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGxpbmsgaW50ZWdyaXR5IGR1cmluZyB1cGRhdGVzLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IEkgbmVlZCB0byBhbmFseXplIGZvciB0aGlzIHNwZWNpZmljYWxseSBmb3IgS01TQU4uIE15IGFuYWx5c2lzIGlzIGFzIGZvbGxvd3M6CgoqICAgKipObyBVbmluaXRpYWxpemVkIE1lbW9yeSBBbGxvY2F0aW9uL0NvcHk6KiogIEkgc2VlIG5vIGV2aWRlbmNlIG9mIGFsbG9jYXRpbmcgb3IgY29weWluZyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIG9ubHkgYWx0ZXJzIHRoZSB2YWxpZGF0aW9uIGFuZCBwZXJtaXNzaW9uIGNoZWNrcy4KKiAgICoqTm8gUmVhZHMgb2YgVW5pbml0aWFsaXplZCBNZW1vcnkgb3IgU3RydWN0IFBhZGRpbmc6KiogVGhlIGNvZGUgcmVhZHMgZnJvbSBjbGVhcmx5IGRlZmluZWQgZmllbGRzIG9mIHN0cnVjdHVyZXMgbGlrZSBgcHJvZy0mZ3Q7dHlwZWAsIGBwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZWAsIGBwcm9nLSZndDthdXgtJmd0O3Rva2VuYCwgYW5kIGBhdHRyLSZndDsuLi5gIGFuZCBgbGluay0mZ3Q7YXR0YWNoX3R5cGVgLiBUaGVyZSBhcmUgbm8gYXBwYXJlbnQgcmVhZHMgZnJvbSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBwYWRkaW5nLgoqICAgKipObyBCdWZmZXIgTGVuZ3RoIE1hbmlwdWxhdGlvbi9Db3B5IEJvdW5kIElzc3VlczoqKiAgVGhpcyBwYXRjaCBkb2VzIG5vdCBhcHBlYXIgdG8gaW52b2x2ZSBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbiBvciBhbnkgY29uY2VybnMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGNvcGllcy4KKiAgICoqTm8gRXhwb3N1cmUgb2YgU3RhY2sgb3IgSGVhcCBEYXRhOioqIEkgZG9uJiMzOTt0IHNlZSBhbnkgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGNvdWxkIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtkIG5vdyBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gLCBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCBhbmQgYGxpbmtfdXBkYXRlYCBhcyB3ZWxsIGFzIGFueSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGRvdWJsZS1jaGVjayBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgZ290Y2hhcy4gQnV0IG15IGd1dCBmZWVsaW5nIGlzIHRoZSBwYXRjaCBvbmx5IGludm9sdmVzIHN0cnVjdHVyYWwgY2hhbmdlcyBhbmQgbG9naWMgcmVmYWN0b3JpbmcsIHdpdGggbm8gZXhwbGljaXQgbWVtb3J5IGNvcnJ1cHRpb24gcmlza3MuCgpUaGVyZWZvcmUsIG15IHByZWxpbWluYXJ5IGFzc2Vzc21lbnQgaXMgdGhhdCAqKmBOZWVkc0tNU0FOID0gZmFsc2VgKiouIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aCBhIGJyaWVmIGNvZGUgcmV2aWV3IGZvciBhYnNvbHV0ZSBjZXJ0YWludHksIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgS01TQU4tcmVsZXZhbnQgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0NzU6XHRcdFx0XHRcdFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbjQ0NzY6XHR7XG40NDc3Olx0XHRlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGU7XG40NDc4Olx0XG40NDc5Olx0XHRzd2l0Y2ggKHByb2ctXHUwMDNldHlwZSkge1xuNDQ4MDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLOlxuNDQ4MTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XG40NDgyOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XG40NDgzOlx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuNDQ4NDpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbjQ0ODU6XHRcdFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcbjQ0ODY6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxuNDQ4NzpcdFx0XHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XG40NDg4Olx0XHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gcHR5cGUpXG40NDg5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NDkwOlx0XG40NDkxOlx0XHRcdHJldHVybiBwcm9nLVx1MDAzZWVuZm9yY2VfZXhwZWN0ZWRfYXR0YWNoX3R5cGUgXHUwMDI2XHUwMDI2XG40NDkyOlx0XHRcdFx0cHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHRhY2hfdHlwZSA/XG40NDkzOlx0XHRcdFx0LUVJTlZBTCA6IDA7XG40NDk0Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxuNDQ5NTpcdFx0XHRyZXR1cm4gMDtcbjQ0OTY6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9ORVRGSUxURVI6XG40NDk3Olx0XHRcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTkVURklMVEVSKVxuNDQ5ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ5OTpcdFx0XHRyZXR1cm4gMDtcbjQ1MDA6XHRcdGNhc2UgQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UOlxuNDUwMTpcdFx0Y2FzZSBCUEZfUFJPR19UWVBFX1RSQUNFUE9JTlQ6XG40NTAyOlx0XHRcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfUEVSRl9FVkVOVClcbjQ1MDM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MDQ6XHRcdFx0cmV0dXJuIDA7XG40NTA1Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfS1BST0JFOlxuNDUwNjpcdFx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfS1BST0JFX01VTFRJIFx1MDAyNlx1MDAyNlxuNDUwNzpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSlcbjQ1MDg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MDk6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OIFx1MDAyNlx1MDAyNlxuNDUxMDpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OKVxuNDUxMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUxMjpcdFx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfVVBST0JFX01VTFRJIFx1MDAyNlx1MDAyNlxuNDUxMzpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSlcbjQ1MTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MTU6XHRcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1VQUk9CRV9TRVNTSU9OIFx1MDAyNlx1MDAyNlxuNDUxNjpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9TRVNTSU9OKVxuNDUxNzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUxODpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG40NTE5Olx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX01VTFRJIFx1MDAyNlx1MDAyNlxuNDUyMDpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OIFx1MDAyNlx1MDAyNlxuNDUyMTpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSBcdTAwMjZcdTAwMjZcbjQ1MjI6XHRcdFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTilcbjQ1MjM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ1MjQ6XHRcdFx0cmV0dXJuIDA7XG40NTI1Olx0XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxuNDUyNjpcdFx0XHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9JTkdSRVNTIFx1MDAyNlx1MDAyNlxuNDUyNzpcdFx0XHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9FR1JFU1MgXHUwMDI2XHUwMDI2XG40NTI4Olx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BSSU1BUlkgXHUwMDI2XHUwMDI2XG40NTI5Olx0XHRcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BFRVIpXG40NTMwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NTMxOlx0XHRcdHJldHVybiAwO1xuNDUzMjpcdFx0ZGVmYXVsdDpcbjQ1MzM6XHRcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuNDUzNDpcdFx0XHRpZiAocHR5cGUgPT0gQlBGX1BST0dfVFlQRV9VTlNQRUMgfHwgcHR5cGUgIT0gcHJvZy1cdTAwM2V0eXBlKVxuNDUzNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDUzNjpcdFx0XHRyZXR1cm4gMDtcbjQ1Mzc6XHRcdH1cbjQ1Mzg6XHR9XG40NTM5Olx0XG40NTQwOlx0c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG40NTQxOlx0XHRcdFx0XHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbjQ1NDI6XHR7XG40NTQzOlx0XHQvKlxuNDU0NDpcdFx0ICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2tcbjQ1NDU6XHRcdCAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuNDU0NjpcdFx0ICovXG40NTQ3Olx0XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcdTAwMjZcdTAwMjZcbjQ1NDg6XHRcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuNDU0OTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuNDU1MDpcdFxuNDU1MTpcdFx0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG40NTUyOlx0fVxuNDU1MzpcdFxuNDU1NDpcdHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJQRiBMaW5rIFVwZGF0ZSBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGEgYml0IGRlZXBlci4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcG90ZW50aWFsIGlzc3VlLCBJIHNob3VsZCBleHBhbmQgbXkgc2NvcGUuIExldCYjMzk7cyBub3QganVzdCBmb2N1cyBvbiB0aGUgb2J2aW91czsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIHN1YnRsZSBoaWRpbmcgaW4gcGxhaW4gc2lnaHQuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgbGlua191cGRhdGUoKWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIGFyZWEgZm9yIGEgbWlzY2FsY3VsYXRpb24gdG8gbHVyaywgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBkaXJlY3RseSBpbnZvbHZlZCBpbiwgd2VsbCwgKnVwZGF0aW5nKiBCUEYgbGlua3MuIFRpbWUgdG8gbWV0aWN1bG91c2x5IGRpc3NlY3QgdGhlIGNvZGUgYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhhdCBmdW5jdGlvbi4gSXQmIzM5O3MgdGltZSB0byBwdXQgb24gdGhlIGRldGVjdGl2ZSBoYXQgYW5kIHRyeSB0byBmaW5kIGEgY3JhY2sgaW4gdGhlIGFybW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTk1MTpcdFxuNTk1MjpcdFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXHUwMDNlbGlua191cGRhdGUubGlua19mZCk7XG41OTUzOlx0XHRpZiAoSVNfRVJSKGxpbmspKVxuNTk1NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbjU5NTU6XHRcbjU5NTY6XHRcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfbWFwKSB7XG41OTU3Olx0XHRcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcbjU5NTg6XHRcdFx0Z290byBvdXRfcHV0X2xpbms7XG41OTU5Olx0XHR9XG41OTYwOlx0XG41OTYxOlx0XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbjU5NjI6XHRcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XG41OTYzOlx0XHRcdHJldCA9IFBUUl9FUlIobmV3X3Byb2cpO1xuNTk2NDpcdFx0XHRnb3RvIG91dF9wdXRfbGluaztcbjU5NjU6XHRcdH1cbjU5NjY6XHRcbjU5Njc6XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xuNTk2ODpcdFx0XHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcbjU5Njk6XHRcdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbjU5NzA6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKG9sZF9wcm9nKTtcbjU5NzE6XHRcdFx0XHRvbGRfcHJvZyA9IE5VTEw7XG41OTcyOlx0XHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuNTk3MzpcdFx0XHR9XG41OTc0Olx0XHR9IGVsc2UgaWYgKGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcbjU5NzU6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjU5NzY6XHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuNTk3NzpcdFx0fVxuNTk3ODpcdFxuNTk3OTpcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLVx1MDAzZWF0dGFjaF90eXBlKTtcbjU5ODA6XHRcdGlmIChyZXQpXG41OTgxOlx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbjU5ODI6XHRcbjU5ODM6XHRcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZylcbjU5ODQ6XHRcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbjU5ODU6XHRcdGVsc2VcbjU5ODY6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjU5ODc6XHRcbjU5ODg6XHRvdXRfcHV0X3Byb2dzOlxuNTk4OTpcdFx0aWYgKG9sZF9wcm9nKVxuNTk5MDpcdFx0XHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xuNTk5MTpcdFx0aWYgKHJldClcbjU5OTI6XHRcdFx0YnBmX3Byb2dfcHV0KG5ld19wcm9nKTtcbjU5OTM6XHRvdXRfcHV0X2xpbms6XG41OTk0Olx0XHRicGZfbGlua19wdXRfZGlyZWN0KGxpbmspO1xuNTk5NTpcdFx0cmV0dXJuIHJldDtcbjU5OTY6XHR9XG41OTk3Olx0XG41OTk4Olx0I2RlZmluZSBCUEZfTElOS19ERVRBQ0hfTEFTVF9GSUVMRCBsaW5rX2RldGFjaC5saW5rX2ZkXG41OTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjIKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhpcyBwYXRjaCBvdmVyLCBhbmQgbXkgY29uY2x1c2lvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB3aXRoaW4gdGhlIGV4aXN0aW5nIEJQRiBpbmZyYXN0cnVjdHVyZSwgZm9jdXNpbmcgb24gdGhlIHZhbGlkYXRpb24gYW5kIGF1dGhvcml6YXRpb24gY2hlY2tzIGZvciBCUEYgcHJvZ3JhbSBhdHRhY2htZW50cy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbG9naWNhbCBjaGVja3Mgb24gdGhlIGBwcm9nYCBhbmQgYGxpbmtgIHN0cnVjdHVyZXMg4oCTIHNwZWNpZmljYWxseSBjYXBhYmlsaXR5IHJlcXVpcmVtZW50cyBhbmQgYXR0YWNoIHR5cGUgY29tcGF0aWJpbGl0eS4KCkNydWNpYWxseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBidWZmZXJzLCBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBpc3N1ZXMsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgYWJzb2x1dGVseSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHRoYXQgSSBjYW4gc2VlLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoYXQgYXNzZXNzbWVudCwgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCk5vdywgbGV0IG1lIGFydGljdWxhdGUgdGhlIHJlYXNvbmluZyBjbGVhcmx5LiBGaXJzdCwgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHByb2dyYW0gYXR0YWNoIHZhbGlkYXRpb24gbG9naWMuIEl0IHNlcGFyYXRlcyBvdXQgdGhlIGNhcGFiaWxpdHkgY2hlY2tzIChoYW5kbGVkIGJ5IGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWApIGZyb20gdGhlIGF0dGFjaC10eXBlIHZhbGlkYXRpb24gKGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgKS4gSXQgYWxzbyBpbmNvcnBvcmF0ZXMgc3VwcG9ydCBmb3IgYEJQRl9QUk9HX1RZUEVfTFNNYCBpbiB0aGUgdHlwZSBjaGVja3MgYW5kIGVuc3VyZXMgbmV3IHByb2dyYW0gYXR0YWNoIHR5cGVzIGFyZSBwcm9wZXJseSB2YWxpZGF0ZWQgd2l0aGluIGBsaW5rX3VwZGF0ZSgpYC4KClRoZSByZWFzb24gS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBvcGVyYXRpb25zLCBvciBkYXRhIHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLiBJdCBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgbWVtb3J5IHByb2JsZW1zLCBvciBjcmVhdGUgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbi1sZWFrIHZlY3RvcnMuIFRoZSBwYXRjaCYjMzk7cyBmb2N1cyBpcyBvbiBjb250cm9sLWZsb3csIHBlcm1pc3Npb24gYW5kIHR5cGUgdmFsaWRhdGlvbiBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIEFueSBleGlzdGluZyBpc3N1ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lcyBzaG91bGQgYmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIHJlZmNvdW50aW5nIG1lY2hhbmlzbXMgYW5kIEtBU0FOLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBteSBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgdXBkYXRlIHZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQgc2VwYXJhdGVzIHBlcm1pc3Npb24gY2hlY2tzIGZvciBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgaW50byBhIGhlbHBlciBmdW5jdGlvbiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0pLCBhZGRzIGF0dGFjaC10eXBlIHZhbGlkYXRpb24gZm9yIEJQRl9QUk9HX1RZUEVfTFNNIHByb2dyYW1zLCBhbmQgZW5mb3JjZXMgYXR0YWNoLXR5cGUgY29tcGF0aWJpbGl0eSBjaGVja2luZyBvbiB0aGUgcmVwbGFjZW1lbnQgcHJvZ3JhbSBkdXJpbmcgYnBmX2xpbmsgdXBkYXRlIChsaW5rX3VwZGF0ZSkuXG5cblRoZXNlIGNoYW5nZXMgb25seSBtb2RpZnkgY29udHJvbC1mbG93IGFuZCB2YWxpZGF0aW9uIGxvZ2ljIHVzaW5nIGFscmVhZHktaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyAoYnBmX3Byb2cgYW5kIGJwZl9saW5rKS4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBsaW5rIHVwZGF0ZSB2YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0IHNlcGFyYXRlcyBwZXJtaXNzaW9uIGNoZWNrcyBmb3IgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKSwgYWRkcyBhdHRhY2gtdHlwZSB2YWxpZGF0aW9uIGZvciBCUEZfUFJPR19UWVBFX0xTTSBwcm9ncmFtcywgYW5kIGVuZm9yY2VzIGF0dGFjaC10eXBlIGNvbXBhdGliaWxpdHkgY2hlY2tpbmcgb24gdGhlIHJlcGxhY2VtZW50IHByb2dyYW0gZHVyaW5nIGJwZl9saW5rIHVwZGF0ZSAobGlua191cGRhdGUpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbW9kaWZ5IGNvbnRyb2wtZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYyB1c2luZyBhbHJlYWR5LWluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgKGJwZl9wcm9nIGFuZCBicGZfbGluaykuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgc2l6ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMwLjcyOTIyNzI4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjQxMDE5MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIixcbiAgICBcImJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBsaW5rIHVwZGF0ZSB2YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0IHNlcGFyYXRlcyBwZXJtaXNzaW9uIGNoZWNrcyBmb3IgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKSwgYWRkcyBhdHRhY2gtdHlwZSB2YWxpZGF0aW9uIGZvciBCUEZfUFJPR19UWVBFX0xTTSBwcm9ncmFtcywgYW5kIGVuZm9yY2VzIGF0dGFjaC10eXBlIGNvbXBhdGliaWxpdHkgY2hlY2tpbmcgb24gdGhlIHJlcGxhY2VtZW50IHByb2dyYW0gZHVyaW5nIGJwZl9saW5rIHVwZGF0ZSAobGlua191cGRhdGUpLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBtb2RpZnkgY29udHJvbC1mbG93IGFuZCB2YWxpZGF0aW9uIGxvZ2ljIHVzaW5nIGFscmVhZHktaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyAoYnBmX3Byb2cgYW5kIGJwZl9saW5rKS4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIG5vIGluZm8tbGVhayByaXNrcy4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMwLjcyOTIzMTkzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3MzY0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTRmZDliNjE1MDc3ZjI5NDc3Y2VkNzRjMTVmM2ZiZDYxODZlZDAzN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjI4OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCA2ODc0YmExNDI0YWYwLi4yYmNkM2YzYTJhNTU5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5AQCAtNDQ4MSwxNCArNDQ4MSw5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XFxuIFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcXG4rXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcXG4gXFx0XFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XFxuIFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxcbi1cXHRcXHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbi1cXHRcXHRcXHQvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci5cXG4tXFx0XFx0XFx0ICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXG4gXFx0XFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xcbiBcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBwdHlwZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTQ1NDIsNiArNDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXFxuK1xcdCAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxcbitcXHQgKi9cXG4rXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRyZXR1cm4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dGFjaF90eXBlKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbiBcXHRcXHRcXHRcXHRib29sIGNoZWNrX2F0eXBlKVxcbiB7XFxuQEAgLTQ2MDYsNyArNDYxNSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRpZiAoSVNfRVJSKHByb2cpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwcm9nKTtcXG4gXFxuLVxcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpKSB7XFxuK1xcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSkpIHtcXG4gXFx0XFx0YnBmX3Byb2dfcHV0KHByb2cpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01ODA1LDggKzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4gXFx0aWYgKElTX0VSUihwcm9nKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XFxuIFxcbi1cXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtNTk2OCw2ICs1OTc2LDEwIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG4rXFxuIFxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKVxcbiBcXHRcXHRyZXQgPSBsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7XFxuIFxcdGVsc2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcXG5pbmRleCAxNTA5M2E2OTUxMGViLi4zYjQzYzM0OTE3Y2NjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jXFxuQEAgLTEsNiArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiY2FwX2hlbHBlcnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNncm91cF9oZWxwZXJzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RfY2dyb3VwX2xpbmsuc2tlbC5oXFxcIlxcbkBAIC0yNCw3ICsyNSw3NyBAQCBpbnQgcGluZ19hbmRfY2hlY2soaW50IGV4cF9jYWxscywgaW50IGV4cF9hbHRfY2FsbHMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi12b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXFxuK3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfdXBkYXRlKHZvaWQpXFxuK3tcXG4rXFx0Y29uc3QgX191NjQgY2FwcyA9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIENBUF9ORVRfQURNSU4pIHwgKDFVTEwgXFx1MDAzY1xcdTAwM2MgQ0FQX1NZU19BRE1JTik7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XFxuK1xcdF9fdTY0IHNhdmVkX2NhcHMgPSAwO1xcbitcXHRpbnQgY2dfZmQgPSAtMSwgZXJyO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfY2dyb3VwX2xpbmtfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiY2dfaW5pdFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRjZ19mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChcXFwiL2Nncm91cF9saW5rX3VwZGF0ZVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjZ19mZCwgMCwgXFxcImNnX2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBqb2luX2Nncm91cChcXFwiL2Nncm91cF9saW5rX3VwZGF0ZVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJjZ19qb2luXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLVxcdTAwM2Vwcm9ncy5zZW5kbXNnNCwgY2dfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXFxcImF0dGFjaF9zZW5kbXNnNFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC1cXHUwMDNlcHJvZ3Muc2VuZG1zZzYpO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcXFwicmVqZWN0X3NlbmRtc2c2X3VwZGF0ZVxcXCIpO1xcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0bGluayA9IE5VTEw7XFxuK1xcbitcXHRlcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgXFx1MDAyNnNhdmVkX2NhcHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJkcm9wX2NhcHNfZm9yX2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XFxuK1xcdGlmICghQVNTRVJUX0VSUl9QVFIobGluaywgXFxcImF0dGFjaF93aXRob3V0X25ldF9hZG1pblxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XFxuK1xcdGxpbmsgPSBOVUxMO1xcbitcXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FUEVSTSwgXFxcImF0dGFjaF9lcnJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gY2FwX2VuYWJsZV9lZmZlY3RpdmUoc2F2ZWRfY2FwcyBcXHUwMDI2IGNhcHMsIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJyZXN0b3JlX2NhcHNfZm9yX2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYXR0YWNoX2VncmVzc1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgXFx1MDAyNnNhdmVkX2NhcHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJkcm9wX2NhcHNcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtXFx1MDAzZXByb2dzLmVncmVzc19hbHQpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwidXBkYXRlX3dpdGhvdXRfbmV0X2FkbWluXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRlcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzIFxcdTAwMjYgY2FwcywgTlVMTCk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJyZXN0b3JlX2NhcHNcXFwiKTtcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdGlmIChjZ19mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjZ19mZCk7XFxuK1xcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK1xcdHRlc3RfY2dyb3VwX2xpbmtfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHNrZWwgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKnBhdGg7XFxuQEAgLTI1MywzICszMjQsMTEgQEAgdm9pZCBzZXJpYWxfdGVzdF9jZ3JvdXBfbGluayh2b2lkKVxcbiBcXHR9XFxuIFxcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuIH1cXG4rXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcXG4re1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1cGRhdGVcXFwiKSlcXG4rXFx0XFx0dGVzdF9jZ3JvdXBfbGlua191cGRhdGUoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcXG5pbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuY1xcbkBAIC03NCw2ICs3NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpXFxuIFxcdGludCBiaW5kX3Byb2dfZmQgPSAtMTtcXG4gXFx0aW50IGJpbmRfbGlua19mZCA9IC0xO1xcbiBcXHRpbnQgY2xvbmVfcHJvZ19mZCA9IC0xO1xcbitcXHRpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTtcXG4gXFx0aW50IGVyciwgZmQsIHByaW87XFxuIFxcdHNvY2tsZW5fdCBzb2NrbGVuO1xcbiBcXG5AQCAtMTU2LDYgKzE1NywxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKVxcbiBcXHRBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBcXFwiYnBmX2xzbV9zb2NrZXRfYmluZFxcXCIpLCAxLCBcXFwicHJvZyBjb3VudFxcXCIpO1xcbiBcXHRBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBOVUxMKSwgNCwgXFxcInRvdGFsIHByb2cgY291bnRcXFwiKTtcXG4gXFxuK1xcdHNvY2tldF9saW5rX2ZkID1cXG4rXFx0XFx0YnBmX2xpbmtfY3JlYXRlKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5zb2NrZXRfZmlyc3QpLFxcbitcXHRcXHRcXHRcXHRjZ3JvdXBfZmQsIEJQRl9MU01fQ0dST1VQLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0Uoc29ja2V0X2xpbmtfZmQsIDAsIFxcXCJsaW5rIGNyZWF0ZSBzb2NrZXRfZmlyc3RcXFwiKSlcXG4rXFx0XFx0Z290byBkZXRhY2hfY2dyb3VwO1xcbitcXHRlcnIgPSBicGZfbGlua191cGRhdGUoc29ja2V0X2xpbmtfZmQsXFxuK1xcdFxcdFxcdCAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5zb2NrZXRfY3JlYXRlX2xzbSksXFxuK1xcdFxcdFxcdCAgICAgIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcXFwicmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGVcXFwiKTtcXG4rXFx0Y2xvc2Uoc29ja2V0X2xpbmtfZmQpO1xcbitcXG4gXFx0LyogQXR0YWNoIGFub3RoZXIgaW5zdGFuY2Ugb2YgYmluZCBwcm9ncmFtIHRvIGFub3RoZXIgY2dyb3VwLlxcbiBcXHQgKiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSByZXVzZSBvZiB0aGUgdHJhbXBvbGluZSBzaGltICh0d29cXG4gXFx0ICogcHJvZ3JhbXMgYXR0YWNoaW5nIHRvIHRoZSBzYW1lIGJ0Zl9pZCkuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXFxuaW5kZXggM2JmYTQ3OTEwNGJlOC4uMzA3Mjc5NDVjZWNjMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xcbkBAIC0yMTMsNiArMjEzLDEyIEBAIGludCBCUEZfUFJPRyhzb2NrZXRfZmlyc3QsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJsc20vc29ja2V0X2NyZWF0ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyhzb2NrZXRfY3JlYXRlX2xzbSwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwibHNtX2Nncm91cC9zb2NrZXRfY3JlYXRlXFxcIilcXG4gaW50IEJQRl9QUk9HKHNvY2tldF9zZWNvbmQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXFxuaW5kZXggNGZhYmE4OGU0NWE1YS4uMTA3NDI5NjM4ZjU0MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuY1xcbkBAIC0yMCw1ICsyMCwxNiBAQCBpbnQgZWdyZXNzX2FsdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1jaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rU0VDKFxcXCJjZ3JvdXAvc2VuZG1zZzRcXFwiKVxcbitpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbiBcXG4rU0VDKFxcXCJjZ3JvdXAvc2VuZG1zZzZcXFwiKVxcbitpbnQgc2VuZG1zZzYoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMxLjMwNzMzODQ5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTAzOTkxOTk1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImxpbmtfY3JlYXRlXCIsXG4gICAgXCJsaW5rX3VwZGF0ZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlXCIsXG4gICAgXCJicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBCUEYgc3lzY2FsbCBsb2dpYyBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYywgaW50cm9kdWNpbmcgYXR0YWNoIHR5cGUgdmVyaWZpY2F0aW9uIGZvciBsaW5rX3VwZGF0ZSwgY2hlY2tpbmcgTFNNIGV4cGVjdGVkIGF0dGFjaCB0eXBlcyBpbiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUsIGFuZCByZWZhY3RvcmluZyBjZ3JvdXAtc2tiIGNhcGFiaWxpdHkgY2hlY2tzIGludG8gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0uIFRoZXNlIGVudHJ5cG9pbnRzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoMikgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGZkOWI2MTUwNzdmMjk0NzdjZWQ3NGMxNWYzZmJkNjE4NmVkMDM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjoyODoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjJiY2QzZjNhMmE1NTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC00NDgxLDE0ICs0NDgxLDkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuK1x0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcbiBcdFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOlxuLVx0XHRpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbi1cdFx0XHQvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci5cbi1cdFx0XHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVxuIFx0XHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XG4gXHRcdGlmIChwcm9nLVx1MDAzZXR5cGUgIT0gcHR5cGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNDU0Miw2ICs0NTM3LDIwIEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbit7XG4rXHQvKlxuK1x0ICogQ0dST1VQX1NLQiBwcm9ncmFtcyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdmlsZWdlZCB1c2Vycywgc28gY2hlY2tcbitcdCAqIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuK1x0ICovXG4rXHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbiBcdFx0XHRcdGJvb2wgY2hlY2tfYXR5cGUpXG4ge1xuQEAgLTQ2MDYsNyArNDYxNSw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpKSB7XG4rXHRpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSkpIHtcbiBcdFx0YnBmX3Byb2dfcHV0KHByb2cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC01ODA1LDggKzU4MTQsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csXG4tXHRcdFx0XHRcdFx0YXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU5NjgsNiArNTk3NiwxMCBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4gXHR9XG4gXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstXHUwMDNlYXR0YWNoX3R5cGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuK1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jXG5pbmRleCAxNTA5M2E2OTUxMGViLi4zYjQzYzM0OTE3Y2NjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuQEAgLTEsNiArMSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcImNhcF9oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwiY2dyb3VwX2hlbHBlcnMuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X2Nncm91cF9saW5rLnNrZWwuaFwiXG5AQCAtMjQsNyArMjUsNzcgQEAgaW50IHBpbmdfYW5kX2NoZWNrKGludCBleHBfY2FsbHMsIGludCBleHBfYWx0X2NhbGxzKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbitzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSh2b2lkKVxuK3tcbitcdGNvbnN0IF9fdTY0IGNhcHMgPSAoMVVMTCBcdTAwM2NcdTAwM2MgQ0FQX05FVF9BRE1JTikgfCAoMVVMTCBcdTAwM2NcdTAwM2MgQ0FQX1NZU19BRE1JTik7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuK1x0X191NjQgc2F2ZWRfY2FwcyA9IDA7XG4rXHRpbnQgY2dfZmQgPSAtMSwgZXJyO1xuK1xuK1x0c2tlbCA9IHRlc3RfY2dyb3VwX2xpbmtfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJjZ19pbml0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjZ19mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChcIi9jZ3JvdXBfbGlua191cGRhdGVcIik7XG4rXHRpZiAoIUFTU0VSVF9HRShjZ19mZCwgMCwgXCJjZ19jcmVhdGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGpvaW5fY2dyb3VwKFwiL2Nncm91cF9saW5rX3VwZGF0ZVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJjZ19qb2luXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5zZW5kbXNnNCwgY2dfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwiYXR0YWNoX3NlbmRtc2c0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC1cdTAwM2Vwcm9ncy5zZW5kbXNnNik7XG4rXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcInJlamVjdF9zZW5kbXNnNl91cGRhdGVcIik7XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGxpbmsgPSBOVUxMO1xuK1xuK1x0ZXJyID0gY2FwX2Rpc2FibGVfZWZmZWN0aXZlKGNhcHMsIFx1MDAyNnNhdmVkX2NhcHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImRyb3BfY2Fwc19mb3JfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbitcdGlmICghQVNTRVJUX0VSUl9QVFIobGluaywgXCJhdHRhY2hfd2l0aG91dF9uZXRfYWRtaW5cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XG4rXHRsaW5rID0gTlVMTDtcbitcdGlmICghQVNTRVJUX0VRKGVyciwgLUVQRVJNLCBcImF0dGFjaF9lcnJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInJlc3RvcmVfY2Fwc19mb3JfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNnX2ZkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImF0dGFjaF9lZ3Jlc3NcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCBcdTAwMjZzYXZlZF9jYXBzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJkcm9wX2NhcHNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGJwZl9saW5rX191cGRhdGVfcHJvZ3JhbShsaW5rLCBza2VsLVx1MDAzZXByb2dzLmVncmVzc19hbHQpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJ1cGRhdGVfd2l0aG91dF9uZXRfYWRtaW5cIik7XG4rXG4rY2xlYW51cDpcbitcdGVyciA9IGNhcF9lbmFibGVfZWZmZWN0aXZlKHNhdmVkX2NhcHMgXHUwMDI2IGNhcHMsIE5VTEwpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJyZXN0b3JlX2NhcHNcIik7XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGlmIChjZ19mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNnX2ZkKTtcbitcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rXHR0ZXN0X2Nncm91cF9saW5rX19kZXN0cm95KHNrZWwpO1xuK1x0c2tlbCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKHZvaWQpXG4ge1xuIFx0c3RydWN0IHtcbiBcdFx0Y29uc3QgY2hhciAqcGF0aDtcbkBAIC0yNTMsMyArMzI0LDExIEBAIHZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbiBcdH1cbiBcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4gfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfY2dyb3VwX2xpbmsodm9pZClcbit7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImF0dGFjaFwiKSlcbitcdFx0dGVzdF9jZ3JvdXBfbGlua19hdHRhY2goKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidXBkYXRlXCIpKVxuK1x0XHR0ZXN0X2Nncm91cF9saW5rX3VwZGF0ZSgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbmluZGV4IDQxZTg2NzQ2N2Y2YzYuLjBkZDQ0ZGJiOWM5NWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9jZ3JvdXAuY1xuQEAgLTc0LDYgKzc0LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZClcbiBcdGludCBiaW5kX3Byb2dfZmQgPSAtMTtcbiBcdGludCBiaW5kX2xpbmtfZmQgPSAtMTtcbiBcdGludCBjbG9uZV9wcm9nX2ZkID0gLTE7XG4rXHRpbnQgc29ja2V0X2xpbmtfZmQgPSAtMTtcbiBcdGludCBlcnIsIGZkLCBwcmlvO1xuIFx0c29ja2xlbl90IHNvY2tsZW47XG4gXG5AQCAtMTU2LDYgKzE1NywxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2xzbV9jZ3JvdXBfZnVuY3Rpb25hbCh2b2lkKVxuIFx0QVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgXCJicGZfbHNtX3NvY2tldF9iaW5kXCIpLCAxLCBcInByb2cgY291bnRcIik7XG4gXHRBU1NFUlRfRVEocXVlcnlfcHJvZ19jbnQoY2dyb3VwX2ZkLCBOVUxMKSwgNCwgXCJ0b3RhbCBwcm9nIGNvdW50XCIpO1xuIFxuK1x0c29ja2V0X2xpbmtfZmQgPVxuK1x0XHRicGZfbGlua19jcmVhdGUoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc29ja2V0X2ZpcnN0KSxcbitcdFx0XHRcdGNncm91cF9mZCwgQlBGX0xTTV9DR1JPVVAsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0Uoc29ja2V0X2xpbmtfZmQsIDAsIFwibGluayBjcmVhdGUgc29ja2V0X2ZpcnN0XCIpKVxuK1x0XHRnb3RvIGRldGFjaF9jZ3JvdXA7XG4rXHRlcnIgPSBicGZfbGlua191cGRhdGUoc29ja2V0X2xpbmtfZmQsXG4rXHRcdFx0ICAgICAgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc29ja2V0X2NyZWF0ZV9sc20pLFxuK1x0XHRcdCAgICAgIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCJyZWplY3QgbHNtX21hYyBsaW5rIHVwZGF0ZVwiKTtcbitcdGNsb3NlKHNvY2tldF9saW5rX2ZkKTtcbitcbiBcdC8qIEF0dGFjaCBhbm90aGVyIGluc3RhbmNlIG9mIGJpbmQgcHJvZ3JhbSB0byBhbm90aGVyIGNncm91cC5cbiBcdCAqIFRoaXMgc2hvdWxkIHRyaWdnZXIgdGhlIHJldXNlIG9mIHRoZSB0cmFtcG9saW5lIHNoaW0gKHR3b1xuIFx0ICogcHJvZ3JhbXMgYXR0YWNoaW5nIHRvIHRoZSBzYW1lIGJ0Zl9pZCkuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmNcbmluZGV4IDNiZmE0NzkxMDRiZTguLjMwNzI3OTQ1Y2VjYzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG5AQCAtMjEzLDYgKzIxMywxMiBAQCBpbnQgQlBGX1BST0coc29ja2V0X2ZpcnN0LCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJsc20vc29ja2V0X2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyhzb2NrZXRfY3JlYXRlX2xzbSwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcImxzbV9jZ3JvdXAvc29ja2V0X2NyZWF0ZVwiKVxuIGludCBCUEZfUFJPRyhzb2NrZXRfc2Vjb25kLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2VybilcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmNcbmluZGV4IDRmYWJhODhlNDVhNWEuLjEwNzQyOTYzOGY1NDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG5AQCAtMjAsNSArMjAsMTYgQEAgaW50IGVncmVzc19hbHQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitTRUMoXCJjZ3JvdXAvc2VuZG1zZzRcIilcbitpbnQgc2VuZG1zZzQoc3RydWN0IGJwZl9zb2NrX2FkZHIgKmN0eClcbit7XG4rXHRyZXR1cm4gMTtcbit9XG4gXG4rU0VDKFwiY2dyb3VwL3NlbmRtc2c2XCIpXG4raW50IHNlbmRtc2c2KHN0cnVjdCBicGZfc29ja19hZGRyICpjdHgpXG4re1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjMxLjMwNzMzOTkwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1NTc0ODM2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2ggYW5kIERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSBsaXZlcy4gSSBzZWUgdGhleSd2ZSBtYWRlIHNvbWUgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGF0dGFjaG1lbnQgYW5kIHBlcm1pc3Npb25zIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXnigJl2ZSBpbnRyb2R1Y2VkIGEgbmV3IGNhc2UgZm9yIGBCUEZfUFJPR19UWVBFX0xTTWAgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCB3aGljaCBub3cgZXhwbGljaXRseSB2ZXJpZmllcyB0aGUgZXhwZWN0ZWQgYXR0YWNobWVudCB0eXBlLiBUaGF0J3MgZ29vZCwgZ3JhbnVsYXIgY29udHJvbC4gVGhlIHJlbW92YWwgb2YgdGhlIGNhcGFiaWxpdHkgY2hlY2sgZnJvbSB0aGUgYENHUk9VUF9TS0JgIHR5cGUgaW4gdGhlIHNhbWUgZnVuY3Rpb24gY2F1Z2h0IG15IGV5ZSDigJMgdGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIGlzIHRoZSByZXBsYWNlbWVudCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuRGlnZ2luZyBpbnRvIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAsIGl0IGNsZWFybHkgaGFuZGxlcyB0aGUgcGVybWlzc2lvbnMgZm9yIGBDR1JPVVBfU0tCYCB0eXBlcyBieSBjaGVja2luZyBmb3IgdGhlIGBDQVBfTkVUX0FETUlOYCBjYXBhYmlsaXR5LiBJdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLiBUaGF0J3MgYSByZWFzb25hYmxlIHJlZmFjdG9yaW5nIHRvIHNlcGFyYXRlIHBlcm1pc3Npb24gbG9naWMgZnJvbSB0eXBlIHZlcmlmaWNhdGlvbiwgYnV0IGl0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBhdHRhY2htZW50IGxvZ2ljIGFuZCByZXF1aXJlcyBkZWVwZXIgc2NydXRpbnkuIFRoZSBmYWN0IHRoYXQgYGJwZl9wcm9nX2F0dGFjaGAgYW5kIGBsaW5rX2NyZWF0ZWAgbm93IHVzZSBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGhpZ2hsaWdodHMgdGhpcy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBuZXcgY2hlY2sgaW4gYGxpbmtfdXBkYXRlYCBpcyBpbXBvcnRhbnQsIHRvby5cblxuVGhlIHByZXNlbmNlIG9mIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAgZm9yIGNncm91cCBsaW5rIHVwZGF0ZXMgYW5kIExTTSBjZ3JvdXAgbGluayB1cGRhdGVzIGlzIGhlbHBmdWwsIGFzIHRoZXNlIHRlc3RzIHNob3VsZCBwcm92aWRlIHNvbWUgYmFzaWMgY292ZXJhZ2UuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBYnNvbHV0ZWx5ISBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBjb250YWlucyB0aGUgYGJwZigyKWAgc3lzY2FsbCBoYW5kbGVycyDigJMgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGBsaW5rX3VwZGF0ZWAsIGFuZCB0aGUgYWxsLWltcG9ydGFudCBjaGVjayBmdW5jdGlvbnMuIEdpdmVuIHRoZSBCUEYgc3lzY2FsbCBpcyBmdW5kYW1lbnRhbCwgdGhpcyBpcyByZWFkaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBCUEYgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfQVRUQUNIYCwgYEJQRl9MSU5LX0NSRUFURWAsIGFuZCBgQlBGX0xJTktfVVBEQVRFYC5cblxuTmV4dCwgaXMgdGhpcyBwYXRjaCBcIldvcnRoRnV6emluZ1wiPyBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjcml0ZXJpYSBmb3Igd29ydGhpbmVzcywgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBBY2NvcmRpbmcgdG8gdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjcml0ZXJpYSwgYW55IGNoYW5nZXMgdG8gdGhlIEJQRiBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgYXJvdW5kIHN5c2NhbGwgaGFuZGxpbmcgYW5kIHBlcm1pc3Npb24gY2hlY2tzLCB3YXJyYW50IHRob3JvdWdoIGZ1enppbmcuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBwZXJtaXNzaW9uIGNoZWNrIGxvZ2ljIGZvciBsaW5rIGNyZWF0aW9uLCBsaW5rIHVwZGF0aW5nLCBhbmQgYXR0YWNobWVudCwgYW5kIGFkZHMgbmV3IHR5cGUgdmVyaWZpY2F0aW9uIGluIGBsaW5rX3VwZGF0ZWAsIGFzIHdlbGwgYXMgY2hlY2tzIGZvciBMU00gcHJvZ3JhbSBhdHRhY2ggdHlwZS4gVGhlc2UgbW9kaWZpY2F0aW9ucyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBpcyBkaXJlY3RseSBleHBvc2VkIHZpYSB0aGUgQlBGIHN5c2NhbGwgaW50ZXJmYWNlLCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGlkZW50aWZ5IGFueSByZWxldmFudCBDT05GSUcgcmVxdWlyZW1lbnRzIGZvciB0aGUgY29kZSwgdG8gZW5zdXJlIGZ1enppbmcgaXMgY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5LiBJJ2xsIHNlYXJjaCBmb3IgdGhlIENPTkZJR3MgcmVxdWlyZWQgZm9yIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX1RZUEVfTFNNYCBhbmQgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIHByb2Nlc3MgaXMgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjM3Ljg2NDgyNjIwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI3NzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfS0VZUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga2V5cy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zNj1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzgtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQyLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQ2PWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00OS0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjMtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTY0PW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY1LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS03MC1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjcxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNzItZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXFxua2VybmVsL2JwZi9jb3JlLmM6MTQ0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDUtXFx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjQ3Mz1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDc3OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc4LWludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzA0MT12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDQyLXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDQzOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDQ0LVxcdHN0cnVjdCBidGZfbW9kX3BhaXIgKmJ0Zl9tb2Q7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDYyPXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2Ny1cXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XFxua2VybmVsL2JwZi9jb3JlLmM6MzA2ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzA2OS1cXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cXHUwMDNla2Z1bmNfYnRmX3RhYik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzk0PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzk1LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMzk2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzk3LVxcdHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlIHNzO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQzND1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MzgtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQzOTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ0MC1fX3dlYWsgYm9vbCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGlzX3dyaXRlLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQ2NT1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDY2LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0Njc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0NjgtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTE0PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyMS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTIyOiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTIzLVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTc2OT12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODA2LVxcdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTgwNzpcXHQgIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjM3LjkxMzEwOTAxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjI4Mzg5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgQlBGIFN5c2NhbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uIGJldHRlci4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBMZXQncyB6ZXJvIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIHNlY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIEZpcnN0LCBJJ2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgbGluZXMgNDQ4MCB0aHJvdWdoIDQ2MjAuIFRoaXMgY2h1bmsgcHJvYmFibHkgZGVhbHMgd2l0aCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgc3lzY2FsbCBoYW5kbGluZywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBvciBwZXJoYXBzIGEgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgdmFsaWRhdGlvbiBzdGFnZS4gVGhlbiwgSSB3aWxsIG1vdmUgb24gYW5kIHNjcnV0aW5pemUgbGluZXMgNTgwMC02MDAwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgaGFuZGxpbmcgYSBkaWZmZXJlbnQgZnVuY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSBvciBhIGNyaXRpY2FsIGxvb3AuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgYmVmb3JlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBmbG93cyBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGluIHRoZXNlIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBhIHBhcnRpY3VsYXIgcGFydCBvZiB0aGlzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjQxLjI3NTk0OTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NzUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0NzU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG40NDc2OlxcdHtcXG40NDc3OlxcdFxcdGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZTtcXG40NDc4OlxcdFxcbjQ0Nzk6XFx0XFx0c3dpdGNoIChwcm9nLVxcdTAwM2V0eXBlKSB7XFxuNDQ4MDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0s6XFxuNDQ4MTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUjpcXG40NDgyOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcXG40NDgzOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XFxuNDQ4NDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbjQ0ODU6XFx0XFx0XFx0cmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XFxuNDQ4NjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcXG40NDg3OlxcdFxcdFxcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcXG40NDg4OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IHB0eXBlKVxcbjQ0ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDQ5MDpcXHRcXG40NDkxOlxcdFxcdFxcdHJldHVybiBwcm9nLVxcdTAwM2VlbmZvcmNlX2V4cGVjdGVkX2F0dGFjaF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuNDQ5MjpcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHRhY2hfdHlwZSA/XFxuNDQ5MzpcXHRcXHRcXHRcXHQtRUlOVkFMIDogMDtcXG40NDk0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XFxuNDQ5NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NDk2OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9ORVRGSUxURVI6XFxuNDQ5NzpcXHRcXHRcXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX05FVEZJTFRFUilcXG40NDk4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0OTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDUwMDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcXG40NTAxOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxcbjQ1MDI6XFx0XFx0XFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9QRVJGX0VWRU5UKVxcbjQ1MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUwNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NTA1OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9LUFJPQkU6XFxuNDUwNjpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcXHUwMDI2XFx1MDAyNlxcbjQ1MDc6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkpXFxuNDUwODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTA5OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfS1BST0JFX1NFU1NJT04gXFx1MDAyNlxcdTAwMjZcXG40NTEwOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX1NFU1NJT04pXFxuNDUxMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTEyOlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfVVBST0JFX01VTFRJIFxcdTAwMjZcXHUwMDI2XFxuNDUxMzpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSlcXG40NTE0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MTU6XFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTiBcXHUwMDI2XFx1MDAyNlxcbjQ1MTY6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfU0VTU0lPTilcXG40NTE3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MTg6XFx0XFx0XFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9QRVJGX0VWRU5UIFxcdTAwMjZcXHUwMDI2XFxuNDUxOTpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9NVUxUSSBcXHUwMDI2XFx1MDAyNlxcbjQ1MjA6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfU0VTU0lPTiBcXHUwMDI2XFx1MDAyNlxcbjQ1MjE6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkgXFx1MDAyNlxcdTAwMjZcXG40NTIyOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04pXFxuNDUyMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTI0OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1MjU6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcXG40NTI2OlxcdFxcdFxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfVENYX0lOR1JFU1MgXFx1MDAyNlxcdTAwMjZcXG40NTI3OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVENYX0VHUkVTUyBcXHUwMDI2XFx1MDAyNlxcbjQ1Mjg6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9ORVRLSVRfUFJJTUFSWSBcXHUwMDI2XFx1MDAyNlxcbjQ1Mjk6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9ORVRLSVRfUEVFUilcXG40NTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDUzMjpcXHRcXHRkZWZhdWx0OlxcbjQ1MzM6XFx0XFx0XFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xcbjQ1MzQ6XFx0XFx0XFx0aWYgKHB0eXBlID09IEJQRl9QUk9HX1RZUEVfVU5TUEVDIHx8IHB0eXBlICE9IHByb2ctXFx1MDAzZXR5cGUpXFxuNDUzNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTM2OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1Mzc6XFx0XFx0fVxcbjQ1Mzg6XFx0fVxcbjQ1Mzk6XFx0XFxuNDU0MDpcXHRzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG40NTQxOlxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbjQ1NDI6XFx0e1xcbjQ1NDM6XFx0XFx0LypcXG40NTQ0OlxcdFxcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXFxuNDU0NTpcXHRcXHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cXG40NTQ2OlxcdFxcdCAqL1xcbjQ1NDc6XFx0XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIFxcdTAwMjZcXHUwMDI2XFxuNDU0ODpcXHRcXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbjQ1NDk6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG40NTUwOlxcdFxcbjQ1NTE6XFx0XFx0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XFxuNDU1MjpcXHR9XFxuNDU1MzpcXHRcXG40NTU0OlxcdHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjg6NDEuMjc2MjExOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ5MTI3Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRoaXMgaW5mb3JtYXRpb246XG5cbioqQW5hbHl6aW5nIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgLSBMaW5lcyA1ODAwLTYwMDAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU4MDAgdG8gNjAwMC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGRlZmluZWQgb3IgY2FsbGVkIGluIHRoaXMgc2VjdGlvbiBvZiB0aGUgQlBGIHN5c2NhbGwgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBsaW5lIHJhbmdlLCBpdCdzIHByb2JhYmx5IGhhbmRsaW5nIGEgc3BlY2lmaWMgQlBGIHN5c3RlbSBjYWxsIG9yIGEgc2VnbWVudCBvZiBhIGxhcmdlciBzeXN0ZW0gY2FsbCdzIGV4ZWN1dGlvbiBwYXRoLlxuXG5NeSBmaXJzdCBndWVzcyBpcyB0aGF0IHdlIGFyZSBpbiB0aGUgY29udGV4dCBvZiBhbiBhY3R1YWwgQlBGIHByb2dyYW0uIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBwcm9jZXNzaW5nIG9mIHNvbWUgQlBGIHN5c3RlbSBjYWxsLiBJJ20gbWVudGFsbHkgY2hlY2tpbmcgd2hhdCBjYWxscyBhcmUgaW4gdGhlIHN5c3RlbSBjYWxscyBsaWtlIGBicGZfcHJvZ19sb2FkYCBvciBgYnBmX3Byb2dfYXR0YWNoYC4gSXMgaXQgdmFsaWRhdGlvbj8gU2VjdXJpdHkgY2hlY2tzPyBSZXNvdXJjZSBhY2NvdW50aW5nPyBPciBtYXliZSBpdCBpcyBzb21lIHNvcnQgb2YgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgZXZlbiBiZSByZWxhdGVkIHRvIHRoZSB0cmFjaW5nIEFQSSwgZ2l2ZW4gd2hlcmUgd2UgYXJlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGBzeXNjYWxsLmNgLiBXaGVyZSBpbiB0aGUgZmxvdyBkb2VzIHRoaXMgZmFsbD8gV2hhdCBvdGhlciBmdW5jdGlvbnMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJJ20gYW50aWNpcGF0aW5nIHBvc3NpYmx5IHNlZWluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGVyLCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgc3BlY2lmaWMgQlBGIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMg4oCTIHRob3NlIGFyZSBhbHdheXMgYSBjb25jZXJuIGluIHRoaXMgYXJlYS4gUGVyaGFwcyB0aGVyZSdzIGFuIGludGVyZXN0aW5nIGhvb2sgcG9pbnQgb3IgYSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbiBoYXBwZW5pbmcgaGVyZSB0aGF0IGlzIHdvcnRoIG5vdGluZy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjg6NDcuMTI1MzQyMzE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MDUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4MDU6XFx0XFx0aW50IHJldDtcXG41ODA2OlxcdFxcbjU4MDc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX0xJTktfQ1JFQVRFKSlcXG41ODA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU4MDk6XFx0XFxuNTgxMDpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgPT0gQlBGX1NUUlVDVF9PUFMpXFxuNTgxMTpcXHRcXHRcXHRyZXR1cm4gYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUoYXR0cik7XFxuNTgxMjpcXHRcXG41ODEzOlxcdFxcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUucHJvZ19mZCk7XFxuNTgxNDpcXHRcXHRpZiAoSVNfRVJSKHByb2cpKVxcbjU4MTU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XFxuNTgxNjpcXHRcXG41ODE3OlxcdFxcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG41ODE4OlxcdFxcdGlmIChyZXQpXFxuNTgxOTpcXHRcXHRcXHRnb3RvIG91dDtcXG41ODIwOlxcdFxcbjU4MjE6XFx0XFx0c3dpdGNoIChwcm9nLVxcdTAwM2V0eXBlKSB7XFxuNTgyMjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcXG41ODIzOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSzpcXG41ODI0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxcbjU4MjU6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NPQ0tfT1BTOlxcbjU4MjY6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9ERVZJQ0U6XFxuNTgyNzpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NZU0NUTDpcXG41ODI4OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS09QVDpcXG41ODI5OlxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxuNTgzMDpcXHRcXHRcXHRicmVhaztcXG41ODMxOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XFxuNTgzMjpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxcbjU4MzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudGFyZ2V0X2ZkLFxcbjU4MzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudGFyZ2V0X2J0Zl9pZCxcXG41ODM1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmcuY29va2llLFxcbjU4MzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbjU4Mzc6XFx0XFx0XFx0YnJlYWs7XFxuNTgzODpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFNNOlxcbjU4Mzk6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1RSQUNJTkc6XFxuNTg0MDpcXHRcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUgIT0gcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpIHtcXG41ODQxOlxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuNTg0MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG41ODQzOlxcdFxcdFxcdH1cXG41ODQ0OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfUkFXX1RQKVxcbjU4NDU6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3Jhd190cF9saW5rX2F0dGFjaChwcm9nLCBOVUxMLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nLmNvb2tpZSxcXG41ODQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbjU4NDc6XFx0XFx0XFx0ZWxzZSBpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0lURVIpXFxuNTg0ODpcXHRcXHRcXHRcXHRyZXQgPSBicGZfaXRlcl9saW5rX2F0dGFjaChhdHRyLCB1YXR0ciwgcHJvZyk7XFxuNTg0OTpcXHRcXHRcXHRlbHNlIGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfTFNNX0NHUk9VUClcXG41ODUwOlxcdFxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxuNTg1MTpcXHRcXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG41ODUyOlxcdFxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcXG41ODUzOlxcdFxcdFxcdGVsc2VcXG41ODU0OlxcdFxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHByb2csXFxuNTg1NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQsXFxuNTg1NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfYnRmX2lkLFxcbjU4NTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZy5jb29raWUsXFxuNTg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuNTg1OTpcXHRcXHRcXHRicmVhaztcXG41ODYwOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcXG41ODYxOlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XFxuNTg2MjpcXHRcXHRcXHRyZXQgPSBuZXRuc19icGZfbGlua19jcmVhdGUoYXR0ciwgcHJvZyk7XFxuNTg2MzpcXHRcXHRcXHRicmVhaztcXG41ODY0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XFxuNTg2NTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfU0tCOlxcbjU4NjY6XFx0XFx0XFx0cmV0ID0gc29ja19tYXBfbGlua19jcmVhdGUoYXR0ciwgcHJvZyk7XFxuNTg2NzpcXHRcXHRcXHRicmVhaztcXG41ODY4OlxcdCNpZmRlZiBDT05GSUdfTkVUXFxuNTg2OTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfWERQOlxcbjU4NzA6XFx0XFx0XFx0cmV0ID0gYnBmX3hkcF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODcxOlxcdFxcdFxcdGJyZWFrO1xcbjU4NzI6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcXG41ODczOlxcdFxcdFxcdGlmIChhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSA9PSBCUEZfVENYX0lOR1JFU1MgfHxcXG41ODc0OlxcdFxcdFxcdCAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSA9PSBCUEZfVENYX0VHUkVTUylcXG41ODc1OlxcdFxcdFxcdFxcdHJldCA9IHRjeF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODc2OlxcdFxcdFxcdGVsc2VcXG41ODc3OlxcdFxcdFxcdFxcdHJldCA9IG5ldGtpdF9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODc4OlxcdFxcdFxcdGJyZWFrO1xcbjU4Nzk6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX05FVEZJTFRFUjpcXG41ODgwOlxcdFxcdFxcdHJldCA9IGJwZl9uZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG41ODgxOlxcdFxcdFxcdGJyZWFrO1xcbjU4ODI6XFx0I2VuZGlmXFxuNTg4MzpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVDpcXG41ODg0OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDRVBPSU5UOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyODo0Ny4xMjU1NzU0MzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ0MDc4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXM6XG5cbioqQW5hbHl6aW5nIGBsaW5rX3VwZGF0ZWAgQXJvdW5kIExpbmUgNTk1MC02MDAwKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGxpbmtfdXBkYXRlYCBiZXR3ZWVuIGxpbmVzIDU5NTAgYW5kIDYwMDAuIENvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN5c3RlbXMsIHRoaXMgaXMgbGlrZWx5IGEgY3J1Y2lhbCBzZWN0aW9uLiBJJ20gZ3Vlc3NpbmcgaXQncyBoYW5kbGluZyBhIHNwZWNpZmljIHVwZGF0ZSByZWxhdGVkIHRvIGxpbmtpbmcsIHdoaWNoIGNvdWxkIG1lYW4gYW55dGhpbmcgZnJvbSBncmFwaCB0cmF2ZXJzYWxzIHRvIHJlc291cmNlIGFzc2lnbm1lbnRzLCBvciBtYXliZSBldmVuIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiB3aXRoaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBsaW5lIG51bWJlcnMgY2FuIGJlIGltcHJlY2lzZSB3aXRob3V0IHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZmlsZSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIGltbWVkaWF0ZWx5IGFyb3VuZCB0aGF0IHJhbmdlIHRvIGdldCB0aGUgYmVzdCBmZWVsIGZvciB0aGUgaW50ZW50LiBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGNvbXBsZXggaW50ZXJwbGF5IG9mIGRhdGEgc3RydWN0dXJlcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHRoZSBpZGVudGlmaWNhdGlvbiBvZiB0aGUgc3BlY2lmaWMgbGluaywgdGhlIHZhbGlkYXRpb24gb2YgaXRzIHByb3BlcnRpZXMsIGFuZCB0aGUgY2FzY2FkaW5nIGVmZmVjdHMgb2YgdGhhdCB1cGRhdGUgb24gZGVwZW5kZW50IGNvbXBvbmVudHMuIEtub3dpbmcgaG93IHRob3JvdWdobHkgdGhlIGRldmVsb3BlcnMgdGhvdWdodCB0aHJvdWdoIHRob3NlIGVkZ2UgY2FzZXMgd2lsbCBwcm92aWRlIGEgcXVpY2sgc2Vuc2Ugb2YgdGhlIGNvZGUncyBtYXR1cml0eS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHNwb3QgdGhlIGhpZ2gtbGV2ZWwgbG9naWMgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIGJlIHN1YmplY3QgdG8gYSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyODo0OS40Njk2NTYzODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTk1MTpcXHRcXG41OTUyOlxcdFxcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcXG41OTUzOlxcdFxcdGlmIChJU19FUlIobGluaykpXFxuNTk1NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcXG41OTU1OlxcdFxcbjU5NTY6XFx0XFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX21hcCkge1xcbjU5NTc6XFx0XFx0XFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xcbjU5NTg6XFx0XFx0XFx0Z290byBvdXRfcHV0X2xpbms7XFxuNTk1OTpcXHRcXHR9XFxuNTk2MDpcXHRcXG41OTYxOlxcdFxcdG5ld19wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcXG41OTYyOlxcdFxcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XFxuNTk2MzpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG5ld19wcm9nKTtcXG41OTY0OlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9saW5rO1xcbjU5NjU6XFx0XFx0fVxcbjU5NjY6XFx0XFxuNTk2NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxuNTk2ODpcXHRcXHRcXHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCk7XFxuNTk2OTpcXHRcXHRcXHRpZiAoSVNfRVJSKG9sZF9wcm9nKSkge1xcbjU5NzA6XFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihvbGRfcHJvZyk7XFxuNTk3MTpcXHRcXHRcXHRcXHRvbGRfcHJvZyA9IE5VTEw7XFxuNTk3MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfcHJvZ3M7XFxuNTk3MzpcXHRcXHRcXHR9XFxuNTk3NDpcXHRcXHR9IGVsc2UgaWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XFxuNTk3NTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjU5NzY6XFx0XFx0XFx0Z290byBvdXRfcHV0X3Byb2dzO1xcbjU5Nzc6XFx0XFx0fVxcbjU5Nzg6XFx0XFxuNTk3OTpcXHRcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csIGxpbmstXFx1MDAzZWF0dGFjaF90eXBlKTtcXG41OTgwOlxcdFxcdGlmIChyZXQpXFxuNTk4MTpcXHRcXHRcXHRnb3RvIG91dF9wdXRfcHJvZ3M7XFxuNTk4MjpcXHRcXG41OTgzOlxcdFxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKVxcbjU5ODQ6XFx0XFx0XFx0cmV0ID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xcbjU5ODU6XFx0XFx0ZWxzZVxcbjU5ODY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG41OTg3OlxcdFxcbjU5ODg6XFx0b3V0X3B1dF9wcm9nczpcXG41OTg5OlxcdFxcdGlmIChvbGRfcHJvZylcXG41OTkwOlxcdFxcdFxcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XFxuNTk5MTpcXHRcXHRpZiAocmV0KVxcbjU5OTI6XFx0XFx0XFx0YnBmX3Byb2dfcHV0KG5ld19wcm9nKTtcXG41OTkzOlxcdG91dF9wdXRfbGluazpcXG41OTk0OlxcdFxcdGJwZl9saW5rX3B1dF9kaXJlY3QobGluayk7XFxuNTk5NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjU5OTY6XFx0fVxcbjU5OTc6XFx0XFxuNTk5ODpcXHQjZGVmaW5lIEJQRl9MSU5LX0RFVEFDSF9MQVNUX0ZJRUxEIGxpbmtfZGV0YWNoLmxpbmtfZmRcXG41OTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyODo0OS40Njk4ODQ5NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc0ODQ0NzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcsIHNwZWNpZmljYWxseSBob3cgaXQgYWZmZWN0cyBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGFuZCBsaW5raW5nLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgZGlyZWN0bHkgY2FsbGVkIGBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZ2Agd2l0aG91dCBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBjaGVjazogYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay1cdTAwM2VhdHRhY2hfdHlwZSlgLiBOb3csIHRoYXQgY2hlY2sgaXMgYmVpbmcgZG9uZSAqYmVmb3JlKiB0aGUgdXBkYXRlLCB3aGljaCBpcyBnb29kLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBpcyBkb2luZy4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyB0aGUgY29tcGF0aWJpbGl0eSBvZiBhIHByb2dyYW0ncyB0eXBlIHdpdGggdGhlIGF0dGFjaG1lbnQgdHlwZS4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIGNyaXRpY2FsIG92ZXJzaWdodCwgbmFtZWx5IHRoYXQgaXQgZGlkbid0IGhhbmRsZSBgQlBGX1BST0dfVFlQRV9MU01gIGNvcnJlY3RseS4gSXQgYXBwZWFycyB0aGF0IHdoZW4gZGVhbGluZyB3aXRoIGBCUEZfUFJPR19UWVBFX0xTTWAgYW5kIGBCUEZfTFNNX0NHUk9VUGAgdGhlIGNoZWNrIHdvdWxkIHBhc3MgZXZlbiB3aGVuIHRoZSBwcm9ncmFtJ3MgKmV4cGVjdGVkKiBhdHRhY2ggdHlwZSBkaWRuJ3QgbWF0Y2ggdGhlIG9uZSBiZWluZyB1c2VkLCB3aGljaCBpcyBhIG1ham9yIHNlY3VyaXR5IGZsYXcuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYGNhc2UgQlBGX1BST0dfVFlQRV9MU01gIGFkZHJlc3NlcyB0aGlzIHZ1bG5lcmFiaWxpdHksIGVuc3VyaW5nIHRoZSBgZXhwZWN0ZWRfYXR0YWNoX3R5cGVgIGFsaWducyB3aXRoIHRoZSBhY3R1YWwgYGF0dGFjaF90eXBlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNvdW5kLlxuXG5UaGUgdGhpcmQgY2hhbmdlIGludm9sdmVzIHNlcGFyYXRpbmcgdGhlIHBlcm1pc3Npb24gY2hlY2sgZm9yIGBDR1JPVVBfU0tCYCBmcm9tIHRoZSBgYXR0YWNoX3R5cGVgIHZhbGlkYXRpb24uIEl0J3MgYSBzbWFydCBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLlxuXG5Ob3cgSSBuZWVkIHRvIGZvY3VzIG9uIGtleSBzeW1ib2xzLiBUaGVzZSBhcmUgZ29pbmcgdG8gYmUgbXkgZm9jdXMgcG9pbnRzOiBgYnBmX3Byb2dfYXR0YWNoYCAoYW5kLCBjb25zZXF1ZW50bHksIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gKSwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAuXG5cbkkga25vdyB0aGVzZSBhcmUgYWxsIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCdzIGNvbmZpcm06IGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1gIGFyZSBzdGF0aWMuIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYCBhcmUgYWxzbyBzdGF0aWMsIGFuZCBjYWxsZWQgaW4gYF9fc3lzX2JwZmAuIFRoZXNlIGFsbCB0eXBpY2FsbHkgZXhpc3QgYXMgc3ltYm9scyBpbiB2bWxpbnV4LlxuXG5JJ20gbm93IGdvaW5nIHRvIG5hcnJvdyBkb3duIG15IGZvY3VzIHRvIHRob3NlIGZpdmUgc3ltYm9sczogYGxpbmtfdXBkYXRlYCwgYGxpbmtfY3JlYXRlYCwgYGJwZl9wcm9nX2F0dGFjaGAsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBhbmQgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYC5cblxuQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgKnViaXF1aXRvdXMqPyBOby4gVGhleSBhcmUgQlBGLXNwZWNpZmljIGVudHJ5IHBvaW50cyBhbmQgaGVscGVycyByZWxhdGVkIHRvIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayBtYW5hZ2VtZW50LCBub3QgZ2VuZXJhbCBrZXJuZWwgdXRpbGl0aWVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUbyBjb21waWxlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIEknbGwgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSdtIGFsc28gZ29pbmcgdG8gbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfQlBGX0xTTWAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIG9yIHNpbXBseSBgQ09ORklHX0JQRmAgYXJlIG5lZWRlZC4gS2NvbmZpZyB3aWxsIGJlIG15IGd1aWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjU2LjIxODMzNTU5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODQ1OTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjg6NTYuMjY4MDUzNjY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDc3MTM3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBmb3IgQlBGX1NZU0NBTEwgaW4gS2NvbmZpZ3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCBhY3Jvc3MgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIGlzbid0IHVzdWFsbHkgc29tZXRoaW5nIEknZCBhcHByb2FjaCB3aXRob3V0IGEgc3BlY2lmaWMgY29udGV4dCwgc28gSSdtIGxpa2VseSBkZWJ1Z2dpbmcgYSByZWxhdGVkIGlzc3VlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBlbmFibGVtZW50IGRlcGVuZGVuY2llcywgb3IgcG9zc2libHkgbG9va2luZyBhdCBob3cgaXQncyBoYW5kbGVkIGluIGEgcGFydGljdWxhciBzdWItYXJjaGl0ZWN0dXJlIG9yIGRpc3Ryby4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGtpY2tzIGluOiBJIGNvdWxkIHVzZSBhIHNpbXBsZSBgZ3JlcGAgYWNyb3NzIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCBJIGtub3cgdGhhdCBjYW4gYmUgaW5lZmZpY2llbnQgYW5kIG1pc3Mgc3VidGxldGllcy4gSSBuZWVkIHRvIGJlIG1vcmUgc3RyYXRlZ2ljLiBJIHdpbGwgaGF2ZSB0byBzdGFydCBieSBnZXR0aW5nIG15IHNlYXJjaCBvcmdhbml6ZWQuXG5cbkkga25vdyB0aGVyZSBhcmUgdG9vbHMsIGxpa2VseSBidWlsdCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmLCB3aGljaCBjYW4gZmFjaWxpdGF0ZSB0aGlzIGxvb2t1cC4gSSB3YW50IHRoZSBtb3N0IHJlbGlhYmxlIHRvb2wsIHRoYXQgd29uJ3QgbWlzcyBhbnkgZWRnZSBjYXNlcywgbGlrZSBjb25kaXRpb25hbCBpbmNsdXNpb24gb3IgdmFyaWFibGUgYXNzaWdubWVudC4gSSBtaWdodCBzdGFydCB3aXRoIGBmaW5kYCBhbmQgYGdyZXBgIGlmIEknbSBvbiBhIHN5c3RlbSB3aXRob3V0IHRoZSBga2NvbmZpZy10dWlgIGFuZCBpdHMgYXNzb2NpYXRlZCB0b29saW5nIHJlYWRpbHkgYXZhaWxhYmxlLiBIb3dldmVyIEkgc2hvdWxkIGZpcnN0IGNoZWNrIHRoZSBidWlsZCBzeXN0ZW0ncyBuYXRpdmUgc2VhcmNoIGZ1bmN0aW9ucy4gSSBtaWdodCB1c2UgdGhlIGBtZW51Y29uZmlnYCBvciBgZGVmY29uZmlnYCB0b29scyBmb3IgYSBtb3JlIGluLWRlcHRoIGFwcHJvYWNoLCB3aGljaCBjYW4gaGlnaGxpZ2h0IGRlcGVuZGVuY2llcyBhbmQgdGhlIGxvZ2ljIGRyaXZpbmcgdGhlIG9wdGlvbidzIHZhbHVlLiBcblxuTXkgZ29hbHM6IHBpbnBvaW50IHdoZXJlIGBCUEZfU1lTQ0FMTGAgaXMgKmRlZmluZWQqLCB3aGVyZSBpdCdzICp1c2VkKiAoZS5nLiwgaW4gYGlmYCBzdGF0ZW1lbnRzLCBgc2VsZWN0YCBkaXJlY3RpdmVzLCBhc3NpZ25tZW50cyksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhpcyBhbHNvIGluY2x1ZGVzIGFueSBwb3RlbnRpYWwgYWxpYXNlcyBvciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBjb250ZXh0IG9mIHRoZSBzZXR0aW5nIC0gaXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljPyBEcml2ZXItc3BlY2lmaWM/IFBhcnQgb2YgYSBicm9hZGVyIHNlY3VyaXR5IGZlYXR1cmU/IFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM2MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI4OjU5LjIxNTc3MTkzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MzEyODAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyOTowMS4xNzg5MDkxNzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDQ3MTEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIGhlYWQgZG93biB0byBhcm91bmQgbGluZSAzMCwgcmlnaHQgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCwgdGhlIG9uZXMgdGhhdCBkaWN0YXRlIHdoZXRoZXIgdGhlIEJQRiBzdWJzeXN0ZW0gZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBmdW5kYW1lbnRhbCBjb250cm9scy4gQXJlIHdlIGxvb2tpbmcgYXQgZW5hYmxpbmcgQlBGIGluIGdlbmVyYWwsIG9yIGFyZSB0aGVyZSBtb3JlIGdyYW51bGFyIG9wdGlvbnMgdG8gY29uZmlndXJlIHNwZWNpZmljIEJQRiBmZWF0dXJlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZ2F0ZWtlZXBlcnMg4oCTIHRoZSBpbml0aWFsIGJvb2xlYW5zIHRoYXQgZGV0ZXJtaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGVudGlyZSBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEknbSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIGtub2JzIHRvIHR3aXN0IGZvciBicm9hZCBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDMuNDMzMzg0NDg2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjY6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDI3OlxcdFxcdGJvb2xcXG4gIDI4OlxcdFxcbiAgMjk6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAzMjpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgQlBGXFxuICAzNDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDM1OlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzY6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzc6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM4OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzOTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDQwOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICA0MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDQ6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA1MDpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNTE6XFx0XFx0aGVscFxcbiAgNTI6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA1MzpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTQ6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1NTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTg6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU5OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNjA6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA2MTpcXHRcXG4gIDYyOlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNjM6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuICA2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxuICA2NzpcXHRcXHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDcwOlxcdFxcdCAgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEgYW5kIHNldHRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhhdCB3aWxsXFxuICA3MTpcXHRcXHQgIHJldHVybiBmYWlsdXJlLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxuICA3NDpcXHRcXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVFxcbiAgNzY6XFx0XFxuICA3NzpcXHRjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbiAgNzg6XFx0XFx0Ym9vbCBcXFwiRGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcXFwiXFxuICA3OTpcXHRcXHRkZWZhdWx0IHlcXG4gIDgwOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgRGlzYWJsZXMgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDgzOlxcdFxcdCAgL3Byb2Mvc3lzL2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIGtub2IgdG8gMi4gQW4gYWRtaW4gY2FuXFxuICA4NDpcXHRcXHQgIHN0aWxsIHJlZW5hYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMCBsYXRlciBvbiwgb3IgcGVybWFuZW50bHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDMuNDMzNDU0OTk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTgzMjQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM6IENHUk9VUF9CUEYgYW5kIEJQRl9MU00qKlxuXG5BbHJpZ2h0LCBsZXQncyBjaXJjbGUgYmFjayBhbmQgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIGtlcm5lbCBzZWN1cml0eSwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IHByb2plY3QuIEkgbmVlZCB0byBleHBsaWNpdGx5IGFjY291bnQgZm9yIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJIGNhbid0IGp1c3QgYXNzdW1lIHRoZXkncmUgaGFuZGxlZDsgdGhleSdyZSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgd2UgKmhhdmUqIHRvIGFkZHJlc3MuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCBvdXIgc2FuZGJveGluZy9zZWN1cml0eSBwb2xpY2llcy4gQXJlIG91ciBlQlBGIGZpbHRlcnMgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgdGhlIGludGVyYWN0aW9ucyB3aXRoIGNncm91cHM/IERvIHdlIGhhdmUgcG90ZW50aWFsIGJ5cGFzc2VzIGlmIGEgbWFsaWNpb3VzIGFjdG9yIGNhbiBpbmZsdWVuY2UgYm90aCBjZ3JvdXAgYXNzaWdubWVudHMgKmFuZCogdGhlIEJQRiBjb2RlPyBXZSBuZWVkIGEgY2xlYXIgYXVkaXQgcGF0aCBoZXJlLlxuXG5BbmQgd2hhdCBhYm91dCBgQlBGX0xTTWA/IEkga25vdyBpdCdzIHJlbGF0aXZlbHkgbmV3LCBidXQgdGhlIHBvd2VyIGl0IG9mZmVycywgaW4gdGhlIHdyb25nIGhhbmRzLCBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIHdoZXRoZXIgd2UncmUgdXNpbmcgaXQsIGhvdyB3ZSd2ZSBjb25maWd1cmVkIGl0LCBhbmQsIGNyaXRpY2FsbHksIGhvdyB3ZSdyZSAqdmFsaWRhdGluZyogYW55IGNoYW5nZXMgbWFkZSB0aHJvdWdoIGl0LiBBcmUgb3VyIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbXMgcm9idXN0IGVub3VnaCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24/IElzIG91ciBsb2dnaW5nIHN1ZmZpY2llbnRseSBncmFudWxhciB0byBkZXRlY3QgYW5kIHJlc3BvbmQgdG8gc3VzcGljaW91cyBiZWhhdmlvciByZWxhdGVkIHRvIGBCUEZfTFNNYCBldmVudHM/IFRoaXMgcmVxdWlyZXMgbW9yZSB0aGFuIGEgY3Vyc29yeSBnbGFuY2U7IGl0IGRlc2VydmVzIGRlZXAgc2NydXRpbnkgdG8gZW5zdXJlIHdlIGhhdmVuJ3QgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2VkIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eS4gSXQgaXMgd29ydGggZ29pbmcgYmFjayBhbmQgZGlnZ2luZyB1cCB0aGUgZG9jdW1lbnRhdGlvbiB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIEkgaGF2ZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDYuMzUxNzgzMzE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAxNDM1NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGfGNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTUtXFxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9OTQ9c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctOTUtXFxua2VybmVsL2JwZi9LY29uZmlnOjk2OmNvbmZpZyBCUEZfTFNNXFxua2VybmVsL2JwZi9LY29uZmlnLTk3LVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MDguOTUzMjI1Mjc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTMyNzYzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgUmVsYXRlZCB0byBCUEYgYW5kIExTTSoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBDb21tb24gR3JvdXAgQlBGIChgQ0dST1VQX0JQRmApIGFuZCB0aGUgQlBGIExTTSBpbnRlZ3JhdGlvbiAoYEJQRl9MU01gKS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGFuZCBpbnNwZWN0IHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgdGhlIGxpbmVzIG9mIGNvZGUgYXJvdW5kIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9MU01gLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBjb250ZXh0LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgY29uZmxpY3RzPyBXaGF0IGV4YWN0bHkgZG9lcyBlbmFibGluZy9kaXNhYmxpbmcgZWFjaCBvcHRpb24gZW50YWlsPyBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBCUEYgZmVhdHVyZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0gYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IHRoZXkgaGF2ZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgSSdtIGFib3V0IHRvIGNvbmR1Y3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MTUuMjA2NTA0MTQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM1NTpcXHRcXG4xMzU2OlxcdGNvbmZpZyBDR1JPVVBfQlBGXFxuMTM1NzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuMTM1ODpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuMTM1OTpcXHRcXHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxcbjEzNjA6XFx0XFx0aGVscFxcbjEzNjE6XFx0XFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXFxuMTM2MjpcXHRcXHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXFxuMTM2MzpcXHRcXG4xMzY0OlxcdFxcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxcbjEzNjU6XFx0XFx0ICBvZiBhdHRhY2htZW50LiBGb3IgaW5zdGFuY2UsIHByb2dyYW1zIHRoYXQgYXJlIGF0dGFjaGVkIHVzaW5nXFxuMTM2NjpcXHRcXHQgIEJQRl9DR1JPVVBfSU5FVF9JTkdSRVNTIHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIGluZ3Jlc3MgcGF0aCBvZlxcbjEzNjc6XFx0XFx0ICBpbmV0IHNvY2tldHMuXFxuMTM2ODpcXHRcXG4xMzY5OlxcdGNvbmZpZyBDR1JPVVBfTUlTQ1xcbjEzNzA6XFx0XFx0Ym9vbCBcXFwiTWlzYyByZXNvdXJjZSBjb250cm9sbGVyXFxcIlxcbjEzNzE6XFx0XFx0ZGVmYXVsdCBuXFxuMTM3MjpcXHRcXHRoZWxwXFxuMTM3MzpcXHRcXHQgIFByb3ZpZGVzIGEgY29udHJvbGxlciBmb3IgbWlzY2VsbGFuZW91cyByZXNvdXJjZXMgb24gYSBob3N0LlxcbjEzNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjE1LjIwNjYzMjMyM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4MTI4MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIEJQRiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhbmQgc3BlY2lmaWNhbGx5IHRoZSBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGludGVncmF0aW9uLiBUbyBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24sIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEknbSByZWFzb25hYmx5IGNlcnRhaW4gaXQncyBpbiB0aGVyZSBzb21ld2hlcmUsIGxpa2VseSB0b3dhcmQgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBCUEYncyBjb3JlIGZlYXR1cmVzLiBMZXQncyBzdGFydCBhcm91bmQgbGluZSA5NiBhbmQgc2VlIHdoYXQncyB3aGF0LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gemVybyBpbiBvbiBgQlBGX0xTTWAuIEhvcGVmdWxseSwgdGhhdCdsbCBiZSBlbm91Z2ggdG8gZmluZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjE3LjEzNDc2NDAwMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgQlBGX0xTTVxcbiAgOTc6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxuICA5OTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDEwMDpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuIDEwMTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gMTAyOlxcdFxcdGhlbHBcXG4gMTAzOlxcdFxcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxcbiAxMDQ6XFx0XFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXFxuIDEwNzpcXHRcXG4gMTA4OlxcdGNvbmZpZyBCUEZfSklUX0tBU0FOXFxuIDEwOTpcXHRcXHRib29sXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cXG4gMTExOlxcdFxcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xcbiAxMTI6XFx0XFx0ZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DXFxuIDExMzpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gMTE0OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyOToxNy4xMzQ4MzExODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ5MDA5MTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBDb25maXJtYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIHRoaXMgZnV6emluZyB0YXJnZXQgaXMgc291bmQuIEZpcnN0LCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggaXMgdGhlIGluaXRpYWwgaW5kaWNhdG9yLiBEaWdnaW5nIGRlZXBlciwgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBpdCdzIHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgYXJlYXM6IHRoZSBgbGlua191cGRhdGVgIGZ1bmN0aW9uIHdpdGggYXR0YWNoIHR5cGUgdmFsaWRhdGlvbiwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGBCUEZfUFJPR19UWVBFX0xTTWAgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgLCBhbmQgYWxzbyByZWZhY3RvcmluZyB0aGUgY2FwYWJpbGl0eSBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byBhIG5ldyBoZWxwZXIsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAuIFRoZXNlIGFyZSBhbGwgYWNjZXNzaWJsZSBCUEYgc3lzY2FsbHMsIHBhcnRpY3VsYXJseSB0aGUgYEJQRl9QUk9HX0FUVEFDSGAsIGBCUEZfTElOS19DUkVBVEVgLCBhbmQgYEJQRl9MSU5LX1VQREFURWAgY2FsbHMsIGFsbCBvZiB3aGljaCBhcmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIHdpdGggZnV6emluZy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayBjb3JyZWN0OiBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgQlBGX0xTTWAgYWxsIHNlZW0gZXNzZW50aWFsIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBsZXQncyB2ZXJpZnkgb3VyIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuIEl0J3MgY3J1Y2lhbCB3ZSdyZSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gT2theSwgYSBxdWljayBkb3VibGUtY2hlY2s6IGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBgbGlua191cGRhdGVgLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYW5kIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybWAgLSBhbGwgb2YgdGhlbSBhcmUgcmlnaHQgb24gdGFyZ2V0LiBUaGVzZSBmdW5jdGlvbnMgc2VlbSB0byBjb3ZlciB0aGUgcmVsZXZhbnQgbG9naWMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guXG5cbk5vdywgd2l0aCB0aGlzIGNvbmZpcm1hdGlvbiwgSSdtIGNvbWZvcnRhYmxlIHByb2NlZWRpbmcuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NzMsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MjEuNjI0OTI0OTc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MDkzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIixcbiAgICBcImJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgQlBGIHN5c2NhbGwgbG9naWMgaW4ga2VybmVsL2JwZi9zeXNjYWxsLmMsIGludHJvZHVjaW5nIGF0dGFjaCB0eXBlIHZlcmlmaWNhdGlvbiBmb3IgbGlua191cGRhdGUsIGNoZWNraW5nIExTTSBleHBlY3RlZCBhdHRhY2ggdHlwZXMgaW4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlLCBhbmQgcmVmYWN0b3JpbmcgY2dyb3VwLXNrYiBjYXBhYmlsaXR5IGNoZWNrcyBpbnRvIGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtLiBUaGVzZSBlbnRyeXBvaW50cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKDIpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImxpbmtfY3JlYXRlXCIsXG4gICAgXCJsaW5rX3VwZGF0ZVwiLFxuICAgIFwiYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlXCIsXG4gICAgXCJicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBCUEYgc3lzY2FsbCBsb2dpYyBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYywgaW50cm9kdWNpbmcgYXR0YWNoIHR5cGUgdmVyaWZpY2F0aW9uIGZvciBsaW5rX3VwZGF0ZSwgY2hlY2tpbmcgTFNNIGV4cGVjdGVkIGF0dGFjaCB0eXBlcyBpbiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUsIGFuZCByZWZhY3RvcmluZyBjZ3JvdXAtc2tiIGNhcGFiaWxpdHkgY2hlY2tzIGludG8gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0uIFRoZXNlIGVudHJ5cG9pbnRzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBicGYoMikgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MjEuNzA2NTQyNzI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MzY5NDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjIxLjcwNzE0NzI0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2MjYzMDg1MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbW9kaWZ5IGNvbnRyb2wtZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYyB1c2luZyBhbHJlYWR5LWluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgKGJwZl9wcm9nIGFuZCBicGZfbGluaykuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgc2l6ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRmZDliNjE1MDc3ZjI5NDc3Y2VkNzRjMTVmM2ZiZDYxODZlZDAzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDY6Mjg6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi4yYmNkM2YzYTJhNTU5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNDQ4MSwxNCArNDQ4MSw5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSOlxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcbitcdGNhc2UgQlBGX1BST0dfVFlQRV9MU006XG4gXHRcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbi1cdFx0aWYgKCFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVx1MDAzZWF1eC1cdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXG4tXHRcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4tXHRcdFx0ICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cbiBcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuIFx0XHRpZiAocHJvZy1cdTAwM2V0eXBlICE9IHB0eXBlKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTQ1NDIsNiArNDUzNywyMCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0ICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4re1xuK1x0LypcbitcdCAqIENHUk9VUF9TS0IgcHJvZ3JhbXMgY2FuIGJlIGxvYWRlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMsIHNvIGNoZWNrXG4rXHQgKiBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbitcdCAqL1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gXHRcdFx0XHRib29sIGNoZWNrX2F0eXBlKVxuIHtcbkBAIC00NjA2LDcgKzQ2MTUsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuK1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKHByb2csIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpKSB7XG4gXHRcdGJwZl9wcm9nX3B1dChwcm9nKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTgwNSw4ICs1ODE0LDcgQEAgc3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4gXHRpZiAoSVNfRVJSKHByb2cpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcm9nKTtcbiBcbi1cdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLFxuLVx0XHRcdFx0XHRcdGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0ocHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC01OTY4LDYgKzU5NzYsMTAgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuIFx0fVxuIFxuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLCBsaW5rLVx1MDAzZWF0dGFjaF90eXBlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcbitcbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZylcbiBcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jZ3JvdXBfbGluay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY2dyb3VwX2xpbmsuY1xuaW5kZXggMTUwOTNhNjk1MTBlYi4uM2I0M2MzNDkxN2NjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Nncm91cF9saW5rLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJjYXBfaGVscGVycy5oXCJcbiAjaW5jbHVkZSBcImNncm91cF9oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwidGVzdGluZ19oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwidGVzdF9jZ3JvdXBfbGluay5za2VsLmhcIlxuQEAgLTI0LDcgKzI1LDc3IEBAIGludCBwaW5nX2FuZF9jaGVjayhpbnQgZXhwX2NhbGxzLCBpbnQgZXhwX2FsdF9jYWxscylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4rc3RhdGljIHZvaWQgdGVzdF9jZ3JvdXBfbGlua191cGRhdGUodm9pZClcbit7XG4rXHRjb25zdCBfX3U2NCBjYXBzID0gKDFVTEwgXHUwMDNjXHUwMDNjIENBUF9ORVRfQURNSU4pIHwgKDFVTEwgXHUwMDNjXHUwMDNjIENBUF9TWVNfQURNSU4pO1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbitcdF9fdTY0IHNhdmVkX2NhcHMgPSAwO1xuK1x0aW50IGNnX2ZkID0gLTEsIGVycjtcbitcbitcdHNrZWwgPSB0ZXN0X2Nncm91cF9saW5rX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY2dfaW5pdFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2dfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoXCIvY2dyb3VwX2xpbmtfdXBkYXRlXCIpO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2dfZmQsIDAsIFwiY2dfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBqb2luX2Nncm91cChcIi9jZ3JvdXBfbGlua191cGRhdGVcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY2dfam9pblwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3Muc2VuZG1zZzQsIGNnX2ZkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImF0dGFjaF9zZW5kbXNnNFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX2xpbmtfX3VwZGF0ZV9wcm9ncmFtKGxpbmssIHNrZWwtXHUwMDNlcHJvZ3Muc2VuZG1zZzYpO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCJyZWplY3Rfc2VuZG1zZzZfdXBkYXRlXCIpO1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRsaW5rID0gTlVMTDtcbitcbitcdGVyciA9IGNhcF9kaXNhYmxlX2VmZmVjdGl2ZShjYXBzLCBcdTAwMjZzYXZlZF9jYXBzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJkcm9wX2NhcHNfZm9yX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XG4rXHRpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIFwiYXR0YWNoX3dpdGhvdXRfbmV0X2FkbWluXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuK1x0bGluayA9IE5VTEw7XG4rXHRpZiAoIUFTU0VSVF9FUShlcnIsIC1FUEVSTSwgXCJhdHRhY2hfZXJyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzIFx1MDAyNiBjYXBzLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJyZXN0b3JlX2NhcHNfZm9yX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ19mZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJhdHRhY2hfZWdyZXNzXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBjYXBfZGlzYWJsZV9lZmZlY3RpdmUoY2FwcywgXHUwMDI2c2F2ZWRfY2Fwcyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiZHJvcF9jYXBzXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfbGlua19fdXBkYXRlX3Byb2dyYW0obGluaywgc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3NfYWx0KTtcbitcdEFTU0VSVF9PSyhlcnIsIFwidXBkYXRlX3dpdGhvdXRfbmV0X2FkbWluXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRlcnIgPSBjYXBfZW5hYmxlX2VmZmVjdGl2ZShzYXZlZF9jYXBzIFx1MDAyNiBjYXBzLCBOVUxMKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwicmVzdG9yZV9jYXBzXCIpO1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRpZiAoY2dfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ19mZCk7XG4rXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0dGVzdF9jZ3JvdXBfbGlua19fZGVzdHJveShza2VsKTtcbitcdHNrZWwgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2Nncm91cF9saW5rX2F0dGFjaCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB7XG4gXHRcdGNvbnN0IGNoYXIgKnBhdGg7XG5AQCAtMjUzLDMgKzMyNCwxMSBAQCB2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4gXHR9XG4gXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuIH1cbitcbit2b2lkIHNlcmlhbF90ZXN0X2Nncm91cF9saW5rKHZvaWQpXG4re1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhdHRhY2hcIikpXG4rXHRcdHRlc3RfY2dyb3VwX2xpbmtfYXR0YWNoKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVwZGF0ZVwiKSlcbitcdFx0dGVzdF9jZ3JvdXBfbGlua191cGRhdGUoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG5pbmRleCA0MWU4Njc0NjdmNmM2Li4wZGQ0NGRiYjljOTVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2Nncm91cC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fY2dyb3VwLmNcbkBAIC03NCw2ICs3NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbHNtX2Nncm91cF9mdW5jdGlvbmFsKHZvaWQpXG4gXHRpbnQgYmluZF9wcm9nX2ZkID0gLTE7XG4gXHRpbnQgYmluZF9saW5rX2ZkID0gLTE7XG4gXHRpbnQgY2xvbmVfcHJvZ19mZCA9IC0xO1xuK1x0aW50IHNvY2tldF9saW5rX2ZkID0gLTE7XG4gXHRpbnQgZXJyLCBmZCwgcHJpbztcbiBcdHNvY2tsZW5fdCBzb2NrbGVuO1xuIFxuQEAgLTE1Niw2ICsxNTcsMTcgQEAgc3RhdGljIHZvaWQgdGVzdF9sc21fY2dyb3VwX2Z1bmN0aW9uYWwodm9pZClcbiBcdEFTU0VSVF9FUShxdWVyeV9wcm9nX2NudChjZ3JvdXBfZmQsIFwiYnBmX2xzbV9zb2NrZXRfYmluZFwiKSwgMSwgXCJwcm9nIGNvdW50XCIpO1xuIFx0QVNTRVJUX0VRKHF1ZXJ5X3Byb2dfY250KGNncm91cF9mZCwgTlVMTCksIDQsIFwidG90YWwgcHJvZyBjb3VudFwiKTtcbiBcbitcdHNvY2tldF9saW5rX2ZkID1cbitcdFx0YnBmX2xpbmtfY3JlYXRlKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnNvY2tldF9maXJzdCksXG4rXHRcdFx0XHRjZ3JvdXBfZmQsIEJQRl9MU01fQ0dST1VQLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKHNvY2tldF9saW5rX2ZkLCAwLCBcImxpbmsgY3JlYXRlIHNvY2tldF9maXJzdFwiKSlcbitcdFx0Z290byBkZXRhY2hfY2dyb3VwO1xuK1x0ZXJyID0gYnBmX2xpbmtfdXBkYXRlKHNvY2tldF9saW5rX2ZkLFxuK1x0XHRcdCAgICAgIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnNvY2tldF9jcmVhdGVfbHNtKSxcbitcdFx0XHQgICAgICBOVUxMKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FSU5WQUwsIFwicmVqZWN0IGxzbV9tYWMgbGluayB1cGRhdGVcIik7XG4rXHRjbG9zZShzb2NrZXRfbGlua19mZCk7XG4rXG4gXHQvKiBBdHRhY2ggYW5vdGhlciBpbnN0YW5jZSBvZiBiaW5kIHByb2dyYW0gdG8gYW5vdGhlciBjZ3JvdXAuXG4gXHQgKiBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSByZXVzZSBvZiB0aGUgdHJhbXBvbGluZSBzaGltICh0d29cbiBcdCAqIHByb2dyYW1zIGF0dGFjaGluZyB0byB0aGUgc2FtZSBidGZfaWQpLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc21fY2dyb3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtX2Nncm91cC5jXG5pbmRleCAzYmZhNDc5MTA0YmU4Li4zMDcyNzk0NWNlY2MzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbV9jZ3JvdXAuY1xuQEAgLTIxMyw2ICsyMTMsMTIgQEAgaW50IEJQRl9QUk9HKHNvY2tldF9maXJzdCwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwibHNtL3NvY2tldF9jcmVhdGVcIilcbitpbnQgQlBGX1BST0coc29ja2V0X2NyZWF0ZV9sc20sIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJsc21fY2dyb3VwL3NvY2tldF9jcmVhdGVcIilcbiBpbnQgQlBGX1BST0coc29ja2V0X3NlY29uZCwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IGtlcm4pXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2Nncm91cF9saW5rLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9jZ3JvdXBfbGluay5jXG5pbmRleCA0ZmFiYTg4ZTQ1YTVhLi4xMDc0Mjk2MzhmNTQzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfY2dyb3VwX2xpbmsuY1xuQEAgLTIwLDUgKzIwLDE2IEBAIGludCBlZ3Jlc3NfYWx0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1jaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rU0VDKFwiY2dyb3VwL3NlbmRtc2c0XCIpXG4raW50IHNlbmRtc2c0KHN0cnVjdCBicGZfc29ja19hZGRyICpjdHgpXG4re1xuK1x0cmV0dXJuIDE7XG4rfVxuIFxuK1NFQyhcImNncm91cC9zZW5kbXNnNlwiKVxuK2ludCBzZW5kbXNnNihzdHJ1Y3QgYnBmX3NvY2tfYWRkciAqY3R4KVxuK3tcbitcdHJldHVybiAxO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjoyOToyMS43MDcxNDgyMjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0NjMyMTI4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IG9mIEJQRiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayBjcmVhdGlvbi91cGRhdGUgcm91dGluZXMuIEl0J3MgZXNzZW50aWFsbHkgcmVmaW5pbmcgcGVybWlzc2lvbiBjaGVja3MgYW5kIGF0dGFjaCB0eXBlIHZhbGlkYXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYENHUk9VUF9TS0JgIGFuZCBub3cgaW5jb3Jwb3JhdGluZyBgTFNNYCBwcm9ncmFtcy4gVGhlIGtleSBjaGFuZ2VzIGFyZTpcblxuMS4gICoqUmVvcmdhbml6YXRpb24gb2YgQ2hlY2tzOioqIFRoZSBgQ0FQX05FVF9BRE1JTmAgcGVybWlzc2lvbiBjaGVjayBmb3IgYENHUk9VUF9TS0JgIGlzIG1vdmVkIGZyb20gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZSgpYCB0byBhIG5ldyBoZWxwZXIgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtKClgLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHNlcGFyYXRpb24gb2YgY29uY2VybnMg4oCTIGF0dGFjaCB0eXBlIGNvbXBhdGliaWxpdHkgYW5kIHBlcm1pc3Npb25zIGFyZSBub3cgaGFuZGxlZCBkaXN0aW5jdGx5LlxuMi4gICoqTFNNIFN1cHBvcnQ6KiogIGBCUEZfUFJPR19UWVBFX0xTTWAgaXMgbm93IGV4cGxpY2l0bHkgc3VwcG9ydGVkIGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoKWAuXG4zLiAgKipMaW5rIFVwZGF0ZSBDaGVjazoqKiAgSW4gYGxpbmtfdXBkYXRlKClgLCB0aGVyZSdzIGEgbmV3IGNoZWNrIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoKWAgdG8gZW5zdXJlIHRoZSBhdHRhY2ggdHlwZSBvZiB0aGUgKm5ldyogcHJvZ3JhbSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGV4aXN0aW5nIGxpbmsncyB0eXBlLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGxpbmsgaW50ZWdyaXR5IGR1cmluZyB1cGRhdGVzLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGFuYWx5emUgZm9yIHRoaXMgc3BlY2lmaWNhbGx5IGZvciBLTVNBTi4gTXkgYW5hbHlzaXMgaXMgYXMgZm9sbG93czpcblxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgQWxsb2NhdGlvbi9Db3B5OioqICBJIHNlZSBubyBldmlkZW5jZSBvZiBhbGxvY2F0aW5nIG9yIGNvcHlpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBvbmx5IGFsdGVycyB0aGUgdmFsaWRhdGlvbiBhbmQgcGVybWlzc2lvbiBjaGVja3MuXG4qICAgKipObyBSZWFkcyBvZiBVbmluaXRpYWxpemVkIE1lbW9yeSBvciBTdHJ1Y3QgUGFkZGluZzoqKiBUaGUgY29kZSByZWFkcyBmcm9tIGNsZWFybHkgZGVmaW5lZCBmaWVsZHMgb2Ygc3RydWN0dXJlcyBsaWtlIGBwcm9nLVx1MDAzZXR5cGVgLCBgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZWAsIGBwcm9nLVx1MDAzZWF1eC1cdTAwM2V0b2tlbmAsIGFuZCBgYXR0ci1cdTAwM2UuLi5gIGFuZCBgbGluay1cdTAwM2VhdHRhY2hfdHlwZWAuIFRoZXJlIGFyZSBubyBhcHBhcmVudCByZWFkcyBmcm9tIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHBhZGRpbmcuXG4qICAgKipObyBCdWZmZXIgTGVuZ3RoIE1hbmlwdWxhdGlvbi9Db3B5IEJvdW5kIElzc3VlczoqKiAgVGhpcyBwYXRjaCBkb2VzIG5vdCBhcHBlYXIgdG8gaW52b2x2ZSBidWZmZXIgbGVuZ3RoIG1hbmlwdWxhdGlvbiBvciBhbnkgY29uY2VybnMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGNvcGllcy5cbiogICAqKk5vIEV4cG9zdXJlIG9mIFN0YWNrIG9yIEhlYXAgRGF0YToqKiBJIGRvbid0IHNlZSBhbnkgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGNvdWxkIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknZCBub3cgcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCwgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAgYW5kIGBsaW5rX3VwZGF0ZWAgYXMgd2VsbCBhcyBhbnkgc3Vycm91bmRpbmcgY29kZSB3aXRoIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBkb3VibGUtY2hlY2sgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBsb29raW5nIGZvciBhbnkgc3VidGxlIGdvdGNoYXMuIEJ1dCBteSBndXQgZmVlbGluZyBpcyB0aGUgcGF0Y2ggb25seSBpbnZvbHZlcyBzdHJ1Y3R1cmFsIGNoYW5nZXMgYW5kIGxvZ2ljIHJlZmFjdG9yaW5nLCB3aXRoIG5vIGV4cGxpY2l0IG1lbW9yeSBjb3JydXB0aW9uIHJpc2tzLlxuXG5UaGVyZWZvcmUsIG15IHByZWxpbWluYXJ5IGFzc2Vzc21lbnQgaXMgdGhhdCAqKmBOZWVkc0tNU0FOID0gZmFsc2VgKiouIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhpcyB3aXRoIGEgYnJpZWYgY29kZSByZXZpZXcgZm9yIGFic29sdXRlIGNlcnRhaW50eSwgYnV0IEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIEtNU0FOLXJlbGV2YW50IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MzIuMTcwMzY0NTg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDc1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NDc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXFxuNDQ3NjpcXHR7XFxuNDQ3NzpcXHRcXHRlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGU7XFxuNDQ3ODpcXHRcXG40NDc5OlxcdFxcdHN3aXRjaCAocHJvZy1cXHUwMDNldHlwZSkge1xcbjQ0ODA6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLOlxcbjQ0ODE6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFI6XFxuNDQ4MjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XFxuNDQ4MzpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxcbjQ0ODQ6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xTTTpcXG40NDg1OlxcdFxcdFxcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMO1xcbjQ0ODY6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XFxuNDQ4NzpcXHRcXHRcXHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XFxuNDQ4ODpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNldHlwZSAhPSBwdHlwZSlcXG40NDg5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0OTA6XFx0XFxuNDQ5MTpcXHRcXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNlZW5mb3JjZV9leHBlY3RlZF9hdHRhY2hfdHlwZSBcXHUwMDI2XFx1MDAyNlxcbjQ0OTI6XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR0YWNoX3R5cGUgP1xcbjQ0OTM6XFx0XFx0XFx0XFx0LUVJTlZBTCA6IDA7XFxuNDQ5NDpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbjQ0OTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDQ5NjpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfTkVURklMVEVSOlxcbjQ0OTc6XFx0XFx0XFx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9ORVRGSUxURVIpXFxuNDQ5ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NDk5OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1MDA6XFx0XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQ6XFxuNDUwMTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVDpcXG40NTAyOlxcdFxcdFxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfUEVSRl9FVkVOVClcXG40NTAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ1MDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDUwNTpcXHRcXHRjYXNlIEJQRl9QUk9HX1RZUEVfS1BST0JFOlxcbjQ1MDY6XFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkgXFx1MDAyNlxcdTAwMjZcXG40NTA3OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX01VTFRJKVxcbjQ1MDg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUwOTpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OIFxcdTAwMjZcXHUwMDI2XFxuNDUxMDpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0tQUk9CRV9TRVNTSU9OKVxcbjQ1MTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUxMjpcXHRcXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1VQUk9CRV9NVUxUSSBcXHUwMDI2XFx1MDAyNlxcbjQ1MTM6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9VUFJPQkVfTVVMVEkpXFxuNDUxNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTE1OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04gXFx1MDAyNlxcdTAwMjZcXG40NTE2OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX1NFU1NJT04pXFxuNDUxNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTE4OlxcdFxcdFxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfUEVSRl9FVkVOVCBcXHUwMDI2XFx1MDAyNlxcbjQ1MTk6XFx0XFx0XFx0ICAgIGF0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9LUFJPQkVfTVVMVEkgXFx1MDAyNlxcdTAwMjZcXG40NTIwOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfS1BST0JFX1NFU1NJT04gXFx1MDAyNlxcdTAwMjZcXG40NTIxOlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfVVBST0JFX01VTFRJIFxcdTAwMjZcXHUwMDI2XFxuNDUyMjpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX1VQUk9CRV9TRVNTSU9OKVxcbjQ1MjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUyNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NTI1OlxcdFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFM6XFxuNDUyNjpcXHRcXHRcXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9JTkdSRVNTIFxcdTAwMjZcXHUwMDI2XFxuNDUyNzpcXHRcXHRcXHQgICAgYXR0YWNoX3R5cGUgIT0gQlBGX1RDWF9FR1JFU1MgXFx1MDAyNlxcdTAwMjZcXG40NTI4OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BSSU1BUlkgXFx1MDAyNlxcdTAwMjZcXG40NTI5OlxcdFxcdFxcdCAgICBhdHRhY2hfdHlwZSAhPSBCUEZfTkVUS0lUX1BFRVIpXFxuNDUzMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NTMxOlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1MzI6XFx0XFx0ZGVmYXVsdDpcXG40NTMzOlxcdFxcdFxcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcXG40NTM0OlxcdFxcdFxcdGlmIChwdHlwZSA9PSBCUEZfUFJPR19UWVBFX1VOU1BFQyB8fCBwdHlwZSAhPSBwcm9nLVxcdTAwM2V0eXBlKVxcbjQ1MzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDUzNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NTM3OlxcdFxcdH1cXG40NTM4OlxcdH1cXG40NTM5OlxcdFxcbjQ1NDA6XFx0c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuNDU0MTpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG40NTQyOlxcdHtcXG40NTQzOlxcdFxcdC8qXFxuNDU0NDpcXHRcXHQgKiBDR1JPVVBfU0tCIHByb2dyYW1zIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2aWxlZ2VkIHVzZXJzLCBzbyBjaGVja1xcbjQ1NDU6XFx0XFx0ICogcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXFxuNDU0NjpcXHRcXHQgKi9cXG40NTQ3OlxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBcXHUwMDI2XFx1MDAyNlxcbjQ1NDg6XFx0XFx0ICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcXG40NTQ5OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuNDU1MDpcXHRcXG40NTUxOlxcdFxcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xcbjQ1NTI6XFx0fVxcbjQ1NTM6XFx0XFxuNDU1NDpcXHRzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjMyLjE3MDc3OTMxNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODAyMzkwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBCUEYgTGluayBVcGRhdGUgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGEgYml0IGRlZXBlci4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcG90ZW50aWFsIGlzc3VlLCBJIHNob3VsZCBleHBhbmQgbXkgc2NvcGUuIExldCdzIG5vdCBqdXN0IGZvY3VzIG9uIHRoZSBvYnZpb3VzOyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgc3VidGxlIGhpZGluZyBpbiBwbGFpbiBzaWdodC4gSSdtIGdvaW5nIHRvIGhlYWQgb3ZlciB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYGxpbmtfdXBkYXRlKClgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBhcmVhIGZvciBhIG1pc2NhbGN1bGF0aW9uIHRvIGx1cmssIGdpdmVuIHRoYXQgaXQncyBkaXJlY3RseSBpbnZvbHZlZCBpbiwgd2VsbCwgKnVwZGF0aW5nKiBCUEYgbGlua3MuIFRpbWUgdG8gbWV0aWN1bG91c2x5IGRpc3NlY3QgdGhlIGNvZGUgYW5kIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhhdCBmdW5jdGlvbi4gSXQncyB0aW1lIHRvIHB1dCBvbiB0aGUgZGV0ZWN0aXZlIGhhdCBhbmQgdHJ5IHRvIGZpbmQgYSBjcmFjayBpbiB0aGUgYXJtb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjMzLjk3MzE3NDAxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41OTUxOlxcdFxcbjU5NTI6XFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmxpbmtfZmQpO1xcbjU5NTM6XFx0XFx0aWYgKElTX0VSUihsaW5rKSlcXG41OTU0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGxpbmspO1xcbjU5NTU6XFx0XFxuNTk1NjpcXHRcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfbWFwKSB7XFxuNTk1NzpcXHRcXHRcXHRyZXQgPSBsaW5rX3VwZGF0ZV9tYXAobGluaywgYXR0cik7XFxuNTk1ODpcXHRcXHRcXHRnb3RvIG91dF9wdXRfbGluaztcXG41OTU5OlxcdFxcdH1cXG41OTYwOlxcdFxcbjU5NjE6XFx0XFx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubmV3X3Byb2dfZmQpO1xcbjU5NjI6XFx0XFx0aWYgKElTX0VSUihuZXdfcHJvZykpIHtcXG41OTYzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIobmV3X3Byb2cpO1xcbjU5NjQ6XFx0XFx0XFx0Z290byBvdXRfcHV0X2xpbms7XFxuNTk2NTpcXHRcXHR9XFxuNTk2NjpcXHRcXG41OTY3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG41OTY4OlxcdFxcdFxcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcXG41OTY5OlxcdFxcdFxcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XFxuNTk3MDpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG9sZF9wcm9nKTtcXG41OTcxOlxcdFxcdFxcdFxcdG9sZF9wcm9nID0gTlVMTDtcXG41OTcyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG41OTczOlxcdFxcdFxcdH1cXG41OTc0OlxcdFxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcXG41OTc1OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuNTk3NjpcXHRcXHRcXHRnb3RvIG91dF9wdXRfcHJvZ3M7XFxuNTk3NzpcXHRcXHR9XFxuNTk3ODpcXHRcXG41OTc5OlxcdFxcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZywgbGluay1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbjU5ODA6XFx0XFx0aWYgKHJldClcXG41OTgxOlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG41OTgyOlxcdFxcbjU5ODM6XFx0XFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cpXFxuNTk4NDpcXHRcXHRcXHRyZXQgPSBsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7XFxuNTk4NTpcXHRcXHRlbHNlXFxuNTk4NjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjU5ODc6XFx0XFxuNTk4ODpcXHRvdXRfcHV0X3Byb2dzOlxcbjU5ODk6XFx0XFx0aWYgKG9sZF9wcm9nKVxcbjU5OTA6XFx0XFx0XFx0YnBmX3Byb2dfcHV0KG9sZF9wcm9nKTtcXG41OTkxOlxcdFxcdGlmIChyZXQpXFxuNTk5MjpcXHRcXHRcXHRicGZfcHJvZ19wdXQobmV3X3Byb2cpO1xcbjU5OTM6XFx0b3V0X3B1dF9saW5rOlxcbjU5OTQ6XFx0XFx0YnBmX2xpbmtfcHV0X2RpcmVjdChsaW5rKTtcXG41OTk1OlxcdFxcdHJldHVybiByZXQ7XFxuNTk5NjpcXHR9XFxuNTk5NzpcXHRcXG41OTk4OlxcdCNkZWZpbmUgQlBGX0xJTktfREVUQUNIX0xBU1RfRklFTEQgbGlua19kZXRhY2gubGlua19mZFxcbjU5OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjI5OjMzLjk3MzU2NjUxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTk2NjM5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGNvbmNsdXNpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBleGlzdGluZyBCUEYgaW5mcmFzdHJ1Y3R1cmUsIGZvY3VzaW5nIG9uIHRoZSB2YWxpZGF0aW9uIGFuZCBhdXRob3JpemF0aW9uIGNoZWNrcyBmb3IgQlBGIHByb2dyYW0gYXR0YWNobWVudHMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbG9naWNhbCBjaGVja3Mgb24gdGhlIGBwcm9nYCBhbmQgYGxpbmtgIHN0cnVjdHVyZXMg4oCTIHNwZWNpZmljYWxseSBjYXBhYmlsaXR5IHJlcXVpcmVtZW50cyBhbmQgYXR0YWNoIHR5cGUgY29tcGF0aWJpbGl0eS5cblxuQ3J1Y2lhbGx5LCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgYnVmZmVycywgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGRhdGEgaXNzdWVzLCBubyBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGFic29sdXRlbHkgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcyB0aGF0IEkgY2FuIHNlZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGF0IGFzc2Vzc21lbnQsIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuTm93LCBsZXQgbWUgYXJ0aWN1bGF0ZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIEZpcnN0LCB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgcHJvZ3JhbSBhdHRhY2ggdmFsaWRhdGlvbiBsb2dpYy4gSXQgc2VwYXJhdGVzIG91dCB0aGUgY2FwYWJpbGl0eSBjaGVja3MgKGhhbmRsZWQgYnkgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19wZXJtYCkgZnJvbSB0aGUgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiAoYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWApLiBJdCBhbHNvIGluY29ycG9yYXRlcyBzdXBwb3J0IGZvciBgQlBGX1BST0dfVFlQRV9MU01gIGluIHRoZSB0eXBlIGNoZWNrcyBhbmQgZW5zdXJlcyBuZXcgcHJvZ3JhbSBhdHRhY2ggdHlwZXMgYXJlIHByb3Blcmx5IHZhbGlkYXRlZCB3aXRoaW4gYGxpbmtfdXBkYXRlKClgLlxuXG5UaGUgcmVhc29uIEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIG9wZXJhdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXNuJ3QgY3JlYXRlIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIG1lbW9yeSBwcm9ibGVtcywgb3IgY3JlYXRlIGFueSBwb3RlbnRpYWwgaW5mb3JtYXRpb24tbGVhayB2ZWN0b3JzLiBUaGUgcGF0Y2gncyBmb2N1cyBpcyBvbiBjb250cm9sLWZsb3csIHBlcm1pc3Npb24gYW5kIHR5cGUgdmFsaWRhdGlvbiBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQga2VybmVsIG9iamVjdHMuIEFueSBleGlzdGluZyBpc3N1ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3Igb2JqZWN0IGxpZmV0aW1lcyBzaG91bGQgYmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIHJlZmNvdW50aW5nIG1lY2hhbmlzbXMgYW5kIEtBU0FOLlxuXG5BbHJpZ2h0LCB0aGF0J3MgbXkgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjIsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6Mjk6MzcuOTcwMjA5Njk4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIHByb2dyYW0gYXR0YWNobWVudCBhbmQgbGluayB1cGRhdGUgdmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBzZXBhcmF0ZXMgcGVybWlzc2lvbiBjaGVja3MgZm9yIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfcGVybSksIGFkZHMgYXR0YWNoLXR5cGUgdmFsaWRhdGlvbiBmb3IgQlBGX1BST0dfVFlQRV9MU00gcHJvZ3JhbXMsIGFuZCBlbmZvcmNlcyBhdHRhY2gtdHlwZSBjb21wYXRpYmlsaXR5IGNoZWNraW5nIG9uIHRoZSByZXBsYWNlbWVudCBwcm9ncmFtIGR1cmluZyBicGZfbGluayB1cGRhdGUgKGxpbmtfdXBkYXRlKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbW9kaWZ5IGNvbnRyb2wtZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYyB1c2luZyBhbHJlYWR5LWluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgKGJwZl9wcm9nIGFuZCBicGZfbGluaykuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgc2l6ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBubyBpbmZvLWxlYWsgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgYW5kIGxpbmsgdXBkYXRlIHZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQgc2VwYXJhdGVzIHBlcm1pc3Npb24gY2hlY2tzIGZvciBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgaW50byBhIGhlbHBlciBmdW5jdGlvbiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX3Blcm0pLCBhZGRzIGF0dGFjaC10eXBlIHZhbGlkYXRpb24gZm9yIEJQRl9QUk9HX1RZUEVfTFNNIHByb2dyYW1zLCBhbmQgZW5mb3JjZXMgYXR0YWNoLXR5cGUgY29tcGF0aWJpbGl0eSBjaGVja2luZyBvbiB0aGUgcmVwbGFjZW1lbnQgcHJvZ3JhbSBkdXJpbmcgYnBmX2xpbmsgdXBkYXRlIChsaW5rX3VwZGF0ZSkuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IG1vZGlmeSBjb250cm9sLWZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMgdXNpbmcgYWxyZWFkeS1pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIChicGZfcHJvZyBhbmQgYnBmX2xpbmspLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIHNpemVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgbm8gaW5mby1sZWFrIHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtdgn9[1] Phase: Succeeded StartedAt: 2026-09-07 06:29:49 +0000 UTC FinishedAt: 2026-09-07 06:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 06:29:49 +0000 UTC FinishedAt: 2026-09-07 06:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2] Phase: Succeeded StartedAt: 2026-09-07 06:29:49 +0000 UTC FinishedAt: 2026-09-07 10:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 06:29:49 +0000 UTC FinishedAt: 2026-09-07 10:09:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 06:29:49 +0000 UTC FinishedAt: 2026-09-07 06:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 06:29:49 +0000 UTC FinishedAt: 2026-09-07 06:29:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtdgn9/series-workflowtdgn9-convert-artifact-4285622717/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 06:29:59 +0000 UTC FinishedAt: 2026-09-07 06:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 06:29:59 +0000 UTC FinishedAt: 2026-09-07 06:46:39 +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:*16ca1acf-a16e-48f1-bd76-4d34162a50aa,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-workflowtdgn9/series-workflowtdgn9-convert-artifact-4285622717/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": "68f2f579-25ff-44cf-a2b5-1c2843996858", "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-workflowtdgn9/series-workflowtdgn9-build-action-566924019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 06:29:59 +0000 UTC FinishedAt: 2026-09-07 06:46:29 +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:*16ca1acf-a16e-48f1-bd76-4d34162a50aa,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-workflowtdgn9/series-workflowtdgn9-convert-artifact-4285622717/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": "68f2f579-25ff-44cf-a2b5-1c2843996858", "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-workflowtdgn9/series-workflowtdgn9-build-action-566924019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 06:46:39 +0000 UTC FinishedAt: 2026-09-07 06:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 06:46:39 +0000 UTC FinishedAt: 2026-09-07 06:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 06:46:39 +0000 UTC FinishedAt: 2026-09-07 06:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 06:46:39 +0000 UTC FinishedAt: 2026-09-07 06:46:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtdgn9/series-workflowtdgn9-convert-artifact-3880588312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 06:46:49 +0000 UTC FinishedAt: 2026-09-07 06:48:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 06:46:49 +0000 UTC FinishedAt: 2026-09-07 06:48:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*68f2f579-25ff-44cf-a2b5-1c2843996858,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-workflowtdgn9/series-workflowtdgn9-build-action-566924019/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-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 06:48:51 +0000 UTC FinishedAt: 2026-09-07 06:48:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 06:48:51 +0000 UTC FinishedAt: 2026-09-07 06:48:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 06:48:51 +0000 UTC FinishedAt: 2026-09-07 07:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 06:48:51 +0000 UTC FinishedAt: 2026-09-07 07:05:40 +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:*16ca1acf-a16e-48f1-bd76-4d34162a50aa,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-workflowtdgn9/series-workflowtdgn9-convert-artifact-3880588312/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": "b0f79d2f-673d-477c-bb06-136a75f5334b", "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-workflowtdgn9/series-workflowtdgn9-build-action-2143317124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 06:48:51 +0000 UTC FinishedAt: 2026-09-07 07:05:30 +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:*16ca1acf-a16e-48f1-bd76-4d34162a50aa,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-workflowtdgn9/series-workflowtdgn9-convert-artifact-3880588312/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": "b0f79d2f-673d-477c-bb06-136a75f5334b", "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-workflowtdgn9/series-workflowtdgn9-build-action-2143317124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 07:05:40 +0000 UTC FinishedAt: 2026-09-07 07:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 07:05:40 +0000 UTC FinishedAt: 2026-09-07 07:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 07:05:40 +0000 UTC FinishedAt: 2026-09-07 07:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 07:05:40 +0000 UTC FinishedAt: 2026-09-07 07:07:32 +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:*b0f79d2f-673d-477c-bb06-136a75f5334b,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-workflowtdgn9/series-workflowtdgn9-build-action-2143317124/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-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 07:07:42 +0000 UTC FinishedAt: 2026-09-07 10:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 07:07:42 +0000 UTC FinishedAt: 2026-09-07 10:09:02 +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_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"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:*68f2f579-25ff-44cf-a2b5-1c2843996858,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0f79d2f-673d-477c-bb06-136a75f5334b,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-workflowtdgn9/series-workflowtdgn9-build-action-566924019/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-workflowtdgn9/series-workflowtdgn9-build-action-2143317124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 07:07:42 +0000 UTC FinishedAt: 2026-09-07 07:07:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 07:07:42 +0000 UTC FinishedAt: 2026-09-07 07:07:47 +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_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"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-workflowtdgn9/series-workflowtdgn9-convert-artifact-249205745/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 07:07:42 +0000 UTC FinishedAt: 2026-09-07 07:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 07:07:42 +0000 UTC FinishedAt: 2026-09-07 07:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 07:07:42 +0000 UTC FinishedAt: 2026-09-07 07:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 07:07:52 +0000 UTC FinishedAt: 2026-09-07 10:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtdgn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update","bpf_prog_attach_check_attach_type","bpf_prog_attach_check_perm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0ca562e0d05cf7afedcfa71c9aed180b72bcc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"963fd7bb-85a3-477f-a50e-579902071249","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 07:07:52 +0000 UTC FinishedAt: 2026-09-07 10:08:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*68f2f579-25ff-44cf-a2b5-1c2843996858,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0f79d2f-673d-477c-bb06-136a75f5334b,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-workflowtdgn9/series-workflowtdgn9-build-action-566924019/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-workflowtdgn9/series-workflowtdgn9-build-action-2143317124/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-workflowtdgn9/series-workflowtdgn9-convert-artifact-249205745/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,}