Name: series-workflow8ldmc Phase: Succeeded StartedAt: 2026-09-04 18:43:46 +0000 UTC FinishedAt: 2026-09-04 22:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[0] Phase: Succeeded StartedAt: 2026-09-04 18:43:46 +0000 UTC FinishedAt: 2026-09-04 19:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 18:43:46 +0000 UTC FinishedAt: 2026-09-04 19:06:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "e20e078a-0589-4df5-814b-a67cb42f8446" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_destroy", "tcp_abort" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIG9ubHkgY2hlY2sgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCB3aGVuIGBza19mdWxsc29jayhzaylgIGlzIHRydWUsIGFsbG93aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB3aXRoIGEgdmFsaWQgYHNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJbiBmYWN0LCBjaGVja2luZyBgc2tfZnVsbHNvY2soKWAgYXZvaWRzIHJlYWRpbmcgZmllbGRzIGJleW9uZCBgc29ja19jb21tb25gIGZvciBtaW5pYXR1cmUgc29ja2V0cy4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIHNvY2tldCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgb3IgbG9ja2luZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0ZTQ1NWJhYTY3MTMwMGQyNTk3OTllOGVhZjQzZTAxYTlmZDg3MmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE5OjA0OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICYjNDM7MTI5MTIsOCBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuICAqXG4gICogUmV0dXJuOlxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxuLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbiYjNDM7ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgRUlOVkFMLlxuJiM0MzsgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI1LDggJiM0MzsxMjkyNSwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4gXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XG4gXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxuIFx0ICovXG4tXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95IHx8IChzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0ICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxuJiM0MztcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbmluZGV4IDljMTE5MzhmZTU5N2QuLjZjY2M3Y2RhNDEwYmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbkBAIC0xMTAsNiAmIzQzOzExMCw2NSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiYjNDM7e1xuJiM0MztcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbiYjNDM7XHRjaGFyIGJ1ZlsxXTtcbiYjNDM7XG4mIzQzO1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwmIzM0O3N0YXJ0X3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCYjMzQ7Y29ubmVjdF90b19mZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcJiMzNDtzZXJ2IGFjY2VwdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4mIzQzO1x0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxuJiM0MztcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4mIzQzO1x0ICogY2FuJiMzOTt0IHJhY2UgdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHR2KSksIFwmIzM0O2NsZWFyIHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwmIzM0O2NsaWVudCBzaHV0ZG93blwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbiYjNDM7XHRhY2NlcHRfc2VydiA9IC0xO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4mIzQzO1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwmIzM0O2NsaWVudCByZWN2IEVPRlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoY2xpZW4gIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShjbGllbik7XG4mIzQzO1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGlmIChzZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2Uoc2Vydik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgJiM0MzsyNjMsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0Y3Bfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3RjcF90aW1ld2FpdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VkcF9jbGllbnRcJiMzNDspKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt1ZHBfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF91ZHBfc2VydmVyKHNrZWwpO1xuLVxuIFx0UlVOX1RFU1RTKHNvY2tfZGVzdHJveV9wcm9nX2ZhaWwpO1xuIFxuIGNsZWFudXA6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuQEAgLTcsNiAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4gXG4gX19iZTE2IHNlcnZfcG9ydCA9IDA7XG4mIzQzO2ludCB0d19mb3VuZCA9IDA7XG4mIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICYjNDM7MTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtpdGVyL3RjcFwmIzM0OylcbiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtXHUwMDNlc2tfY29tbW9uO1xuJiM0MztcdF9fdTY0ICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghc2tfY29tbW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4mIzQzO1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dHdfZm91bmQmIzQzOyYjNDM7O1xuJiM0MztcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtpdGVyL3VkcFwmIzM0OylcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicGZfc29ja19kZXN0cm95KCkgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gYWxsb3cgcHJvdG9jb2wgYWJvcnQgaGFuZGxlcnMgKGUuZy4sIHRjcF9hYm9ydCkgdG8gZGVzdHJveSBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgYW5kIFNZTl9SRUNWIHNvY2tldHMpIGJ5IHF1YWxpZnlpbmcgdGhlIHByb3RvY29sIGNoZWNrIHdpdGggc2tfZnVsbHNvY2soKS4gVGhpcyBlbmFibGVzIG5ldyBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIHRocm91Z2ggQlBGIHNvY2tldCBpdGVyYXRvciBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxOTowNDoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uMWJiYjcyMTM4YWM2NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTEyOTEyLDggJiM0MzsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWQKICAqCiAgKiBSZXR1cm46Ci0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC4KLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBFSU5WQUwuCiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KICAqIDAgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKQEAgLTEyOTI1LDggJiM0MzsxMjkyNSwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCiAJICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dAogCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCiAJICovCi0JaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwotCQkJCQkgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCmluZGV4IDljMTE5MzhmZTU5N2QuLjZjY2M3Y2RhNDEwYmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCkBAIC0xMTAsNiAmIzQzOzExMCw2NSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogCQljbG9zZShzZXJ2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0ge307CiYjNDM7CWNoYXIgYnVmWzFdOwomIzQzOwomIzQzOwlzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNlcnYsIDAsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgJiMzNDtzZXJ2IGFjY2VwdCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2UKJiM0MzsJICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudAomIzQzOwkgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveAomIzQzOwkgKiBjYW4mIzM5O3QgcmFjZSB1cy4KJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX09LKHNldHNvY2tvcHQoY2xpZW4sIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3R2LAomIzQzOwkJCQkgIHNpemVvZih0dikpLCAmIzM0O2NsZWFyIHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksICYjMzQ7Y2xpZW50IHNodXRkb3duJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gLTE7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi8KJiM0MzsJbiA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O2NsaWVudCByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMSwgJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlBU1NFUlRfT0soc2tlbC0mZ3Q7YnNzLSZndDt0d19kZXN0cm95X2VyciwgJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2smIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDAsICYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIHsKIAlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDsKQEAgLTIwNCwxMSAmIzQzOzI2MywxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpCiAJCXRlc3RfdGNwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdGNwX3NlcnZlcihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfdGltZXdhaXQmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF90aW1ld2FpdChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9jbGllbnQmIzM0OykpCiAJCXRlc3RfdWRwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdWRwX3NlcnZlcihza2VsKTsKLQogCVJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiAKIF9fYmUxNiBzZXJ2X3BvcnQgPSAwOwomIzQzO2ludCB0d19mb3VuZCA9IDA7CiYjNDM7aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDsKIAogaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltOwogCkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7aXRlci90Y3AmIzM0OykKJiM0MztpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC0mZ3Q7c2tfY29tbW9uOwomIzQzOwlfX3U2NCAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFza19jb21tb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHNrX2NvbW1vbi0mZ3Q7c2tjX2ZhbWlseSAhPSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGNwX2Nvbm5fc29ja2V0cywgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwkvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovCiYjNDM7CWlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXR3X2ZvdW5kJiM0MzsmIzQzOzsKJiM0MzsJdHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAogU0VDKCYjMzQ7aXRlci91ZHAmIzM0OykKIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgcGF0Y2ggd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIHBhdGNoIGl0c2VsZiwgdGhlbiBJJiMzOTtsbCBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgQlBGIGFuZCBzb2NrZXQgaW50ZXJuYWxzIHRvIGFzc2VzcyBpdHMgaW1wYWN0LgoKVGhlIGNoYW5nZSBpbiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIFRoZSBjb2RlIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHJlc3RyaWN0IGl0cyB1c2UsIHBhcnRpY3VsYXJseSBmb3Igc29ja2V0cyBiZXlvbmQgVENQIGFuZCBVRFAuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIHRoYXQgYWxsb3dlZCB0aGUgZnVuY3Rpb24gdG8gcHJvY2VlZCBpZiBgZGlhZ19kZXN0cm95YCB3YXMgbm90IGltcGxlbWVudGVkLiBOb3csIGEgcmV0dXJuIG9mIGAtRU9QTk9UU1VQUGAgb2NjdXJzIGlmIGBkaWFnX2Rlc3Ryb3lgIGlzbiYjMzk7dCBpbXBsZW1lbnRlZCBhbmQgdGhlIHNvY2tldCBpcyBub3QgVENQIG9yIFVEUC4gRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIGFuIGFkZGVkIGNoZWNrIHVzaW5nIGBza19mdWxsc29ja2AsIHdoaWNoIGluZGljYXRlcyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIG1vcmUgbGltaXRlZCB0byBmdWxsIHNvY2tldHMgb3RoZXIgdGhhbiBUQ1AvVURQLgoKVGhlIGNvbW1lbnQgaGlnaGxpZ2h0aW5nICYjMzQ7bG9ja2luZyBzZW1hbnRpY3MmIzM0OyBhbmQgY29uY3VycmVudCBleGVjdXRpb24gaXMgYSBrZXkgcmVkIGZsYWcsIG9mIGNvdXJzZS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHNvY2tldCB0ZWFyZG93biB3aXRoaW4gQlBGIGNvbnRleHRzLiBTdXBwb3J0aW5nIHByb3RvY29scyBtdXN0IG5vdyBhY3F1aXJlIHRoZSBzb2NrIGxvY2sgdG8gZW5zdXJlIHNhZmV0eS4KClRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgYnBmX3NvY2tfZGVzdHJveWAgaXMgKnVzZWQqIHdpdGhpbiB0aGlzIGZpbGUgYW5kIHBvdGVudGlhbGx5IGluIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXJvdW5kIHRoaXMgZnVuY3Rpb24gdG8gc2VlIHdoZXJlIGl0IGlzIGNhbGxlZCBhbmQgaG93IGl0cyByZXR1cm4gdmFsdWVzIGFyZSBoYW5kbGVkLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IGV4aXN0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhpcyBmdW5jdGlvbmFsaXR5PyBIb3cgYXJlIHRoZXkgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgZGVwZW5kIG9uIHRoaXMga2Z1bmM/IEkgbmVlZCB0byB0cmFjayBkb3duIHRob3NlIHVzZXMuCgpNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpcyBzb3VuZCwgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSByZWdyZXNzaW9ucywgYW5kIGlmIGl0JiMzOTtzIHByb3Blcmx5IGRvY3VtZW50ZWQuIEEgdGhvcm91Z2ggcmV2aWV3IHdpbGwgcmVxdWlyZSBsb29raW5nIGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IHJlc3RyaWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwNTpcdCAqIFRoZSBmdW5jdGlvbiBleHBlY3RzIGEgbm9uLU5VTEwgcG9pbnRlciB0byBhIHNvY2tldCwgYW5kIGludm9rZXMgdGhlXG4xMjkwNjpcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxuMTI5MDc6XHQgKlxuMTI5MDg6XHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxuMTI5MDk6XHQgKiBsb2Nrcy5cbjEyOTEwOlx0ICpcbjEyOTExOlx0ICogUGFyYW1ldGVyczpcbjEyOTEyOlx0ICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuMTI5MTM6XHQgKlxuMTI5MTQ6XHQgKiBSZXR1cm46XG4xMjkxNTpcdCAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cbjEyOTE2Olx0ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbjEyOTE3Olx0ICogMCBvdGhlcndpc2VcbjEyOTE4Olx0ICovXG4xMjkxOTpcdF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbjEyOTIwOlx0e1xuMTI5MjE6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7XG4xMjkyMjpcdFxuMTI5MjM6XHRcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXG4xMjkyNDpcdFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxuMTI5MjU6XHRcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbjEyOTI2Olx0XHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxuMTI5Mjc6XHRcdCAqL1xuMTI5Mjg6XHRcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4xMjkyOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjkzMDpcdFxuMTI5MzE6XHRcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4xMjkzMjpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuMTI5MzM6XHRcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjEyOTM0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTM1Olx0XG4xMjkzNjpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xuMTI5Mzc6XHR9XG4xMjkzODpcdFxuMTI5Mzk6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuMTI5NDA6XHRcbjEyOTQxOlx0QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0MjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxuMTI5NDM6XHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBicGZfc29ja19kZXN0cm95YCBpcyBhIEJQRiBrZnVuYywgcGFydCBvZiB0aGUgc3RhbmRhcmQgQlBGIHRvb2xraXQgdXNlZCB0byBjbGVhbiB1cCBzb2NrZXQgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IHRob3NlIGFjY2Vzc2VkIHRocm91Z2ggc29ja2V0IGFuZCBCUEYgaXRlcmF0b3JzLiBJIHJlY2FsbCB0aGF0LCBwcmV2aW91c2x5LCBpdHMgdXNhZ2Ugd2FzIHJhdGhlciByZXN0cmljdGVkLCByZXF1aXJpbmcgdGhhdCB0aGUgc29ja2V0JiMzOTtzIHByb3RvY29sIGJlIGVpdGhlciBUQ1Agb3IgVURQLiBUaGUgY29kZSBzbmlwcGV0IGlzIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgaGVyZS4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBzb2NrZXRzIHRoYXQgYXJlbiYjMzk7dCBmdWxseSBmb3JtZWTigJRsZXQmIzM5O3MgY2FsbCB0aGVtICYjMzQ7bm9uLWZ1bGxzb2NrJiMzNDsgc29ja2V0c+KAlHNwZWNpZmljYWxseSwgdGltZXdhaXQgc29ja2V0cywgcmVxdWVzdCBzb2NrZXRzIGFuZCB0aGUgbGlrZS4gTm93LCB0aGUgYHNrX3Byb3RvY29sYCBmaWVsZCwgdGhlIG9uZSB1c2VkIHRvIHZhbGlkYXRlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggVENQIG9yIFVEUCwgZG9lc24mIzM5O3QgYWx3YXlzIGV4aXN0IGF0IHRoZSBzYW1lIG9mZnNldCBpbiB0aGUgYHNvY2tfY29tbW9uYCBzdHJ1Y3R1cmUgZm9yIHRoZXNlICYjMzQ7cGFydGlhbCYjMzQ7IHNvY2tldCB0eXBlcy4gRnVydGhlcm1vcmUsIGNhbGxpbmcgYHNrX2Z1bGxzb2NrKHNrKWAgcmV0dXJucyBmYWxzZSBmb3IgdGhlc2Ugc29ja2V0IHR5cGVzLiBUaGlzIGlzIHdoZXJlIHRoZSBpc3N1ZSBjYW1lIGluLgoKVGhlIGZpeCBJJiMzOTttIGxvb2tpbmcgYXQgdXRpbGl6ZXMgYHNrX2Z1bGxzb2NrKHNrKWAuIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlIGtmdW5jIHdvdWxkIGhhdmUgZmFpbGVkIGluIHRob3NlIHNpdHVhdGlvbnMuIEJ1dCBieSB1c2luZyBgc2tfZnVsbHNvY2soc2spYCBhcyBhIGNoZWNrLCB0aGUgY29kZSBub3cgKmNvbmRpdGlvbmFsbHkqIGFwcGxpZXMgdGhlIHByb3RvY29sIGNoZWNrLiBUaGlzIGFsbG93cyB0aGUga2Z1bmMgdG8gY29ycmVjdGx5IGRlc3Ryb3kgdGhlc2UgdGltZXdhaXQgc29ja2V0cywgZXZlbiB3aGVuIHRoZSBgc2tfcHJvdG9jb2xgIGZpZWxkIGlzbiYjMzk7dCByZWxpYWJseSBhdmFpbGFibGUgaW4gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLCBvciBhdCBhbGwuIEkgY2FuIHNlZSBob3cgdGhpcyBjYW4gYmUgdXNlZnVsIGluIGZ1bmN0aW9ucyBsaWtlIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgLCBgdGNwX2RpYWdfZGVzdHJveWAsIGFuZCBgaW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0YC4gVGhlIG5ldyBjb2RlIGhhbmRsZXMgdGhlc2UgdHlwZXMgb2Ygc29ja2V0cyBieSBkZXN0cm95aW5nIHRoZW0gbm93IHRoYXQgYHNrX2Z1bGxzb2NrKHNrKWAgaXMgYmVpbmcgdXNlZCB0byB2YWxpZGF0ZSBmaXJzdC4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGhvdyBgZGlhZ19kZXN0cm95YCBpcyBpbXBsZW1lbnRlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGJyb2FkZXIgaW1wYWN0IG9yIGlmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgdHJlbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuZGlhZ19kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3Jhdy5jPTk0OD1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxubmV0L2lwdjQvcmF3LmM6OTczOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2NC9yYXcuYy05NzQtfTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3My1cdC5vYmpfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XG4tLVxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxubmV0L2lwdjYvcmF3LmM6MTIzMjpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTk0MC1cdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjYvdWRwLmMtMTk0Mi19O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgYSBCUEYga2Z1bmMsIHRoYXQgaXMgaW1wb3J0YW50IGFzIGl0IGlzIGEgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgZnVuY3Rpb24gdGhhdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBicGYoKWAgYW5kIGl0ZXJhdG9yIGZpbGUgZGVzY3JpcHRvcnMuIFFFTVUgYW5kIEdDRSBhcmUgc3RhbmRhcmQgdGFyZ2V0cyBmb3IgdGhpcyB0eXBlIG9mIHdvcmssIHNvIHRoYXQmIzM5O3MgZ29vZC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBjaGFuZ2UgbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgJiMzOTtzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgaXQgdG8gZGVzdHJveSAqbm9uLWZ1bGwqIHNvY2tldHMsIGxpa2UgVElNRV9XQUlUIHNvY2tldHMsIGZvciBleGFtcGxlLCB3aGljaCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgdGNwX2Fib3J0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGV4ZWN1dGlvbiBwYXRocyBmb3Igc29ja2V0cyBpbiBUSU1FX1dBSVQgb3IgcmVxdWVzdCBzdGF0ZXMuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gU2VjdGlvbiAzIG9mIG15IGd1aWRlbGluZXMgYXJlOiBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgYW5kIHJlYWNoYWJsZSBjb2RlLiBUaGlzIGhpdHMgb24gJiMzNDtjb3JlIG5ldHdvcmtpbmcsJiMzNDsgJiMzNDtCUEYsJiMzNDsgYW5kIGlzIGRlZmluaXRlbHkgJiMzNDtyZWFjaGFibGUgY29kZSYjMzQ7IHNvIHRoZSBhbnN3ZXIgaXMgY2xlYXJseSBUUlVFLiBUaGlzIGlzIGEgdmVyeSBnb29kIHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIEZvY3VzU3ltYm9sczogYGJwZl9zb2NrX2Rlc3Ryb3lgIGl0c2VsZiwgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgaXMgdGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLiBBbmQgcmVsYXRlZCBmdW5jdGlvbnM/IGB0Y3BfYWJvcnRgIGlzIHRoZSBvYnZpb3VzIG9uZSwgb3IgaXMgaXQganVzdCB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoYXQgYHRjcF9hYm9ydGAgYWN0dWFsbHkgZG9lcyB3aXRoIFRJTUVfV0FJVCBzb2NrZXRzLiBOZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTcwND12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNzA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXG4tLVxubmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA5Nj1zdGF0aWMgdm9pZCB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExMS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjExMjpzdGF0aWMgaW50IHRjcF9hYm9ydF9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgZXJyKVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzA2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHRjcF9hYm9ydGAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIGB0Y3BfYWJvcnRgIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgb3ZlciB0byBgbmV0L2lwdjQvdGNwLmNgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHRjcF9hYm9ydGAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggb24gaG93IGl0IGhhbmRsZXMgdGhlIGFicnVwdCB0ZXJtaW5hdGlvbiBvZiBhIFRDUCBjb25uZWN0aW9uIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgY2xlYW51cCwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVENQIHN0YXRlIG1hY2hpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxMTU6XHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbjUxMTY6XHR7XG41MTE3Olx0XHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xuNTExODpcdFxuNTExOTpcdFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcbjUxMjA6XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XG41MTIxOlx0XG41MTIyOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMjM6XHRcdFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuNTEyNDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMjU6XHRcdFx0cmV0dXJuIDA7XG41MTI2Olx0XHR9XG41MTI3Olx0XHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xuNTEyODpcdFx0XHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XG41MTI5Olx0XG41MTMwOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ0dy1cdTAwM2V0d19yZWZjbnQpO1xuNTEzMTpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTMyOlx0XHRcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XG41MTMzOlx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEzNDpcdFx0XHRyZXR1cm4gMDtcbjUxMzU6XHRcdH1cbjUxMzY6XHRcbjUxMzc6XHRcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xuNTEzODpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTM5Olx0XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXG41MTQwOlx0XHRcdGxvY2tfc29jayhzayk7XG41MTQxOlx0XG41MTQyOlx0XHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cbjUxNDM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbjUxNDQ6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTQ1Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNDY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG41MTQ3Olx0XHR9XG41MTQ4Olx0XG41MTQ5Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGBicGZfc29ja19kZXN0cm95YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZml4IHJlbGF0ZWQgdG8gYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBzb2NrZXRzIGluIGRpZmZlcmVudCBzdGF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHBhdGNoIGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCBpdCYjMzk7cyBlbmFibGluZy4KCkZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB0Y3BfYWJvcnRgIGlzIGN1cnJlbnRseSBoYW5kbGVkLiBJIHNlZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgYGlmIChzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKWAuIFRoYXQmIzM5O3MgZ29vZCwgaXQgY29uZmlybXMgdGhhdCBgdGNwX2Fib3J0YCBpcyAqYWxyZWFkeSogd3JpdHRlbiB0byBkZWFsIHdpdGggYFRDUF9USU1FX1dBSVRgIHNvY2tldHMuIFNhbWUgZm9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgaXTigJlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgaW1wbGllcyB0aGVyZSYjMzk7cyBubyBpbmhlcmVudCBwcm9ibGVtIGluICp0Y3BfYWJvcnQqIGl0c2VsZi4gVGhlIGlzc3VlIG11c3QgYmUgaW4gKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIG9yIHBlcmhhcHMsICp3aGVuKi4KClRoZSB0ZXh0IHNheXMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgd2FzIHRoZSBibG9ja2VyLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIGNoZWNrICpiZWZvcmUqIHRoZSBgc2tfZnVsbHNvY2soc2spYCBjaGVjayB3aXRoaW4gYGJwZl9zb2NrX2Rlc3Ryb3koKWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjdWxwcml0LiBUaGF0IGNvbmRpdGlvbmFsIGxvZ2ljIHdhcyBwcmV2ZW50aW5nIGBicGZfc29ja19kZXN0cm95YCBmcm9tIGJlaW5nIGNhbGxlZCBvbiBzb2NrZXRzIGluIHN0YXRlcyBsaWtlIGBUQ1BfVElNRV9XQUlUYCwgd2hpY2ggYXJlIG5vdCAqZnVsbCogc29ja2V0cy4gVGhlIGZpeCBpcyBub3cgYWxsb3dpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIG9wZXJhdGUgb24gKm5vbi1mdWxsKiBzb2NrZXRzLiBNYWtlcyBzZW5zZSwgdGhhdCBhbGxvd3MgdGhlIGNsZWFudXAgb2YgdGhlc2Ugc29ja2V0IHN0cnVjdHVyZXMuCgpOb3csIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc29ja19kZXN0cm95YCBpcyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgY29tcGlsZWQuIExldCYjMzk7cyBmaW5kIG91dCBhYm91dCB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMsIEkmIzM5O2xsIGdvIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNlYXJjaCBhcm91bmQgbGluZSAxMjkwMCBvciB1c2UgYSBkaXJlY3Qgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIHJldmVhbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhhdCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgcHJvcGVybHkgZW5hYmxlZCBmb3IgdGhlIHJlbGV2YW50IEJQRiBpdGVyYXRvciB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyOTM5PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MzpCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0NC1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQ1PXN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ2LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQ3Olx0aWYgKGJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDgtXHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTU1Olx0LnNldCAgID0gXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTYtXHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZWdpc3RyYXRpb24gb2YgYGJwZl9za19pdGVyX2tmdW5jX3NldGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc2tfaXRlcl9rZnVuY19zZXRgIGlzIGFjdHVhbGx5IHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBCUEYgZnVuY3Rpb25zLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyB0aG9zZSBgI2lmZGVmYCBibG9ja3Mg4oCTIHRoYXQgbWlnaHQgZ292ZXJuIGl0cyBpbmNsdXNpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdHMgYXZhaWxhYmlsaXR5IGlzIHRpZWQgdG8gc29tZSBzcGVjaWZpYyBmZWF0dXJlIG9yIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkgd2FudCB0byBpZGVudGlmeSB0aG9zZSBjb25kaXRpb25zIGJlY2F1c2UgaXQgZ2l2ZXMgbWUgY29udGV4dCBvbiBpdHMgcHVycG9zZSwgdXNhZ2UgcmVxdWlyZW1lbnRzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGVudmlyb25tZW50IHRoZSBmdW5jdGlvbiBleHBlY3RzIHRvIHdvcmsgd2l0aGluLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBpbmZvcm0gYW55IGZ1cnRoZXIgYW5hbHlzaXMsIGRlYnVnZ2luZywgb3IgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IG5lZWQgdG8gcGVyZm9ybSBvbiByZWxhdGVkIEJQRiBjb2RlLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgdHJhY2luZyB0aG9zZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjk0MDpcdFxuMTI5NDE6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0MzpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ0Olx0XG4xMjk0NTpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ2Olx0e1xuMTI5NDc6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ4Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbjEyOTQ5Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTI5NTA6XHRcdHJldHVybiAwO1xuMTI5NTE6XHR9XG4xMjk1MjpcdFxuMTI5NTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xuMTI5NTQ6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTI5NTU6XHRcdC5zZXQgICA9IFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcbjEyOTU2Olx0XHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcbjEyOTU3Olx0fTtcbjEyOTU4Olx0XG4xMjk1OTpcdHN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbjEyOTYwOlx0e1xuMTI5NjE6XHRcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbjEyOTYyOlx0fVxuMTI5NjM6XHRsYXRlX2luaXRjYWxsKGluaXRfc3Vic3lzdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMsIHNwZWNpZmljYWxseSBgI2lmZGVmYCBwcmVwcm9jZXNzb3Igc3RhdGVtZW50cywgc3Vycm91bmRpbmcgdGhlIGBpbml0X3N1YnN5c3RlbWAgb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIGNvZGViYXNlLCB0aGlzIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBwb3RlbnRpYWwgYnVpbGQtdGltZSB2YXJpYXRpb25zIGluIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBtaWdodCBiZSBpbml0aWFsaXplZCBvciB0b3JuIGRvd24uIEtub3dpbmcgdGhpcywgYW5kIGhhdmluZyBsb29rZWQgYXQgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBuZXR3b3JrIGZpbHRlciwgSSBoYXZlIGEgZ29vZCBpZGVhIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcsIGFuZCBhcm91bmQgbGluZSAxMjkwMCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwb2ludCB0byBiZWdpbiBteSBzY2FuLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMsIG9yIHRoZWlyIGJlaGF2aW9yLCBhcmUgcG90ZW50aWFsbHkgY29udHJvbGxlZCBieSBidWlsZCBjb25maWd1cmF0aW9ucyBvciBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiB0aGUga2VybmVsLCBhbmQgdW5kZXJzdGFuZGluZyB0aGVzZSBjb25kaXRpb25hbCBibG9ja3MgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIG9yIHBvcnRpbmcgQlBGLXJlbGF0ZWQgY29kZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyODkwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG4xMjg5MTpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xuMTI4OTI6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG4xMjg5MzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuMTI4OTQ6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcbjEyODk1Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xuMTI4OTY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuMTI4OTc6XHRcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbjEyODk4Olx0fVxuMTI4OTk6XHRsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcbjEyOTAwOlx0XG4xMjkwMTpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbjEyOTAyOlx0XG4xMjkwMzpcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxuMTI5MDQ6XHQgKlxuMTI5MDU6XHQgKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gYSBzb2NrZXQsIGFuZCBpbnZva2VzIHRoZVxuMTI5MDY6XHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cbjEyOTA3Olx0ICpcbjEyOTA4Olx0ICogVGhlIGhlbHBlciBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBCUEYgY29udGV4dHMgdGhhdCBoYXZlIGFjcXVpcmVkIHRoZSBzb2NrZXRcbjEyOTA5Olx0ICogbG9ja3MuXG4xMjkxMDpcdCAqXG4xMjkxMTpcdCAqIFBhcmFtZXRlcnM6XG4xMjkxMjpcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbjEyOTEzOlx0ICpcbjEyOTE0Olx0ICogUmV0dXJuOlxuMTI5MTU6XHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBFSU5WQUwuXG4xMjkxNjpcdCAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4xMjkxNzpcdCAqIDAgb3RoZXJ3aXNlXG4xMjkxODpcdCAqL1xuMTI5MTk6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzcwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgTmV0d29yayBDb3JlIE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCBob3cgYGZpbHRlci5jYCBnZXRzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgcmVzaWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuZWFydGggaW4gdGhlcmUuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IE1ha2VmaWxlIGFuZCBodW50IGRvd24gdGhlIHJlbGV2YW50IHNlY3Rpb24uLi4gZ290dGEgZmluZCB0aG9zZSBidWlsZCBkaXJlY3RpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXHUwMDNjbGFmb3JnZUBuZXRmaWx0ZXIub3JnXHUwMDNlIDA0MDQxOVxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFx1MDAzY2Fyb25AaHAuY29tXHUwMDNlIDA0MDYwNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgQlBGX1NZU0NBTEwgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBwcmVzZW5jZSBvZiBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBvciBkZWZpbml0aW9uIG9mIGBCUEZfU1lTQ0FMTGAgbWlnaHQgYmUgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBrZXJuZWwgdmVyc2lvbiwgb3Igb3RoZXIgY29tcGlsZS10aW1lIGZsYWcuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYCNkZWZpbmVgIHVzYWdlIHN1cnJvdW5kaW5nIHRoaXMgbWFjcm8uIFRoZSBwdXJwb3NlIG9mIHRoaXMgY291bGQgYmUgYSBjb21wYXRpYmlsaXR5IG1lYXN1cmUgZm9yIG9sZGVyIGtlcm5lbHMsIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSwgc28gaXQgaXMgbmVjZXNzYXJ5IHRvIGRldGVybWluZSBleGFjdGx5IHdoYXQgdGhpcyBtZWFucy4gVGhpcyBpcyBvZnRlbiB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBsYW5kc2NhcGUuIFRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbHMgaGVyZSB3b3VsZCBpbW1lZGlhdGVseSByYWlzZSBzb21lIHF1ZXN0aW9ucyBpbiBteSBtaW5kIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwb3J0YWJpbGl0eSwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciB0aGUgc3RhYmlsaXR5IG9mIEJQRi1yZWxhdGVkIGNvZGUuIExldCYjMzk7cyBzdGFydCB0aGUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz00NTM0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NTM1LVxubmV0L2NvcmUvZmlsdGVyLmM6NDUzNjojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG5uZXQvY29yZS9maWx0ZXIuYy00NTM3LXZvaWQgeGRwX2RvX2NoZWNrX2ZsdXNoZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAgYW5kIEJQRl9TWVNDQUxMKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIGFueSBndWFyZGluZyBjb25kaXRpb25zLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIEJQRiwgYW5kIGdpdmVuIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgdGhlIHVzZSBvZiBgQlBGX1NZU0NBTExgIGlzIGltcG9ydGFudCBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHdoYXQgY29uZGl0aW9uYWwgbG9naWMgaXMgd3JhcHBlZCBhcm91bmQgaXRzIHVzZS4gQXJlIHdlIHVzaW5nIGEgYCNpZmRlZmAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hhdCBjb25kaXRpb25zIG11c3QgYmUgbWV0IGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIGV2ZW4gY29uc2lkZXJlZCBhdCBjb21waWxlIHRpbWUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBvdGVudGlhbCBpbXBhY3QgYW5kIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGVuYWJsZWQgYnkgYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbiwgbWF5YmUgYSBmZWF0dXJlIGZsYWcuLi4gS25vd2luZyB0aG9zZSBkZXRhaWxzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gZXZhbHVhdGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00OTQ9dHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDctICAgICAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjUwODogICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfdGFza19rZnVuY19zZXQpO1xuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDktICAgICAgICB9XG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jPTEyMjc9c3RhdGljIHZvaWQgX19pbml0IHdha2V1cF9zb3VyY2VzX2JwZl9pbml0KHZvaWQpXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtMTIyOC17XG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM6MTIyOTpcdGlmIChyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2d2FrZXVwX3NvdXJjZV9rZnVuY19zZXQpKVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jLTEyMzAtXHRcdHBtX3ByX2RiZyhcJiMzNDtXYWtldXA6IGZhaWxlZCB0byByZWdpc3RlciBCVEYga2Z1bmNzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jPTY1OD1zdGF0aWMgaW50IF9faW5pdCBoaWRfYnBmX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY2Ny1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6NjY4Olx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmhpZF9icGZfa2Z1bmNfc2V0KTtcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjczLVxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2NzQ6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2aGlkX2JwZl9zeXNjYWxsX2tmdW5jX3NldCk7XG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY3NS1cdGlmIChlcnIpIHtcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0zMjE9c3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zMjIte1xuZnMvYmluZm10X21pc2NfYnBmLmM6MzIzOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzI0LVx0XHRcdFx0XHQgXHUwMDI2Ym1fYnBmX2tmdW5jX3NldCk7XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ5Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk1LVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5NjpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ5Ny1cdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk4LVx0XHRyZXR1cm4gcmV0O1xuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5OTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbmZzL2JwZl9mc19rZnVuY3MuYy01MDAtXHRcdFx0XHRcdCBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE4Nj12b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODcte1xuZnMvdmVyaXR5L21lYXN1cmUuYzoxODg6XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcdTAwMjZicGZfZnN2ZXJpdHlfc2V0KTtcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2J0Zi5oPTU4Nz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTg4LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnRmLmg6NTg5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTU5MC1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcyk7XG4tLVxuaW5jbHVkZS9saW51eC9idGYuaD02NDc9c3RhdGljIGlubGluZSB1MzIgKmJ0Zl9rZnVuY19pZF9zZXRfY29udGFpbnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmluY2x1ZGUvbGludXgvYnRmLmgtNjUzLX1cbmluY2x1ZGUvbGludXgvYnRmLmg6NjU0OnN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjU1LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKnMpXG4tLVxuaW9fdXJpbmcvYnBmLW9wcy5jPTEyMD1zdGF0aWMgaW50IGJwZl9pb19pbml0KHN0cnVjdCBidGYgKmJ0Zilcbi0tXG5pb191cmluZy9icGYtb3BzLmMtMTI5LVxuaW9fdXJpbmcvYnBmLW9wcy5jOjEzMDpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuaW9fdXJpbmcvYnBmLW9wcy5jLTEzMS1cdFx0XHRcdFx0XHUwMDI2YnBmX2lvX3VyaW5nX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTExMzE9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzIte1xua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC19XG4tLVxua2VybmVsL2JwZi9idGYuYz04OTAyPXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg5NDgtXHRzZXQgPSB0YWItXHUwMDNlc2V0c1tob29rXTtcbmtlcm5lbC9icGYvYnRmLmM6ODk0OTpcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xua2VybmVsL2JwZi9idGYuYy04OTUwLVx0ICogZm9yIG1vZHVsZSBzZXRzLlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTE3Mz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODEtXG5rZXJuZWwvYnBmL2J0Zi5jOjkxODI6c3RhdGljIGludCBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxua2VybmVsL2JwZi9idGYuYy05MTgzLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTIwOC0vKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBvbmx5IGZyb20gaW5pdGNhbGxzL21vZHVsZSBpbml0IGZ1bmN0aW9ucyAqL1xua2VybmVsL2JwZi9idGYuYzo5MjA5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMTAtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG4tLVxua2VybmVsL2JwZi9idGYuYy05MjIyLVx0aG9vayA9IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhwcm9nX3R5cGUpO1xua2VybmVsL2JwZi9idGYuYzo5MjIzOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChob29rLCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIyNC19XG5rZXJuZWwvYnBmL2J0Zi5jOjkyMjU6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjYtXG4tLVxua2VybmVsL2JwZi9idGYuYz05MjI4PWludCByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjkte1xua2VybmVsL2JwZi9idGYuYzo5MjMwOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCVEZfS0ZVTkNfSE9PS19GTU9EUkVULCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIzMS19XG4tLVxua2VybmVsL2JwZi9jcHVtYXNrLmM9NTE1PXN0YXRpYyBpbnQgX19pbml0IGNwdW1hc2tfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNS1cdHJldCA9IGJwZl9tZW1fYWxsb2NfaW5pdChcdTAwMjZicGZfY3B1bWFza19tYSwgc2l6ZW9mKHN0cnVjdCBicGZfY3B1bWFzayksIGZhbHNlKTtcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1Mjg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyOS1cdHJldHVybiAgcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhjcHVtYXNrX2R0b3JzLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zODgtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM4OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcnlwdG8uYzozOTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkyOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxua2VybmVsL2JwZi9jcnlwdG8uYy0zOTMtXHRcdFx0XHRcdCAgICAgICBcdTAwMjZjcnlwdF9pbml0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk5Ny1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5OTg6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk5OTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDM6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDQtXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGdlbmVyaWNfZHRvcnMsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwNi1cdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDc6XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFx1MDAyNmNvbW1vbl9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwOC19XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTIzMD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMxLXtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoyMzI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX21hcF9pdGVyX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMzLX1cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NTk9c3RhdGljIF9faW5pdCBpbnQgcnFzcGlubG9ja19yZWdpc3Rlcl9rZnVuY3Modm9pZClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2MC17XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NjE6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2cnFzcGlubG9ja19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzYyLX1cbi0tXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmM9NzY2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9yc3RhdF9rZnVuY19pbml0KHZvaWQpXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY3LXtcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYzo3Njg6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY5LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3JzdGF0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xMTYwPWludCBzY3hfY2lkX2tmdW5jX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2MS17XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnNjeF9rZnVuY19zZXRfaW5pdF9jaWRzKSA/Olxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTYzOlx0XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjQ6XHRcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MTE2NTpcdFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNnNjeF9rZnVuY19zZXRfY2lkKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2Ni19XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5OD1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzYtXHQgKiBrZnVuYyByZWdpc3RyYXRpb24gY2FuJiMzOTt0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTc3Olx0ICogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCgpIG5lZWRzIG1vc3Qgb2YgdGhlIHN5c3RlbSB0byBiZSB1cC5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzgtXHQgKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODYtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5ODc6XHRpZiAoKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk4OC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2VucXVldWVfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4OTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkwLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkyLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfY3B1X3JlbGVhc2UpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk0LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk2LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk4LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkgfHxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5OTk6XHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTAwMC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpIHx8XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDAxOlx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwMDItXHRcdFx0XHRcdCAgICAgXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1NTQ9aW50IHNjeF9pZGxlX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NTUte1xua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NjpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NzpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1ODpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1OTpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU2MDpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KTtcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NjEtfVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNDU5PXN0YXRpYyBpbnQgX19pbml0IGJwZl90cmFjZV9rZnVuY3NfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDYyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM0NjM6XHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0tQUk9CRSwgXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY0Olx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM0NjUtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0xODI9c3RhdGljIGludCBfX2luaXQgYnBmX21lbWNvbnRyb2xfaW5pdCh2b2lkKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmMtMTg1LVxubW0vYnBmX21lbWNvbnRyb2wuYzoxODY6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODctXHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE4ODg9c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xOTAyLVx0cmV0ID0gcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTAzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTA0Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE5MDYtXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfcHJvZ190ZXN0X2R0b3Jfa2Z1bmMsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzE2LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE3Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTgtXHRcdFx0XHRcdFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxOTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG5uZXQvY29yZS9icGZfa3NvY2suYzozMjE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzU9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg3OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyODc5Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODA6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODk6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk0LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk3Olx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTgtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU5PXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYxOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19zZXQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjItfVxuLS1cbm5ldC9jb3JlL3hkcC5jPTk5Mz1zdGF0aWMgaW50IF9faW5pdCB4ZHBfbWV0YWRhdGFfaW5pdCh2b2lkKVxubmV0L2NvcmUveGRwLmMtOTk0LXtcbm5ldC9jb3JlL3hkcC5jOjk5NTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZ4ZHBfbWV0YWRhdGFfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL3hkcC5jLTk5Ni19XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTM0NT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGNwX2NhX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUwLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XG4tLVxubmV0L2lwdjQvZm91X2JwZi5jPTExMz1pbnQgcmVnaXN0ZXJfZm91X2JwZih2b2lkKVxubmV0L2lwdjQvZm91X2JwZi5jLTExNC17XG5uZXQvaXB2NC9mb3VfYnBmLmM6MTE1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvaXB2NC9mb3VfYnBmLmMtMTE2LVx0XHRcdFx0XHQgXHUwMDI2Zm91X2JwZl9rZnVuY19zZXQpO1xuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTc1PXN0YXRpYyBpbnQgX19pbml0IGJicl9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgwLVxubmV0L2lwdjQvdGNwX2Jici5jOjExODE6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2dGNwX2Jicl9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2Jici5jLTExODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jPTUwMT1zdGF0aWMgaW50IF9faW5pdCBjdWJpY3RjcF9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNC1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jOjUzNTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZ0Y3BfY3ViaWNfa2Z1bmNfc2V0KTtcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IGRjdGNwX3JlZ2lzdGVyKHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjk5LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MzAwOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnRjcF9kY3RjcF9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2RjdGNwLmMtMzAxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01NDA9aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjU0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0Ni1cdGlmICghcmV0KSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jPTExNj1pbnQgbmZfZmxvd19yZWdpc3Rlcl9icGYodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0xMTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjExODpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTExOS1cdFx0XHRcdFx0IFx1MDAyNm5mX2Zsb3dfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYz02Nj1pbnQgcmVnaXN0ZXJfbmZfbmF0X2JwZih2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTY5LVxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzEtXHRcdFx0XHRcdFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03NC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjc1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03Ni1cdFx0XHRcdFx0IFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9NDYwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9xZGlzY19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ2OS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYzo0NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3FkaXNjX2tmdW5jX3NldCk7XG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDcxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhza2Jfa2Z1bmNfZHRvcnMsXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM9MTA2PWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9pbnRlcmZhY2VfYnBmKHZvaWQpXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDcte1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM6MTA4Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDktXHRcdFx0XHRcdCBcdTAwMjZ4ZnJtX2ludGVyZmFjZV9rZnVuY19zZXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM9MTMwPWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYodm9pZClcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmMtMTMxLXtcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM6MTMyOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jLTEzMy1cdFx0XHRcdFx0IFx1MDAyNnhmcm1fc3RhdGVfeGRwX2tmdW5jX3NldCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jPTI1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90ZXN0X21vZG9yZGVyX3hfaW5pdCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYzoyNzpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI4LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3Rlc3RfbW9kb3JkZXJfeF9zZXQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl95X2luaXQodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM6Mjc6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yOC1cdFx0XHRcdFx0IFx1MDAyNmJwZl90ZXN0X21vZG9yZGVyX3lfc2V0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jPTIxMzA9c3RhdGljIGludCBicGZfdGVzdG1vZF9pbml0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy0yMTQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQxOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX3NldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtMjE0Ni1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXHUwMDI2YnBmX3Rlc3Rtb2RfdHJhbXBvbGluZV9jb3VudF9mbW9kcmV0X3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgQlBGIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGEgZmV3IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGZvciBCUEYga2Z1bmMgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlc3NlbnRpYWxzOiBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgQlBGIGtmdW5jcyByZWx5IG9uIGJvdGggb2YgdGhlc2UgYmVpbmcgZW5hYmxlZC4gT2YgY291cnNlLCBgQ09ORklHX05FVGAgYW5kIGBDT05GSUdfSU5FVGAgYXJlIGFsc28gZnVuZGFtZW50YWwgZm9yIG5ldHdvcmtpbmctcmVsYXRlZCBCUEYgYXBwbGljYXRpb25zLiBUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoaXMgaW5mb3JtYXRpb24gYXJlIGluIGBpbml0L0tjb25maWdgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZXNlIGNvcmUgc2V0dGluZ3MgYmVmb3JlIGRpdmluZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gZGVlcGVyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgQlBGIGNvbnRyb2xzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgSSBjYW4gc3RhcnQgdW50YW5nbGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgZmVhdHVyZXMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBob3cgQlBGIGZpdHMgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gbXkgZmlyc3QgbW92ZSBpcyB0byBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBpcyBzZXQgdXAgaXMgY3J1Y2lhbCB0byBmaWd1cmluZyBvdXQgaXRzIGltcGFjdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGlzIGFzIEkgZXhwZWN0LiBJdCYjMzk7cyBhIHF1aWNrIGJ1dCBlc3NlbnRpYWwgc3RlcCB0byBhc3Nlc3MgaXRzIHByZXNlbmNlIG9yIGFic2VuY2UgYW5kIGl0cyBnZW5lcmFsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDU6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDQ2Olx0XHRzZWxlY3QgRVhFQ01FTVxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDQ5Olx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1MDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDUxOlx0XHQgIHByb2dyYW1zLlxuICA1MjpcdFxuICA1MzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTQ6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU1Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNTY6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA1OTpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBCVEYgSW5mb3JtYXRpb246IEEgS2NvbmZpZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlRGIGRlYnVnZ2luZyBzaXR1YXRpb24uIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyBgbGliL0tjb25maWcuZGVidWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGdhdGVrZWVwZXJzIGZvciBkZWJ1Zy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBCVEYuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB3aGVyZSB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gbGluZXMgYXJlIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJ1aWxkLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBJIGhhdmUgYXZhaWxhYmxlLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19JTkZPX0JURiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xubGliL0tjb25maWcuZGVidWctNDI5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBzb21lIGRlYnVnIHNldHRpbmdzIGluIHRoaXMgYnVpbGQuIExldCYjMzk7cyBzZWUuLi5JJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbGliL0tjb25maWcuZGVidWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDM5OCB0aHJvdWdoIDQyMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IGdvaW5nIHRvIGxheSBvdXQgc29tZSBjb25kaXRpb25hbCBsb2dpYyBvciBkZWZpbmUgc29tZSBtYWNyb3MgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgZmVhdHVyZXMuIEdpdmVuIHRoZSBmaWxlIG5hbWUsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRoaXMgYXJlYSBpcyBkZWRpY2F0ZWQgdG8gcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9ucyBmb3IgY29yZSBvciBmb3VuZGF0aW9uYWwgZGVidWdnaW5nIHBhcmFtZXRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBvZiB0aGVzZSB2YWx1ZXMgYW5kIHRoZWlyIGltcGFjdCBvbiBidWlsZCBzaXplIGFuZCBwZXJmb3JtYW5jZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgb3IgcG90ZW50aWFsIHR3ZWFrcyBhcmUgaGlkZGVuIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzk4Olx0Y29uZmlnIERFQlVHX0lORk9fQlRGXG4gMzk5Olx0XHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4gNDAwOlx0XHRkZXBlbmRzIG9uICFERUJVR19JTkZPX1NQTElUIFx1MDAyNlx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXG4gNDAxOlx0XHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXG4gNDAyOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gNDAzOlx0XHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFx1MDAzZT0gMTIyXG4gNDA0Olx0XHQjIHBhaG9sZSB1c2VzIGVsZnV0aWxzLCB3aGljaCBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIEhleGFnb24gcmVsb2NhdGlvbnNcbiA0MDU6XHRcdGRlcGVuZHMgb24gIUhFWEFHT05cbiA0MDY6XHRcdGhlbHBcbiA0MDc6XHRcdCAgR2VuZXJhdGUgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm9ybWF0aW9uIGZyb20gRFdBUkYgZGVidWcgaW5mby5cbiA0MDg6XHRcdCAgVHVybmluZyB0aGlzIG9uIHJlcXVpcmVzIHBhaG9sZSB2MS4yMiBvciBsYXRlciwgd2hpY2ggd2lsbCBjb252ZXJ0XG4gNDA5Olx0XHQgIERXQVJGIHR5cGUgaW5mbyBpbnRvIGVxdWl2YWxlbnQgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm8uXG4gNDEwOlx0XG4gNDExOlx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xuIDQxMjpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjNcbiA0MTM6XHRcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcbiA0MTQ6XHRcdGhlbHBcbiA0MTU6XHRcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxuIDQxNjpcdFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xuIDQxNzpcdFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxuIDQxODpcdFxuIDQxOTpcdGNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuIDQyMDpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjRcbiA0MjE6XHRcdGhlbHBcbiA0MjI6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NDQKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogNDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnBmX3NvY2tfZGVzdHJveWAsIHdoaWNoIGlzIHVzZWQgdG8gZGVzdHJveSBzb2NrZXRzIChUQ1AsIFVEUCwgdGhlIHVzdWFsIHN1c3BlY3RzKS4gVGhlIHN0YW5kYXJkIGBDT05GSUdfSU5FVGAgaXMsIG9mIGNvdXJzZSwgYSBnaXZlbi4gSXQgYWxzbyBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIGVzc2VudGlhbCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGZvY3VzZWQuIE15IG1haW4gdGFyZ2V0IGlzIGBicGZfc29ja19kZXN0cm95YC4gVGhlIG1vZGlmaWNhdGlvbiBpcyBpbiB0aGUga2VybmVsIGltYWdlLiBJdCBsb29rcyBsaWtlIGB0Y3BfYWJvcnRgIGlzIGNsb3NlbHkgcmVsYXRlZCwgYXMgaXQgaGFuZGxlcyBUSU1FX1dBSVQgc29ja2V0IGRlc3RydWN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGB0cmFjaW5nX2l0ZXJfZmlsdGVyYCBpcyBpbiB0aGUgc2FtZSBmaWxlIGJ1dCBpdCB3YXNuJiMzOTt0IG1vZGlmaWVkLiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgZm9jdXMuIFdlIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBgdGNwX2Fib3J0YCBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSBpbnZva2VkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBgdGNwX2Fib3J0YCBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gT2theSwgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGEgZ2xvYmFsIGtmdW5jIHN5bWJvbCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBBbmQgYHRjcF9hYm9ydGAgaXMgYWxzbyBub24tc3RhdGljLCBmb3VuZCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBHb29kLgoKSnVzdCB0byBiZSBzYWZlLCBJJiMzOTttIHZlcmlmeWluZyB0aG9zZSByZXF1aXJlZCBjb25maWdzIGFnYWluOiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYElORVRgLgoKVGhlIHJhdGlvbmFsZSBpcyBzb3VuZC4gVGhpcyBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gaGFuZGxlIHRoZSBkZXN0cnVjdGlvbiBvZiBub24tZnVsbCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgaW4gYFRDUF9USU1FX1dBSVRgIGFuZCBgVENQX05FV19TWU5fUkVDVmAgc3RhdGVzLiBJdCYjMzk7cyBkb2luZyB0aGlzIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGZpcnN0LiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBsZXRzIEJQRiBpdGVyYXRvcnMgY2FsbCBgYnBmX3NvY2tfZGVzdHJveWAgb24gc29ja2V0cyBpbiBgVElNRV9XQUlUYCwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyBwcm90b2NvbC1zcGVjaWZpYyBhYm9ydCByb3V0aW5lcyBsaWtlIGB0Y3BfYWJvcnRgLiBUaGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIEJQRiBpdGVyYXRvcnMsIHNvIGZ1enppbmcgaXMgY2VydGFpbmx5IHdhcnJhbnRlZC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NvY2tfZGVzdHJveSgpIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGFsbG93IHByb3RvY29sIGFib3J0IGhhbmRsZXJzIChlLmcuLCB0Y3BfYWJvcnQpIHRvIGRlc3Ryb3kgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCBTWU5fUkVDViBzb2NrZXRzKSBieSBxdWFsaWZ5aW5nIHRoZSBwcm90b2NvbCBjaGVjayB3aXRoIHNrX2Z1bGxzb2NrKCkuIFRoaXMgZW5hYmxlcyBuZXcgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrZXQgaXRlcmF0b3IgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NvY2tfZGVzdHJveSgpIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGFsbG93IHByb3RvY29sIGFib3J0IGhhbmRsZXJzIChlLmcuLCB0Y3BfYWJvcnQpIHRvIGRlc3Ryb3kgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCBTWU5fUkVDViBzb2NrZXRzKSBieSBxdWFsaWZ5aW5nIHRoZSBwcm90b2NvbCBjaGVjayB3aXRoIHNrX2Z1bGxzb2NrKCkuIFRoaXMgZW5hYmxlcyBuZXcgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrZXQgaXRlcmF0b3IgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gb25seSBjaGVjayBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrIHRvIGJlIGRlc3Ryb3llZCB2aWEgdGhlIEJQRiBrZnVuYy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU0ZTQ1NWJhYTY3MTMwMGQyNTk3OTllOGVhZjQzZTAxYTlmZDg3MmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE5OjA0OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi4xYmJiNzIxMzhhYzY0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTI5MTIsOCAmIzQzOzEyOTEyLDggQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZAogICoKICAqIFJldHVybjoKLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLgotICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC4KJiM0MzsgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgogICogMCBvdGhlcndpc2UKICAqLwogX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKQpAQCAtMTI5MjUsOCAmIzQzOzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKIAkgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0CiAJICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy4KIAkgKi8KLQlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kgfHwgKHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7Ci0JCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCiYjNDM7CWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXR1cm4gc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMKaW5kZXggOWMxMTkzOGZlNTk3ZC4uNmNjYzdjZGE0MTBiZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMKQEAgLTExMCw2ICYjNDM7MTEwLDY1IEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiAJCWNsb3NlKHNlcnYpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90Y3BfdGltZXdhaXQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQomIzQzO3sKJiM0MzsJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjsKJiM0MzsJc3RydWN0IHRpbWV2YWwgdHYgPSB7fTsKJiM0MzsJY2hhciBidWZbMV07CiYjNDM7CiYjNDM7CXNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgJiMzNDtzdGFydF9zZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsICYjMzQ7Y29ubmVjdF90b19mZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJYWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCAmIzM0O3NlcnYgYWNjZXB0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBBY3RpdmUgY2xvc2UgZnJvbSB0aGUgY2xpZW50LCB0aGVuIGNsb3NlIHRoZSBzZXJ2ZXIgc2lkZS4gT25jZQomIzQzOwkgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50CiYjNDM7CSAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94CiYjNDM7CSAqIGNhbiYjMzk7dCByYWNlIHVzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dHYsCiYjNDM7CQkJCSAgc2l6ZW9mKHR2KSksICYjMzQ7Y2xlYXIgcmN2dGltZW8mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWlmICghQVNTRVJUX09LKHNodXRkb3duKGNsaWVuLCBTSFVUX1dSKSwgJiMzNDtjbGllbnQgc2h1dGRvd24mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWNsb3NlKGFjY2VwdF9zZXJ2KTsKJiM0MzsJYWNjZXB0X3NlcnYgPSAtMTsKJiM0MzsKJiM0MzsJLyogYmxvY2sgdW50aWwgcmV0dXJuIEVPRiAqLwomIzQzOwluID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIDAsICYjMzQ7Y2xpZW50IHJlY3YgRU9GJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCA9IDA7CiYjNDM7CXN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLSZndDtwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kLCAxLCAmIzM0O3RpbWV3YWl0IHNvY2sgZm91bmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CUFTU0VSVF9PSyhza2VsLSZndDtic3MtJmd0O3R3X2Rlc3Ryb3lfZXJyLCAmIzM0O2Rlc3Ryb3kgdGltZXdhaXQgc29jayYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCA9IDA7CiYjNDM7CXN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLSZndDtwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMCwgJiMzNDt0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZCYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpZiAoY2xpZW4gIT0gLTEpCiYjNDM7CQljbG9zZShjbGllbik7CiYjNDM7CWlmIChhY2NlcHRfc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKGFjY2VwdF9zZXJ2KTsKJiM0MzsJaWYgKHNlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShzZXJ2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogewogCWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwOwpAQCAtMjA0LDExICYjNDM7MjYzLDEyIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZCkKIAkJdGVzdF90Y3BfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGNwX3NlcnZlciYjMzQ7KSkKIAkJdGVzdF90Y3Bfc2VydmVyKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF90aW1ld2FpdCYjMzQ7KSkKJiM0MzsJCXRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX2NsaWVudCYjMzQ7KSkKIAkJdGVzdF91ZHBfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX3NlcnZlciYjMzQ7KSkKIAkJdGVzdF91ZHBfc2VydmVyKHNrZWwpOwotCiAJUlVOX1RFU1RTKHNvY2tfZGVzdHJveV9wcm9nX2ZhaWwpOwogCiBjbGVhbnVwOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYwppbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYwpAQCAtNyw2ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKIAogX19iZTE2IHNlcnZfcG9ydCA9IDA7CiYjNDM7aW50IHR3X2ZvdW5kID0gMDsKJiM0MztpbnQgdHdfZGVzdHJveV9lcnIgPSAwOwogCiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07CiAKQEAgLTEwMCw2ICYjNDM7MTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtpdGVyL3RjcCYjMzQ7KQomIzQzO2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LSZndDtza19jb21tb247CiYjNDM7CV9fdTY0ICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwlpZiAoIXNrX2NvbW1vbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoc2tfY29tbW9uLSZndDtza2NfZmFtaWx5ICE9IEFGX0lORVQ2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jayhza19jb21tb24pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0Y3BfY29ubl9zb2NrZXRzLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qIFRoZSB0aW1ld2FpdCBzb2NrIGluaGVyaXRzIHRoZSBjb29raWUgb2YgdGhlIGNsb3NlZCBjbGllbnQgc29jay4gKi8KJiM0MzsJaWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdHdfZm91bmQmIzQzOyYjNDM7OwomIzQzOwl0d19kZXN0cm95X2VyciA9IGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogCiBTRUMoJiMzNDtpdGVyL3VkcCYjMzQ7KQogaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIGZ1enppbmcgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLgoKUmlnaHQsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYHNrLSZndDtza19wcm90b2NvbGAgd2l0aGluIGFuIGVhcmx5IHJldHVybi4gVGhlIG9yaWdpbmFsIGxvZ2ljIHByZXZlbnRlZCB0aGUgZXhlY3V0aW9uIG9mIGBkaWFnX2Rlc3Ryb3lgIGlmIHRoZSBzb2NrZXQgd2FzbiYjMzk7dCBUQ1Agb3IgVURQLiBUaGUgbmV3IGxvZ2ljIGlzIGFsbG93aW5nIGBkaWFnX2Rlc3Ryb3lgIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHNvY2tldCBpc24mIzM5O3QgJiMzNDtmdWxsc29jayYjMzQ7LiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBgZGlhZ19kZXN0cm95YCBmb3Igc29ja2V0cyB0aGF0IGFyZSBub3QgJiMzNDtmdWxsc29jaywmIzM0OyBzcGVjaWZpY2FsbHkgdGltZXdhaXQgc29ja2V0cyBvciByZXF1ZXN0IHNvY2tldHMsIHdoaWNoIEkgKmtub3cqIGNhbiBleGlzdC4KClRvIHByb2NlZWQgZWZmaWNpZW50bHksIEkmIzM5O2xsIGxldmVyYWdlIGBncmVwcGVyYCAob3IgaWYgdGhhdCYjMzk7cyBub3QgYXZhaWxhYmxlLCBgcmVhZC1maWxlYCkgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBicGZfc29ja19kZXN0cm95YCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgLCBgaW5ldF90d3NrX2RpYWdfZGVzdHJveWAsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgYGRpYWdfZGVzdHJveWAgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgaGFuZGxpbmcgb2YgdGhvc2Ugc29ja2V0IHR5cGVzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgbWVtb3J5IHNhZmV0eTogYXJlIHdlIG5vdyBwb3RlbnRpYWxseSBmcmVlaW5nIG1lbW9yeSBvciBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5IGluIGEgd2F5IHRoYXQgd2FzbiYjMzk7dCBwcmV2aW91c2x5IHBvc3NpYmxlPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW4gdGhlIGNhbGwgcGF0aHMuIElmIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2Ugb2YgbWVtb3J5IGlzc3VlcywgS01TQU4gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlhZ19kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjkxOT1fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MjctXHQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI4Olx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTI5LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MzUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNjpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTM3LX1cbi0tXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTE0OS1cdHN0cnVjdCBza19idWZmICpza2I7XG5uZXQvY29yZS9zb2NrX2RpYWcuYzoxNTA6XHRjb25zdCBlbnVtIHNrbmV0bGlua19ncm91cHMgZ3JvdXAgPSBzb2NrX2RpYWdfZGVzdHJveV9ncm91cChzayk7XG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXHRpbnQgZXJyID0gLTE7XG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmMtMzExLVxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTMte1xuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMxNzpcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMyMS19XG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMjI6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19kaWFnX2Rlc3Ryb3kpO1xubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxuLS1cbm5ldC9pcHY0L3Jhdy5jPTk0OD1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxubmV0L2lwdjQvcmF3LmM6OTczOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2NC9yYXcuYy05NzQtfTtcbi0tXG5uZXQvaXB2NC9yYXdfZGlhZy5jPTE4Nz1zdGF0aWMgdm9pZCByYXdfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MTk1OnN0YXRpYyBpbnQgcmF3X2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjQvcmF3X2RpYWcuYy0xOTYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjA0LVx0XHRyZXR1cm4gUFRSX0VSUihzayk7XG5uZXQvaXB2NC9yYXdfZGlhZy5jOjIwNTpcdGVyciA9IHNvY2tfZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXHRzb2NrX3B1dChzayk7XG4tLVxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjE4LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5Olx0LmRlc3Ryb3lcdFx0PSByYXdfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMjAtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0My1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cbm5ldC9pcHY0L3RjcF9kaWFnLmM6NjUzOlx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTY2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHRjcF9kaWFnX2hhbmRsZXIgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NjktI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NzA6XHQuZGVzdHJveVx0XHQ9IHRjcF9kaWFnX2Rlc3Ryb3ksXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3My1cdC5vYmpfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XG4tLVxubmV0L2lwdjQvdWRwX2RpYWcuYz0xNDQ9c3RhdGljIHZvaWQgdWRwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTE1MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjE1MjpzdGF0aWMgaW50IHVkcF9kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAwLVxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAyLVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmM9MjA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdWRwX2RpYWdfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjIxNzpcdC5kZXN0cm95XHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMTgtI2VuZGlmXG4tLVxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxubmV0L2lwdjYvcmF3LmM6MTIzMjpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTk0MC1cdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjYvdWRwLmMtMTk0Mi19O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBpdDoKCioqQ29uc2lkZXJpbmcgVENQIFNvY2tldCBBYm9ydCAmYW1wOyBUaW1ld2FpdCBTb2NrZXQgSGFuZGxpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgVENQIHNvY2tldCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGRlY2lkZSB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggYSBwYXJ0aWN1bGFyIHByb2JsZW0gdGhhdCBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgIGFuZCBgdGNwX2Fib3J0YC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRpbWV3YWl0IHNvY2tldHMgYXJlIHVsdGltYXRlbHkgaGFuZGxlZCBhbmQgY2xlYW5lZCB1cC4gVGhpcyBmZWVscyBsaWtlIGl0IG1pZ2h0IGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGEgYnVnIG9yIHBlcmZvcm1hbmNlIGlzc3VlIEkgYW0gZmFjaW5nLiBGaXJzdCwgSSB0aGluayBJJiMzOTtsbCBmb2N1cyBvbiBgdGNwX2Fib3J0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTUwODk9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwLmMtNTExNC1cbm5ldC9pcHY0L3RjcC5jOjUxMTU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG5uZXQvaXB2NC90Y3AuYy01MTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IFRDUCYjMzk7cyBtYW5hZ2luZyBjb25nZXN0aW9uIGNvbnRyb2wsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGl0IGhhbmRsZXMgcmV0cmFuc21pc3Npb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTExNS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucy4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGFyZWEgcHJvYmFibHkgZGVhbHMgd2l0aCB0aGUgY29yZSBsb2dpYy4gTWlnaHQgYXMgd2VsbCB1c2UgdGhhdCB0byBndWlkZSB0aGUgbmV4dCBmZXcgbWludXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTExNTpcdGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxuNTExNjpcdHtcbjUxMTc6XHRcdGludCBzdGF0ZSA9IGluZXRfc2tfc3RhdGVfbG9hZChzayk7XG41MTE4Olx0XG41MTE5Olx0XHRpZiAoc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVikge1xuNTEyMDpcdFx0XHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSBpbmV0X3JlcXNrKHNrKTtcbjUxMjE6XHRcbjUxMjI6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuNTEyMzpcdFx0XHRpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG41MTI0Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEyNTpcdFx0XHRyZXR1cm4gMDtcbjUxMjY6XHRcdH1cbjUxMjc6XHRcdGlmIChzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSB7XG41MTI4Olx0XHRcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTtcbjUxMjk6XHRcbjUxMzA6XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNnR3LVx1MDAzZXR3X3JlZmNudCk7XG41MTMxOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMzI6XHRcdFx0aW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0KHR3KTtcbjUxMzM6XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG41MTM0Olx0XHRcdHJldHVybiAwO1xuNTEzNTpcdFx0fVxuNTEzNjpcdFxuNTEzNzpcdFx0LyogQlBGIGNvbnRleHQgZW5zdXJlcyBzb2NrIGxvY2tpbmcuICovXG41MTM4Olx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjUxMzk6XHRcdFx0LyogRG9uJiMzOTt0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cbjUxNDA6XHRcdFx0bG9ja19zb2NrKHNrKTtcbjUxNDE6XHRcbjUxNDI6XHRcdC8qIEF2b2lkIGNsb3NpbmcgdGhlIHNhbWUgc29ja2V0IHR3aWNlLiAqL1xuNTE0MzpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuNTE0NDpcdFx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjUxNDU6XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuNTE0NjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjUxNDc6XHRcdH1cbjUxNDg6XHRcbjUxNDk6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XG41MTUwOlx0XHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG41MTUxOlx0XHRcdGluZXRfY3NrX2xpc3Rlbl9zdG9wKHNrKTtcbjUxNTI6XHRcdH1cbjUxNTM6XHRcbjUxNTQ6XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggQkggc29ja2V0IGNsb3NlcyBzdWNoIGFzIGluZXRfY3NrX2xpc3Rlbl9zdG9wLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc1CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDE0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIGBicGZfc29ja19kZXN0cm95YCwgd2hpY2ggdGFrZXMgYSBgc29ja19jb21tb25gIHBvaW50ZXIuICBQcmV2aW91c2x5LCBpdCB3YXMgcmVhZGluZyBgc2stJmd0O3NrX3Byb3RvY29sYCBkaXJlY3RseS4gVGhlIHByb2JsZW0gaXMgdGhhdCBub3QgYWxsIHNvY2tldHMsIHNwZWNpZmljYWxseSB0aW1lLXdhaXQgb3IgcmVxdWVzdCBzb2NrZXRzIChgIXNrX2Z1bGxzb2NrKHNrKWApLCBhY3R1YWxseSBoYXZlIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIGRlZmluZWQgd2l0aGluIHRoZSBgc29ja19jb21tb25gIHN0cnVjdHVyZS4gSXQmIzM5O3Mgb25seSB3aXRoaW4gdGhlIGZ1bGwgYHN0cnVjdCBzb2NrYC4gVGhlIGNoZWNrIGBzay0mZ3Q7c2tfZnVsbHNvY2soc2spYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIGZ1bGwgc29ja2V0LiBJbiBvdGhlciB3b3JkcywgYWNjZXNzaW5nIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIG9uIHRpbWUtd2FpdCBzb2NrZXRzIHdhcyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTW9yZW92ZXIsIGl0IHdhcyBibG9ja2luZyB0aW1lLXdhaXQgc29ja2V0cyBmcm9tIGJlaW5nIGRlc3Ryb3llZCBiZWNhdXNlIG9mIHRoZSBwcm90b2NvbCBjaGVjay4KClRoZSBwYXRjaCBmaXhlcyB0aGlzLiBJdCBub3cgY2hlY2tzIGlmIHRoZSBzb2NrZXQgaXMgYSBmdWxsIHNvY2tldCAqYmVmb3JlKiBhY2Nlc3NpbmcgYHNrLSZndDtza19wcm90b2NvbGAuICBJZiBpdCYjMzk7cyAqbm90KiBhIGZ1bGwgc29ja2V0IChsaWtlIGEgdGltZS13YWl0IHNvY2tldCksIGl0IHNraXBzIHRoZSBwcm90b2NvbCBjaGVjayBlbnRpcmVseSBhbmQgcHJvY2VlZHMgZGlyZWN0bHkgdG8gY2FsbGluZyBgc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveWAuIFRoaXMgaXMgY29ycmVjdC4gVGhlIHByb3RvY29sLXNwZWNpZmljIGBkaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9uIChgdGNwX2Fib3J0YCBpbiB0aGUgY2FzZSBvZiBUQ1ApIGFscmVhZHkgaGFuZGxlcyB0aGUgdGltZS13YWl0IG9yIG5ldy1zeW4tcmVjdiBzdGF0ZXMgcHJvcGVybHkuICBUaGlzIHJlc29sdmVzIHRoZSBwcmV2aW91cyBpc3N1ZS4KCk5vdywgd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqIHByb2JsZW1zLiAgTGV0JiMzOTtzIGNvbnNpZGVyIHBvc3NpYmxlIGlzc3VlczoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnk6KiogIERvZXMgdGhlIHBhdGNoIGFsbG9jYXRlIGFueSBuZXcgYnVmZmVycyBvciBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBObywgdGhlIHBhdGNoIGFjdHVhbGx5ICpwcmV2ZW50cyogYW4gb3V0LW9mLWJvdW5kcyByZWFkLgoqICAgKipEYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlOioqICBEb2VzIHRoaXMgcGF0Y2ggY29weSBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8gTm8uCiogICAqKlVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIG9yIG1lbW9yeSByZWFkczoqKiBEb2VzIGl0IGludHJvZHVjZSBhbnkgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSW4gZmFjdCwgaXQmIzM5O3Mgc2FmZXIuCiogICAqKk1lbW9yeSBjb3JydXB0aW9uLCBsb2NraW5nLCBvciBsaWZldGltZSBpc3N1ZXM6KiogIEFueSByaXNrcz8gVGhlIG1haW4gY29uY2VybnMgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCBidXQgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIGxvY2tkZXAsIHJlc3BlY3RpdmVseS4KClRoaXMgbGVhZHMgdXMgdG8gdGhlIGNydWNpYWwgcXVlc3Rpb246IERvZXMgdGhpcyBjb2RlIGNoYW5nZSB3YXJyYW50IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcik/ICBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmUuIFdlIG9ubHkgbmVlZCBpdCBpZiB0aGUgY2hhbmdlIGV4cG9zZXMgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyB0aGF0IGFyZSAqbm90KiBjYXVnaHQgYnkgS0FTQU4sIGxvY2tkZXAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuCgpSZXZpZXdpbmcgdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlOioqICBOby4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBUaGUgcGF0Y2ggZml4ZWQgYSBwb3RlbnRpYWwgcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm8uCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBjb2RlIGNoYW5nZSBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKQSBmaW5hbCBkb3VibGUtY2hlY2sgb2YgdGhlIHRvdWNoZWQgZmlsZXMgKCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCkgY29uZmlybXMgdGhpcyBhbmFseXNpcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcy4KClRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gb25seSBjaGVjayBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrIHRvIGJlIGRlc3Ryb3llZCB2aWEgdGhlIEJQRiBrZnVuYy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIG9ubHkgY2hlY2sgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCB3aGVuIGBza19mdWxsc29jayhzaylgIGlzIHRydWUsIGFsbG93aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB3aXRoIGEgdmFsaWQgYHNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJbiBmYWN0LCBjaGVja2luZyBgc2tfZnVsbHNvY2soKWAgYXZvaWRzIHJlYWRpbmcgZmllbGRzIGJleW9uZCBgc29ja19jb21tb25gIGZvciBtaW5pYXR1cmUgc29ja2V0cy4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIHNvY2tldCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgb3IgbG9ja2luZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA0OjI0LjA2ODkyNjAwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzY4ODk0NTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJ0Y3BfYWJvcnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIG9ubHkgY2hlY2sgYHNrLVxcdTAwM2Vza19wcm90b2NvbGAgd2hlbiBgc2tfZnVsbHNvY2soc2spYCBpcyB0cnVlLCBhbGxvd2luZyBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgd2l0aCBhIHZhbGlkIGBza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrIHRvIGJlIGRlc3Ryb3llZCB2aWEgdGhlIEJQRiBrZnVuYy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSW4gZmFjdCwgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKClgIGF2b2lkcyByZWFkaW5nIGZpZWxkcyBiZXlvbmQgYHNvY2tfY29tbW9uYCBmb3IgbWluaWF0dXJlIHNvY2tldHMuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIG9yIGxvY2tpbmcgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6MjQuMDY4OTMwNjU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA4MTE2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTk6MDQ6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0xMjkxMiw4ICsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbiAgKlxcbiAgKiBSZXR1cm46XFxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxcbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cXG4rICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cXG4gICogMCBvdGhlcndpc2VcXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG5AQCAtMTI5MjUsOCArMTI5MjUsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbiBcXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XFxuIFxcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbmluZGV4IDljMTE5MzhmZTU5N2QuLjZjY2M3Y2RhNDEwYmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbkBAIC0xMTAsNiArMTEwLDY1IEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuIFxcdFxcdGNsb3NlKHNlcnYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuK3tcXG4rXFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcXG4rXFx0Y2hhciBidWZbMV07XFxuK1xcbitcXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFxcXCJzdGFydF9zZXJ2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXFxcImNvbm5lY3RfdG9fZmRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcXFwic2VydiBhY2NlcHRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcXG4rXFx0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxcbitcXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxcbitcXHQgKiBjYW4ndCByYWNlIHVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0dixcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YodHYpKSwgXFxcImNsZWFyIHJjdnRpbWVvXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcXFwiY2xpZW50IHNodXRkb3duXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0YWNjZXB0X3NlcnYgPSAtMTtcXG4rXFxuK1xcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cXG4rXFx0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcXFwiY2xpZW50IHJlY3YgRU9GXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHdfZm91bmQsIDEsIFxcXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdEFTU0VSVF9PSyhza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcXFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kLCAwLCBcXFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChjbGllbiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2UoY2xpZW4pO1xcbitcXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0aWYgKHNlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKHNlcnYpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxcbiB7XFxuIFxcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xcbkBAIC0yMDQsMTEgKzI2MywxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpXFxuIFxcdFxcdHRlc3RfdGNwX2NsaWVudChza2VsKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRjcF9zZXJ2ZXJcXFwiKSlcXG4gXFx0XFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidGNwX3RpbWV3YWl0XFxcIikpXFxuK1xcdFxcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidWRwX2NsaWVudFxcXCIpKVxcbiBcXHRcXHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1ZHBfc2VydmVyXFxcIikpXFxuIFxcdFxcdHRlc3RfdWRwX3NlcnZlcihza2VsKTtcXG4tXFxuIFxcdFJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTtcXG4gXFxuIGNsZWFudXA6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcXG5pbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcXG5AQCAtNyw2ICs3LDggQEBcXG4gI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbiBcXG4gX19iZTE2IHNlcnZfcG9ydCA9IDA7XFxuK2ludCB0d19mb3VuZCA9IDA7XFxuK2ludCB0d19kZXN0cm95X2VyciA9IDA7XFxuIFxcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XFxuIFxcbkBAIC0xMDAsNiArMTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcIml0ZXIvdGNwXFxcIilcXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVxcdTAwM2Vza19jb21tb247XFxuK1xcdF9fdTY0ICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0aWYgKCFza19jb21tb24pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHNrX2NvbW1vbi1cXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXFxuK1xcdGlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHR3X2ZvdW5kKys7XFxuK1xcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuIFNFQyhcXFwiaXRlci91ZHBcXFwiKVxcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDoyNC42MDA1MDk1NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgzNDEyMjk5NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTowNDoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI1LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuaW5kZXggOWMxMTkzOGZlNTk3ZC4uNmNjYzdjZGE0MTBiZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuQEAgLTExMCw2ICsxMTAsNjUgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiBcdFx0Y2xvc2Uoc2Vydik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbit7XG4rXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbitcdGNoYXIgYnVmWzFdO1xuK1xuK1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbitcdGlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCBcImNvbm5lY3RfdG9fZmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsIFwic2VydiBhY2NlcHRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0YWNjZXB0X3NlcnYgPSAtMTtcbitcbitcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwiY2xpZW50IHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMSwgXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZGVzdHJveV9lcnIsIFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXCIpO1xuK1xuK1x0LyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDAsIFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChjbGllbiAhPSAtMSlcbitcdFx0Y2xvc2UoY2xpZW4pO1xuK1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRpZiAoc2VydiAhPSAtMSlcbitcdFx0Y2xvc2Uoc2Vydik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4ge1xuIFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7XG5AQCAtMjA0LDExICsyNjMsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuIFx0XHR0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7XG4tXG4gXHRSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7XG4gXG4gY2xlYW51cDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5pbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbiBcbiBfX2JlMTYgc2Vydl9wb3J0ID0gMDtcbitpbnQgdHdfZm91bmQgPSAwO1xuK2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJpdGVyL3RjcFwiKVxuK2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC1cdTAwM2Vza19jb21tb247XG4rXHRfX3U2NCAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHRpZiAoIXNrX2NvbW1vbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc2tfY29tbW9uLVx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1x0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xuK1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dHdfZm91bmQrKztcbitcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuIFNFQyhcIml0ZXIvdWRwXCIpXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA0OjI0LjYwMDUxMTE5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MDg4NTU3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJJ2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIHBhdGNoIGl0c2VsZiwgdGhlbiBJJ2xsIGxldmVyYWdlIG15IGtub3dsZWRnZSBvZiBCUEYgYW5kIHNvY2tldCBpbnRlcm5hbHMgdG8gYXNzZXNzIGl0cyBpbXBhY3QuXG5cblRoZSBjaGFuZ2UgaW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBUaGUgY29kZSBpcyBiZWluZyBtb2RpZmllZCB0byByZXN0cmljdCBpdHMgdXNlLCBwYXJ0aWN1bGFybHkgZm9yIHNvY2tldHMgYmV5b25kIFRDUCBhbmQgVURQLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayB0aGF0IGFsbG93ZWQgdGhlIGZ1bmN0aW9uIHRvIHByb2NlZWQgaWYgYGRpYWdfZGVzdHJveWAgd2FzIG5vdCBpbXBsZW1lbnRlZC4gTm93LCBhIHJldHVybiBvZiBgLUVPUE5PVFNVUFBgIG9jY3VycyBpZiBgZGlhZ19kZXN0cm95YCBpc24ndCBpbXBsZW1lbnRlZCBhbmQgdGhlIHNvY2tldCBpcyBub3QgVENQIG9yIFVEUC4gRnVydGhlcm1vcmUsIHRoZXJlJ3MgYW4gYWRkZWQgY2hlY2sgdXNpbmcgYHNrX2Z1bGxzb2NrYCwgd2hpY2ggaW5kaWNhdGVzIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgbW9yZSBsaW1pdGVkIHRvIGZ1bGwgc29ja2V0cyBvdGhlciB0aGFuIFRDUC9VRFAuXG5cblRoZSBjb21tZW50IGhpZ2hsaWdodGluZyBcImxvY2tpbmcgc2VtYW50aWNzXCIgYW5kIGNvbmN1cnJlbnQgZXhlY3V0aW9uIGlzIGEga2V5IHJlZCBmbGFnLCBvZiBjb3Vyc2UuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzb2NrZXQgdGVhcmRvd24gd2l0aGluIEJQRiBjb250ZXh0cy4gU3VwcG9ydGluZyBwcm90b2NvbHMgbXVzdCBub3cgYWNxdWlyZSB0aGUgc29jayBsb2NrIHRvIGVuc3VyZSBzYWZldHkuXG5cblRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byBzZWUgaG93IGBicGZfc29ja19kZXN0cm95YCBpcyAqdXNlZCogd2l0aGluIHRoaXMgZmlsZSBhbmQgcG90ZW50aWFsbHkgaW4gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byBsb29rIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIGhvdyBpdHMgcmV0dXJuIHZhbHVlcyBhcmUgaGFuZGxlZC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IGV4aXN0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhpcyBmdW5jdGlvbmFsaXR5PyBIb3cgYXJlIHRoZXkgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhpcyBrZnVuYz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhvc2UgdXNlcy5cblxuTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgc291bmQsIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcmVncmVzc2lvbnMsIGFuZCBpZiBpdCdzIHByb3Blcmx5IGRvY3VtZW50ZWQuIEEgdGhvcm91Z2ggcmV2aWV3IHdpbGwgcmVxdWlyZSBsb29raW5nIGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IHJlc3RyaWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6MzMuNDA5Mzc0MDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTA1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwNTpcXHQgKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gYSBzb2NrZXQsIGFuZCBpbnZva2VzIHRoZVxcbjEyOTA2OlxcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxcbjEyOTA3OlxcdCAqXFxuMTI5MDg6XFx0ICogVGhlIGhlbHBlciBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBCUEYgY29udGV4dHMgdGhhdCBoYXZlIGFjcXVpcmVkIHRoZSBzb2NrZXRcXG4xMjkwOTpcXHQgKiBsb2Nrcy5cXG4xMjkxMDpcXHQgKlxcbjEyOTExOlxcdCAqIFBhcmFtZXRlcnM6XFxuMTI5MTI6XFx0ICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbjEyOTEzOlxcdCAqXFxuMTI5MTQ6XFx0ICogUmV0dXJuOlxcbjEyOTE1OlxcdCAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cXG4xMjkxNjpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE3OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTg6XFx0ICovXFxuMTI5MTk6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIwOlxcdHtcXG4xMjkyMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIyOlxcdFxcbjEyOTIzOlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjQ6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI1OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNjpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI3OlxcdFxcdCAqL1xcbjEyOTI4OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkyOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzA6XFx0XFxuMTI5MzE6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMyOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzMzpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNTpcXHRcXG4xMjkzNjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzNzpcXHR9XFxuMTI5Mzg6XFx0XFxuMTI5Mzk6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MDpcXHRcXG4xMjk0MTpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0MzpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA0OjMzLjQxMDA2MjEyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NTY3NTQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgYSBCUEYga2Z1bmMsIHBhcnQgb2YgdGhlIHN0YW5kYXJkIEJQRiB0b29sa2l0IHVzZWQgdG8gY2xlYW4gdXAgc29ja2V0IHJlc291cmNlcywgZXNwZWNpYWxseSB0aG9zZSBhY2Nlc3NlZCB0aHJvdWdoIHNvY2tldCBhbmQgQlBGIGl0ZXJhdG9ycy4gSSByZWNhbGwgdGhhdCwgcHJldmlvdXNseSwgaXRzIHVzYWdlIHdhcyByYXRoZXIgcmVzdHJpY3RlZCwgcmVxdWlyaW5nIHRoYXQgdGhlIHNvY2tldCdzIHByb3RvY29sIGJlIGVpdGhlciBUQ1Agb3IgVURQLiBUaGUgY29kZSBzbmlwcGV0IGlzIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgaGVyZS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHNvY2tldHMgdGhhdCBhcmVuJ3QgZnVsbHkgZm9ybWVk4oCUbGV0J3MgY2FsbCB0aGVtIFwibm9uLWZ1bGxzb2NrXCIgc29ja2V0c+KAlHNwZWNpZmljYWxseSwgdGltZXdhaXQgc29ja2V0cywgcmVxdWVzdCBzb2NrZXRzIGFuZCB0aGUgbGlrZS4gTm93LCB0aGUgYHNrX3Byb3RvY29sYCBmaWVsZCwgdGhlIG9uZSB1c2VkIHRvIHZhbGlkYXRlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggVENQIG9yIFVEUCwgZG9lc24ndCBhbHdheXMgZXhpc3QgYXQgdGhlIHNhbWUgb2Zmc2V0IGluIHRoZSBgc29ja19jb21tb25gIHN0cnVjdHVyZSBmb3IgdGhlc2UgXCJwYXJ0aWFsXCIgc29ja2V0IHR5cGVzLiBGdXJ0aGVybW9yZSwgY2FsbGluZyBgc2tfZnVsbHNvY2soc2spYCByZXR1cm5zIGZhbHNlIGZvciB0aGVzZSBzb2NrZXQgdHlwZXMuIFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIGNhbWUgaW4uXG5cblRoZSBmaXggSSdtIGxvb2tpbmcgYXQgdXRpbGl6ZXMgYHNrX2Z1bGxzb2NrKHNrKWAuIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlIGtmdW5jIHdvdWxkIGhhdmUgZmFpbGVkIGluIHRob3NlIHNpdHVhdGlvbnMuIEJ1dCBieSB1c2luZyBgc2tfZnVsbHNvY2soc2spYCBhcyBhIGNoZWNrLCB0aGUgY29kZSBub3cgKmNvbmRpdGlvbmFsbHkqIGFwcGxpZXMgdGhlIHByb3RvY29sIGNoZWNrLiBUaGlzIGFsbG93cyB0aGUga2Z1bmMgdG8gY29ycmVjdGx5IGRlc3Ryb3kgdGhlc2UgdGltZXdhaXQgc29ja2V0cywgZXZlbiB3aGVuIHRoZSBgc2tfcHJvdG9jb2xgIGZpZWxkIGlzbid0IHJlbGlhYmx5IGF2YWlsYWJsZSBpbiB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24sIG9yIGF0IGFsbC4gSSBjYW4gc2VlIGhvdyB0aGlzIGNhbiBiZSB1c2VmdWwgaW4gZnVuY3Rpb25zIGxpa2UgYHRjcF90d3NrX2RpYWdfZGVzdHJveWAsIGB0Y3BfZGlhZ19kZXN0cm95YCwgYW5kIGBpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXRgLiBUaGUgbmV3IGNvZGUgaGFuZGxlcyB0aGVzZSB0eXBlcyBvZiBzb2NrZXRzIGJ5IGRlc3Ryb3lpbmcgdGhlbSBub3cgdGhhdCBgc2tfZnVsbHNvY2soc2spYCBpcyBiZWluZyB1c2VkIHRvIHZhbGlkYXRlIGZpcnN0LlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBob3cgYGRpYWdfZGVzdHJveWAgaXMgaW1wbGVtZW50ZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBicm9hZGVyIGltcGFjdCBvciBpZiB0aGlzIGlzIHRoZSBzdGFydCBvZiBhIHRyZW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6NDAuMjY2ODIwNTY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzQ0NDUwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5kaWFnX2Rlc3Ryb3lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcXG5uZXQvaXB2NC9yYXcuYzo5NzM6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ3PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cXHQubm9fYXV0b2JpbmRcXHRcXHQ9IHRydWUsXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzk2OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHRjcF9hYm9ydCxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTctfTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMxNDM9c3RydWN0IHByb3RvIHVkcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzE3My1cXHQub2JqX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxcbm5ldC9pcHY0L3VkcC5jOjMxNzQ6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY0L3VkcC5jLTMxNzUtfTtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxcbm5ldC9pcHY2L3Jhdy5jOjEyMzI6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY2L3Jhdy5jLTEyMzMtfTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNS1cXHQubm9fYXV0b2JpbmRcXHRcXHQ9IHRydWUsXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHRjcF9hYm9ydCxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjctfTtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTQwLVxcdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcXG5uZXQvaXB2Ni91ZHAuYzoxOTQxOlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHVkcF9hYm9ydCxcXG5uZXQvaXB2Ni91ZHAuYy0xOTQyLX07XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDY9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXFx0dGNwX3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE2NzpcXHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxMy1cXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTQ6XFx0dGNwdjZfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6NDIuNjAxMjcyNjAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ4MTU0Nzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBicGZfc29ja19kZXN0cm95YCBpcyBhIEJQRiBrZnVuYywgdGhhdCBpcyBpbXBvcnRhbnQgYXMgaXQgaXMgYSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBmdW5jdGlvbiB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgYnBmKClgIGFuZCBpdGVyYXRvciBmaWxlIGRlc2NyaXB0b3JzLiBRRU1VIGFuZCBHQ0UgYXJlIHN0YW5kYXJkIHRhcmdldHMgZm9yIHRoaXMgdHlwZSBvZiB3b3JrLCBzbyB0aGF0J3MgZ29vZC5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIGNoYW5nZSBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAncyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGl0IHRvIGRlc3Ryb3kgKm5vbi1mdWxsKiBzb2NrZXRzLCBsaWtlIFRJTUVfV0FJVCBzb2NrZXRzLCBmb3IgZXhhbXBsZSwgd2hpY2ggaXMgdHJpZ2dlcmVkIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYHRjcF9hYm9ydGAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQncyBjaGFuZ2luZyB0aGUgZXhlY3V0aW9uIHBhdGhzIGZvciBzb2NrZXRzIGluIFRJTUVfV0FJVCBvciByZXF1ZXN0IHN0YXRlcy5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQncyBzZWUuLi4gU2VjdGlvbiAzIG9mIG15IGd1aWRlbGluZXMgYXJlOiBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgYW5kIHJlYWNoYWJsZSBjb2RlLiBUaGlzIGhpdHMgb24gXCJjb3JlIG5ldHdvcmtpbmcsXCIgXCJCUEYsXCIgYW5kIGlzIGRlZmluaXRlbHkgXCJyZWFjaGFibGUgY29kZVwiIHNvIHRoZSBhbnN3ZXIgaXMgY2xlYXJseSBUUlVFLiBUaGlzIGlzIGEgdmVyeSBnb29kIHRhcmdldC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBGb2N1c1N5bWJvbHM6IGBicGZfc29ja19kZXN0cm95YCBpdHNlbGYsIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIGlzIHRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZC4gQW5kIHJlbGF0ZWQgZnVuY3Rpb25zPyBgdGNwX2Fib3J0YCBpcyB0aGUgb2J2aW91cyBvbmUsIG9yIGlzIGl0IGp1c3QgdGhlIGBicGZfc29ja19kZXN0cm95YD8gSSBuZWVkIHRvIGxvb2sgaW50byB3aGF0IGB0Y3BfYWJvcnRgIGFjdHVhbGx5IGRvZXMgd2l0aCBUSU1FX1dBSVQgc29ja2V0cy4gTmVlZCB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDo0OC4wODI4MjQyOTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNTYyNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE3MDQ9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjE3MDU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTExNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDk2PXN0YXRpYyB2b2lkIHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTEtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTEyOnN0YXRpYyBpbnQgdGNwX2Fib3J0X292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2ssIGludCBlcnIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6NTAuMTA4NDU3NTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ4NjkyMTczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRjcF9hYm9ydGAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBgdGNwX2Fib3J0YCBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBuZXQvaXB2NC90Y3AuY2AuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgdGNwX2Fib3J0YC4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBvbiBob3cgaXQgaGFuZGxlcyB0aGUgYWJydXB0IHRlcm1pbmF0aW9uIG9mIGEgVENQIGNvbm5lY3Rpb24gZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgY2xlYW51cCwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVENQIHN0YXRlIG1hY2hpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDo1NC41OTUzODM3MjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMTU6XFx0aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNTExNjpcXHR7XFxuNTExNzpcXHRcXHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xcbjUxMTg6XFx0XFxuNTExOTpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVikge1xcbjUxMjA6XFx0XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XFxuNTEyMTpcXHRcXG41MTIyOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTIzOlxcdFxcdFxcdGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XFxuNTEyNDpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTI1OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMjY6XFx0XFx0fVxcbjUxMjc6XFx0XFx0aWYgKHN0YXRlID09IFRDUF9USU1FX1dBSVQpIHtcXG41MTI4OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTtcXG41MTI5OlxcdFxcbjUxMzA6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ0dy1cXHUwMDNldHdfcmVmY250KTtcXG41MTMxOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTMyOlxcdFxcdFxcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XFxuNTEzMzpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTM0OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMzU6XFx0XFx0fVxcbjUxMzY6XFx0XFxuNTEzNzpcXHRcXHQvKiBCUEYgY29udGV4dCBlbnN1cmVzIHNvY2sgbG9ja2luZy4gKi9cXG41MTM4OlxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbjUxMzk6XFx0XFx0XFx0LyogRG9uJ3QgcmFjZSB3aXRoIHVzZXJzcGFjZSBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgdGNwX2Nsb3NlLiAqL1xcbjUxNDA6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG41MTQxOlxcdFxcbjUxNDI6XFx0XFx0LyogQXZvaWQgY2xvc2luZyB0aGUgc2FtZSBzb2NrZXQgdHdpY2UuICovXFxuNTE0MzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjUxNDQ6XFx0XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTE0NTpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjUxNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuNTE0NzpcXHRcXHR9XFxuNTE0ODpcXHRcXG41MTQ5OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDo1NC41OTU1OTMzMDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY5NjkxNzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBgYnBmX3NvY2tfZGVzdHJveWAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZpeCByZWxhdGVkIHRvIGBicGZfc29ja19kZXN0cm95YCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggc29ja2V0cyBpbiBkaWZmZXJlbnQgc3RhdGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBwYXRjaCBpcyBuZWNlc3NhcnkgYW5kIHdoYXQgaXQncyBlbmFibGluZy5cblxuRmlyc3QsIEknbSBsb29raW5nIGF0IGhvdyBgdGNwX2Fib3J0YCBpcyBjdXJyZW50bHkgaGFuZGxlZC4gSSBzZWUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVClgLiBUaGF0J3MgZ29vZCwgaXQgY29uZmlybXMgdGhhdCBgdGNwX2Fib3J0YCBpcyAqYWxyZWFkeSogd3JpdHRlbiB0byBkZWFsIHdpdGggYFRDUF9USU1FX1dBSVRgIHNvY2tldHMuIFNhbWUgZm9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgaXTigJlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgaW1wbGllcyB0aGVyZSdzIG5vIGluaGVyZW50IHByb2JsZW0gaW4gKnRjcF9hYm9ydCogaXRzZWxmLiBUaGUgaXNzdWUgbXVzdCBiZSBpbiAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgb3IgcGVyaGFwcywgKndoZW4qLlxuXG5UaGUgdGV4dCBzYXlzIGBicGZfc29ja19kZXN0cm95KClgIHdhcyB0aGUgYmxvY2tlci4gVGhlIGtleSBoZXJlIGlzIHRoZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrICpiZWZvcmUqIHRoZSBgc2tfZnVsbHNvY2soc2spYCBjaGVjayB3aXRoaW4gYGJwZl9zb2NrX2Rlc3Ryb3koKWAuIFJpZ2h0LCB0aGF0J3MgdGhlIGN1bHByaXQuIFRoYXQgY29uZGl0aW9uYWwgbG9naWMgd2FzIHByZXZlbnRpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZyb20gYmVpbmcgY2FsbGVkIG9uIHNvY2tldHMgaW4gc3RhdGVzIGxpa2UgYFRDUF9USU1FX1dBSVRgLCB3aGljaCBhcmUgbm90ICpmdWxsKiBzb2NrZXRzLiBUaGUgZml4IGlzIG5vdyBhbGxvd2luZyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gb3BlcmF0ZSBvbiAqbm9uLWZ1bGwqIHNvY2tldHMuIE1ha2VzIHNlbnNlLCB0aGF0IGFsbG93cyB0aGUgY2xlYW51cCBvZiB0aGVzZSBzb2NrZXQgc3RydWN0dXJlcy5cblxuTm93LCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5lZCBhbmQgaG93IGl0J3MgY29tcGlsZWQuIExldCdzIGZpbmQgb3V0IGFib3V0IHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cywgSSdsbCBnbyB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzZWFyY2ggYXJvdW5kIGxpbmUgMTI5MDAgb3IgdXNlIGEgZGlyZWN0IHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIHJldmVhbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhhdCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgcHJvcGVybHkgZW5hYmxlZCBmb3IgdGhlIHJlbGV2YW50IEJQRiBpdGVyYXRvciB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjAwLjI5MjUxMzgzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NjA4Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19pdGVyX2tmdW5jX2lkc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI5Mzk9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0Mi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MzpCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDQtXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NDU9c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ2LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0NzpcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDgtXFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NTM9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9za19pdGVyX2tmdW5jX3NldCA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1NC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1NTpcXHQuc2V0ICAgPSBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU2LVxcdC5maWx0ZXIgPSB0cmFjaW5nX2l0ZXJfZmlsdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNTowMC41MDExMjc5ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwNDIyMzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWdpc3RyYXRpb24gb2YgYGJwZl9za19pdGVyX2tmdW5jX3NldGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9za19pdGVyX2tmdW5jX3NldGAgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIEJQRiBmdW5jdGlvbnMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIHRob3NlIGAjaWZkZWZgIGJsb2NrcyDigJMgdGhhdCBtaWdodCBnb3Zlcm4gaXRzIGluY2x1c2lvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgaXRzIGF2YWlsYWJpbGl0eSBpcyB0aWVkIHRvIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSBvciBtb2R1bGUgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhvc2UgY29uZGl0aW9ucyBiZWNhdXNlIGl0IGdpdmVzIG1lIGNvbnRleHQgb24gaXRzIHB1cnBvc2UsIHVzYWdlIHJlcXVpcmVtZW50cywgYW5kIHRoZSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudCB0aGUgZnVuY3Rpb24gZXhwZWN0cyB0byB3b3JrIHdpdGhpbi4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaW5mb3JtIGFueSBmdXJ0aGVyIGFuYWx5c2lzLCBkZWJ1Z2dpbmcsIG9yIG1vZGlmaWNhdGlvbnMgSSBtaWdodCBuZWVkIHRvIHBlcmZvcm0gb24gcmVsYXRlZCBCUEYgY29kZS4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHN0YXJ0IHRyYWNpbmcgdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjAzLjEwNTM1NTY5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTQwOlxcdFxcbjEyOTQxOlxcdEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbjEyOTQyOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxcbjEyOTQzOlxcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0NDpcXHRcXG4xMjk0NTpcXHRzdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuMTI5NDY6XFx0e1xcbjEyOTQ3OlxcdFxcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG4xMjk0ODpcXHRcXHQgICAgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXFxuMTI5NDk6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTI5NTA6XFx0XFx0cmV0dXJuIDA7XFxuMTI5NTE6XFx0fVxcbjEyOTUyOlxcdFxcbjEyOTUzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XFxuMTI5NTQ6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI5NTU6XFx0XFx0LnNldCAgID0gXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcXG4xMjk1NjpcXHRcXHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcXG4xMjk1NzpcXHR9O1xcbjEyOTU4OlxcdFxcbjEyOTU5OlxcdHN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG4xMjk2MDpcXHR7XFxuMTI5NjE6XFx0XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcXG4xMjk2MjpcXHR9XFxuMTI5NjM6XFx0bGF0ZV9pbml0Y2FsbChpbml0X3N1YnN5c3RlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjAzLjEwNTc3Mjk0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA4MzUyOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIHN0YXRlbWVudHMsIHN1cnJvdW5kaW5nIHRoZSBgaW5pdF9zdWJzeXN0ZW1gIG9yIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBjb2RlYmFzZSwgdGhpcyBzZWVtcyBsaWtlIGEgc2Vuc2libGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgcG90ZW50aWFsIGJ1aWxkLXRpbWUgdmFyaWF0aW9ucyBpbiBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gbWlnaHQgYmUgaW5pdGlhbGl6ZWQgb3IgdG9ybiBkb3duLiBLbm93aW5nIHRoaXMsIGFuZCBoYXZpbmcgbG9va2VkIGF0IHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSBvZiB0aGUgbmV0d29yayBmaWx0ZXIsIEkgaGF2ZSBhIGdvb2QgaWRlYSB3aGVyZSB0byBzdGFydCBsb29raW5nLCBhbmQgYXJvdW5kIGxpbmUgMTI5MDAgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcG9pbnQgdG8gYmVnaW4gbXkgc2Nhbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zLCBvciB0aGVpciBiZWhhdmlvciwgYXJlIHBvdGVudGlhbGx5IGNvbnRyb2xsZWQgYnkgYnVpbGQgY29uZmlndXJhdGlvbnMgb3Igc3BlY2lmaWMga2VybmVsIHZlcnNpb25zLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gdGhlIGtlcm5lbCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlc2UgY29uZGl0aW9uYWwgYmxvY2tzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBvciBwb3J0aW5nIEJQRi1yZWxhdGVkIGNvZGUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjA1LjMxNDEzMDY5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyODkwOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XFxuMTI4OTE6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG4xMjg5MjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfeGRwKTtcXG4xMjg5MzpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxuMTI4OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfYWRkcik7XFxuMTI4OTU6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7XFxuMTI4OTY6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xcbjEyODk3OlxcdFxcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XFxuMTI4OTg6XFx0fVxcbjEyODk5OlxcdGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xcbjEyOTAwOlxcdFxcbjEyOTAxOlxcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4xMjkwMjpcXHRcXG4xMjkwMzpcXHQvKiBicGZfc29ja19kZXN0cm95OiBEZXN0cm95IHRoZSBnaXZlbiBzb2NrZXQgd2l0aCBFQ09OTkFCT1JURUQgZXJyb3IgY29kZS5cXG4xMjkwNDpcXHQgKlxcbjEyOTA1OlxcdCAqIFRoZSBmdW5jdGlvbiBleHBlY3RzIGEgbm9uLU5VTEwgcG9pbnRlciB0byBhIHNvY2tldCwgYW5kIGludm9rZXMgdGhlXFxuMTI5MDY6XFx0ICogcHJvdG9jb2wgc3BlY2lmaWMgc29ja2V0IGRlc3Ryb3kgaGFuZGxlcnMuXFxuMTI5MDc6XFx0ICpcXG4xMjkwODpcXHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxcbjEyOTA5OlxcdCAqIGxvY2tzLlxcbjEyOTEwOlxcdCAqXFxuMTI5MTE6XFx0ICogUGFyYW1ldGVyczpcXG4xMjkxMjpcXHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXFxuMTI5MTM6XFx0ICpcXG4xMjkxNDpcXHQgKiBSZXR1cm46XFxuMTI5MTU6XFx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgRUlOVkFMLlxcbjEyOTE2OlxcdCAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuMTI5MTc6XFx0ICogMCBvdGhlcndpc2VcXG4xMjkxODpcXHQgKi9cXG4xMjkxOTpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjA1LjMxNDY4MjMwNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTczNzI2NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldHdvcmsgQ29yZSBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCBob3cgYGZpbHRlci5jYCBnZXRzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCByZXNpZGUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmVhcnRoIGluIHRoZXJlLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBNYWtlZmlsZSBhbmQgaHVudCBkb3duIHRoZSByZWxldmFudCBzZWN0aW9uLi4uIGdvdHRhIGZpbmQgdGhvc2UgYnVpbGQgZGlyZWN0aXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjA4LjI4ODQxMjQ0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2ODU5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNTowOC4zNDgxMTAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxNDU3NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIEJQRl9TWVNDQUxMIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHByZXNlbmNlIG9mIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IG9yIGRlZmluaXRpb24gb2YgYEJQRl9TWVNDQUxMYCBtaWdodCBiZSBkZXBlbmRlbnQgb24gc29tZSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGtlcm5lbCB2ZXJzaW9uLCBvciBvdGhlciBjb21waWxlLXRpbWUgZmxhZy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGAjaWZkZWZgLCBgI2lmbmRlZmAsIGAjaWZgLCBvciBwb3RlbnRpYWxseSBldmVuIGAjZGVmaW5lYCB1c2FnZSBzdXJyb3VuZGluZyB0aGlzIG1hY3JvLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNvdWxkIGJlIGEgY29tcGF0aWJpbGl0eSBtZWFzdXJlIGZvciBvbGRlciBrZXJuZWxzLCBhIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHksIHNvIGl0IGlzIG5lY2Vzc2FyeSB0byBkZXRlcm1pbmUgZXhhY3RseSB3aGF0IHRoaXMgbWVhbnMuIFRoaXMgaXMgb2Z0ZW4gdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgbGFuZHNjYXBlLiBUaGUgcHJlc2VuY2Ugb2YgY29uZGl0aW9uYWxzIGhlcmUgd291bGQgaW1tZWRpYXRlbHkgcmFpc2Ugc29tZSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhYm91dCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHksIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgdGhlIHN0YWJpbGl0eSBvZiBCUEYtcmVsYXRlZCBjb2RlLiBMZXQncyBzdGFydCB0aGUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjczMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjEwLjU5OTU3MTE5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NzExMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTQ1MzQ9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NTM1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzY6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNy12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MTAuNjUwMzQ3MzM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDA1MDkwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0YCBhbmQgQlBGX1NZU0NBTEwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgZ3VhcmRpbmcgY29uZGl0aW9ucy4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBCUEYsIGFuZCBnaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZSB1c2Ugb2YgYEJQRl9TWVNDQUxMYCBpcyBpbXBvcnRhbnQgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB3aGF0IGNvbmRpdGlvbmFsIGxvZ2ljIGlzIHdyYXBwZWQgYXJvdW5kIGl0cyB1c2UuIEFyZSB3ZSB1c2luZyBhIGAjaWZkZWZgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJcyBpdCBhbiBpbmxpbmUgZnVuY3Rpb24/IE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBmb3IgdGhpcyBmdW5jdGlvbiB0byBiZSBldmVuIGNvbnNpZGVyZWQgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgaW1wYWN0IGFuZCBkZXBlbmRlbmNpZXMuIExldCdzIGdldCB0byB0aGUgY29kZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGVuYWJsZWQgYnkgYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbiwgbWF5YmUgYSBmZWF0dXJlIGZsYWcuLi4gS25vd2luZyB0aG9zZSBkZXRhaWxzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gZXZhbHVhdGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MTMuMTkwODYxMzQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEyNDg3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00OTQ9dHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTUwNy0gICAgICAgIHtcXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjUwODogICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3Rhc2tfa2Z1bmNfc2V0KTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTUwOS0gICAgICAgIH1cXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYz0xMjI3PXN0YXRpYyB2b2lkIF9faW5pdCB3YWtldXBfc291cmNlc19icGZfaW5pdCh2b2lkKVxcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy0xMjI4LXtcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM6MTIyOTpcXHRpZiAocmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZ3YWtldXBfc291cmNlX2tmdW5jX3NldCkpXFxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jLTEyMzAtXFx0XFx0cG1fcHJfZGJnKFxcXCJXYWtldXA6IGZhaWxlZCB0byByZWdpc3RlciBCVEYga2Z1bmNzXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM9NjU4PXN0YXRpYyBpbnQgX19pbml0IGhpZF9icGZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NjctXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2Njg6XFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZoaWRfYnBmX2tmdW5jX3NldCk7XFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NjktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NzMtXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2NzQ6XFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZoaWRfYnBmX3N5c2NhbGxfa2Z1bmNfc2V0KTtcXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY3NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYz0zMjE9c3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzIyLXtcXG5mcy9iaW5mbXRfbWlzY19icGYuYzozMjM6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTMyNC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJtX2JwZl9rZnVuY19zZXQpO1xcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ5Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy00OTUtXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5NjpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ5Ny1cXHRpZiAocmV0IHx8ICFJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpKVxcbmZzL2JwZl9mc19rZnVuY3MuYy00OTgtXFx0XFx0cmV0dXJuIHJldDtcXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDk5OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTAwLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE4Nj12b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg3LXtcXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjE4ODpcXHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzdmVyaXR5X3NldCk7XFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9idGYuaD01ODc9dTMyICpidGZfa2Z1bmNfaXNfbW9kaWZ5X3JldHVybihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsXFxuaW5jbHVkZS9saW51eC9idGYuaC01ODgtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcXG5pbmNsdWRlL2xpbnV4L2J0Zi5oOjU4OTppbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTkwLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmLmg9NjQ3PXN0YXRpYyBpbmxpbmUgdTMyICpidGZfa2Z1bmNfaWRfc2V0X2NvbnRhaW5zKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjUzLX1cXG5pbmNsdWRlL2xpbnV4L2J0Zi5oOjY1NDpzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuaW5jbHVkZS9saW51eC9idGYuaC02NTUtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKVxcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5jPTEyMD1zdGF0aWMgaW50IGJwZl9pb19pbml0KHN0cnVjdCBidGYgKmJ0ZilcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuYy0xMjktXFxuaW9fdXJpbmcvYnBmLW9wcy5jOjEzMDpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5pb191cmluZy9icGYtb3BzLmMtMTMxLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZicGZfaW9fdXJpbmdfa2Z1bmNfc2V0KTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTMxPXN0YXRpYyBpbnQgX19pbml0IGtmdW5jX2luaXQodm9pZClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzMi17XFxua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZjb21tb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC19XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg5MDI9c3RhdGljIGludCBidGZfcG9wdWxhdGVfa2Z1bmNfc2V0KHN0cnVjdCBidGYgKmJ0ZiwgZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04OTQ4LVxcdHNldCA9IHRhYi1cXHUwMDNlc2V0c1tob29rXTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg5NDk6XFx0LyogV2FybiB3aGVuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQgaXMgY2FsbGVkIHR3aWNlIGZvciB0aGUgc2FtZSBob29rXFxua2VybmVsL2JwZi9idGYuYy04OTUwLVxcdCAqIGZvciBtb2R1bGUgc2V0cy5cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTE3Mz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTE4MS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjkxODI6c3RhdGljIGludCBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxcbmtlcm5lbC9icGYvYnRmLmMtOTE4My1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMDgtLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgb25seSBmcm9tIGluaXRjYWxscy9tb2R1bGUgaW5pdCBmdW5jdGlvbnMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jOjkyMDk6aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMTAtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjItXFx0aG9vayA9IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhwcm9nX3R5cGUpO1xcbmtlcm5lbC9icGYvYnRmLmM6OTIyMzpcXHRyZXR1cm4gX19yZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGhvb2ssIGtzZXQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTIyNC19XFxua2VybmVsL2JwZi9idGYuYzo5MjI1OkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTIyNi1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTIyOD1pbnQgcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxcbmtlcm5lbC9icGYvYnRmLmMtOTIyOS17XFxua2VybmVsL2JwZi9idGYuYzo5MjMwOlxcdHJldHVybiBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlRGX0tGVU5DX0hPT0tfRk1PRFJFVCwga3NldCk7XFxua2VybmVsL2JwZi9idGYuYy05MjMxLX1cXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jPTUxNT1zdGF0aWMgaW50IF9faW5pdCBjcHVtYXNrX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNS1cXHRyZXQgPSBicGZfbWVtX2FsbG9jX2luaXQoXFx1MDAyNmJwZl9jcHVtYXNrX21hLCBzaXplb2Yoc3RydWN0IGJwZl9jcHVtYXNrKSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1Mjg6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyOS1cXHRyZXR1cm4gIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoY3B1bWFza19kdG9ycyxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM4OC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM4OTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozOTE6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM5My1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNyeXB0X2luaXRfa2Z1bmNfc2V0KTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5ODI9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk5Ny1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTk4OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5OTk6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAzOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDA0LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoZ2VuZXJpY19kdG9ycyxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDYtXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwNzpcXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZjb21tb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDA4LX1cXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0yMzA9c3RhdGljIGludCBpbml0X3N1YnN5c3RlbSh2b2lkKVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0yMzEte1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoyMzI6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZicGZfbWFwX2l0ZXJfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMzLX1cXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTc1OT1zdGF0aWMgX19pbml0IGludCBycXNwaW5sb2NrX3JlZ2lzdGVyX2tmdW5jcyh2b2lkKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2MC17XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzYxOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2cnFzcGlubG9ja19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2Mi19XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmM9NzY2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9yc3RhdF9rZnVuY19pbml0KHZvaWQpXFxua2VybmVsL2Nncm91cC9yc3RhdC5jLTc2Ny17XFxua2VybmVsL2Nncm91cC9yc3RhdC5jOjc2ODpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsXFxua2VybmVsL2Nncm91cC9yc3RhdC5jLTc2OS1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJwZl9yc3RhdF9rZnVuY19zZXQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xMTYwPWludCBzY3hfY2lkX2tmdW5jX2luaXQodm9pZClcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTExNjEte1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MTE2MjpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2luaXRfY2lkcykgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjM6XFx0XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjQ6XFx0XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjU6XFx0XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCk7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0xMTY2LX1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTg9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzYtXFx0ICoga2Z1bmMgcmVnaXN0cmF0aW9uIGNhbid0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk3NzpcXHQgKiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KCkgbmVlZHMgbW9zdCBvZiB0aGUgc3lzdGVtIHRvIGJlIHVwLlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzgtXFx0ICpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODYtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4NzpcXHRpZiAoKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODgtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9lbnF1ZXVlX2Rpc3BhdGNoKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTg5OlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5MC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2Rpc3BhdGNoKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTkxOlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5Mi1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NwdV9yZWxlYXNlKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTkzOlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5NC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3VubG9ja2VkKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTk1OlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3VubG9ja2VkKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTk3OlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5OC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5OTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwMDAtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSB8fFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwMDE6XFx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDAyLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1NTQ9aW50IHNjeF9pZGxlX2luaXQodm9pZClcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy0xNTU1LXtcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU2OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNnNjeF9rZnVuY19zZXRfaWRsZSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU3OlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNnNjeF9rZnVuY19zZXRfaWRsZSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU4OlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNnNjeF9rZnVuY19zZXRfaWRsZSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU5OlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNnNjeF9rZnVuY19zZXRfc2VsZWN0X2NwdSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTYwOlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNnNjeF9rZnVuY19zZXRfc2VsZWN0X2NwdSk7XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTU2MS19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzQ1OT1zdGF0aWMgaW50IF9faW5pdCBicGZfdHJhY2Vfa2Z1bmNzX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDYyLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDYzOlxcdGVyciA9IGVyciA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfS1BST0JFLCBcXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2NDpcXHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY1LVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xODI9c3RhdGljIGludCBfX2luaXQgYnBmX21lbWNvbnRyb2xfaW5pdCh2b2lkKVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODUtXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODY6XFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQyxcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4Ny1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX21lbWNvbnRyb2xfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xODg4PXN0YXRpYyBpbnQgX19pbml0IGJwZl9wcm9nX3Rlc3RfcnVuX2luaXQodm9pZClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xOTAyLVxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChcXHUwMDI2YnBmX3Rlc3RfbW9kaWZ5X3JldHVybl9zZXQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTAzOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTA0OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE5MDYtXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX3Byb2dfdGVzdF9kdG9yX2tmdW5jLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTYtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE3OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMxOC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxOTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMjE6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyODc1PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg3OC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg3OTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgwOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0tfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODQ6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg1OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX0lOLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg2OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODc6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg4OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg5OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTI6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTM6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk1OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk2OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5NzpcXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk4LX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU5PXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MC17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NjE6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2Mi19XFxuLS1cXG5uZXQvY29yZS94ZHAuYz05OTM9c3RhdGljIGludCBfX2luaXQgeGRwX21ldGFkYXRhX2luaXQodm9pZClcXG5uZXQvY29yZS94ZHAuYy05OTQte1xcbm5ldC9jb3JlL3hkcC5jOjk5NTpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNnhkcF9tZXRhZGF0YV9rZnVuY19zZXQpO1xcbm5ldC9jb3JlL3hkcC5jLTk5Ni19XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MzQ1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90Y3BfY2Ffa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM0OC1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzQ5OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3RjcF9jYV9rZnVuY19zZXQpO1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zNTAtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFxcdTAwMjZicGZfdGNwX2Nvbmdlc3Rpb25fb3BzLCB0Y3BfY29uZ2VzdGlvbl9vcHMpO1xcbi0tXFxubmV0L2lwdjQvZm91X2JwZi5jPTExMz1pbnQgcmVnaXN0ZXJfZm91X2JwZih2b2lkKVxcbm5ldC9pcHY0L2ZvdV9icGYuYy0xMTQte1xcbm5ldC9pcHY0L2ZvdV9icGYuYzoxMTU6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxubmV0L2lwdjQvZm91X2JwZi5jLTExNi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvdV9icGZfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTc1PXN0YXRpYyBpbnQgX19pbml0IGJicl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTExODAtXFxubmV0L2lwdjQvdGNwX2Jici5jOjExODE6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZ0Y3BfYmJyX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvdGNwX2Jici5jLTExODItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYz01MDE9c3RhdGljIGludCBfX2luaXQgY3ViaWN0Y3BfcmVnaXN0ZXIodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNC1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYzo1MzU6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZ0Y3BfY3ViaWNfa2Z1bmNfc2V0KTtcXG5uZXQvaXB2NC90Y3BfY3ViaWMuYy01MzYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgZGN0Y3BfcmVnaXN0ZXIodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTI5OS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYzozMDA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZ0Y3BfZGN0Y3Bfa2Z1bmNfc2V0KTtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0zMDEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01NDA9aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNm5mX2Nvbm50cmFja19rZnVuY19zZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjU0NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNm5mX2Nvbm50cmFja19rZnVuY19zZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0Ni1cXHRpZiAoIXJldCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jPTExNj1pbnQgbmZfZmxvd19yZWdpc3Rlcl9icGYodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtMTE3LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6MTE4OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0xMTktXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZuZl9mbG93X2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYz02Nj1pbnQgcmVnaXN0ZXJfbmZfbmF0X2JwZih2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNjktXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03MS1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2bmZfYnBmX25hdF9rZnVuY19zZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzQtXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzU6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzYtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZuZl9icGZfbmF0X2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9NDYwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9xZGlzY19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDY5LVxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYzo0NzA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZicGZfcWRpc2Nfa2Z1bmNfc2V0KTtcXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDcxLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3Moc2tiX2tmdW5jX2R0b3JzLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM9MTA2PWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9pbnRlcmZhY2VfYnBmKHZvaWQpXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmMtMTA3LXtcXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYzoxMDg6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmMtMTA5LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2eGZybV9pbnRlcmZhY2Vfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM9MTMwPWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYodm9pZClcXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jLTEzMS17XFxubmV0L3hmcm0veGZybV9zdGF0ZV9icGYuYzoxMzI6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXFxubmV0L3hmcm0veGZybV9zdGF0ZV9icGYuYy0xMzMtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ4ZnJtX3N0YXRlX3hkcF9rZnVuY19zZXQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jPTI1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90ZXN0X21vZG9yZGVyX3hfaW5pdCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYy0yNi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jOjI3OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYy0yOC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJwZl90ZXN0X21vZG9yZGVyX3hfc2V0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl95X2luaXQodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYzoyNzpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmMtMjgtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfdGVzdF9tb2RvcmRlcl95X3NldCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jPTIxMzA9c3RhdGljIGludCBicGZfdGVzdG1vZF9pbml0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTIxNDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQxOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDI6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtMjE0Ni1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KFxcdTAwMjZicGZfdGVzdG1vZF90cmFtcG9saW5lX2NvdW50X2Ztb2RyZXRfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MTUuNjAzMzc5OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1MjQ3MjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBCUEYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGEgZmV3IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGZvciBCUEYga2Z1bmMgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVzc2VudGlhbHM6IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBCUEYga2Z1bmNzIHJlbHkgb24gYm90aCBvZiB0aGVzZSBiZWluZyBlbmFibGVkLiBPZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgYWxzbyBmdW5kYW1lbnRhbCBmb3IgbmV0d29ya2luZy1yZWxhdGVkIEJQRiBhcHBsaWNhdGlvbnMuIFRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGlzIGluZm9ybWF0aW9uIGFyZSBpbiBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZXNlIGNvcmUgc2V0dGluZ3MgYmVmb3JlIGRpdmluZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MjIuMjU1ODU1MTYxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3ODg1MTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MjIuNDk4NjYxNDYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTQ0MjU0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsJ3MgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgKEJQRikgc3Vic3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIGdvIGRlZXBlci4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgY2VudHJhbCBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBCUEYgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0gYW5kIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgQlBGIGNvbnRyb2xzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgSSBjYW4gc3RhcnQgdW50YW5nbGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgZmVhdHVyZXMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBob3cgQlBGIGZpdHMgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDAxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MjguODkzMDkwNTUxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI5NTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNToyOC45NDYzOTIzNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA2MTM0OTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIG15IGZpcnN0IG1vdmUgaXMgdG8gbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIGlzIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0IGl0cyBpbXBhY3QuIEknbSBsb29raW5nIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGlzIGFzIEkgZXhwZWN0LiBJdCdzIGEgcXVpY2sgYnV0IGVzc2VudGlhbCBzdGVwIHRvIGFzc2VzcyBpdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSBhbmQgaXRzIGdlbmVyYWwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MzMuMDA3NzQ1MzM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MzMuMDA3ODI0MDg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTAwNDY4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBCVEYgSW5mb3JtYXRpb246IEEgS2NvbmZpZyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBCVEYgZGVidWdnaW5nIHNpdHVhdGlvbi4gRmlyc3QgdGhpbmcncyBmaXJzdDogSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZ2F0ZWtlZXBlcnMgZm9yIGRlYnVnLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBhbnl0aGluZyByZWxhdGVkIHRvIEJURi4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGxpbmVzIGFyZSBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBidWlsZC4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgSSBoYXZlIGF2YWlsYWJsZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MzUuMjk3ODc0MzA2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzNTE3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXFxubGliL0tjb25maWcuZGVidWctMzk5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDI3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjM3LjA1MTQwMDU2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzA4NTQ5Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRGVidWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gc29tZSBkZWJ1ZyBzZXR0aW5ncyBpbiB0aGlzIGJ1aWxkLiBMZXQncyBzZWUuLi5JJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMzk4IHRocm91Z2ggNDIwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgZ29pbmcgdG8gbGF5IG91dCBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGRlZmluZSBzb21lIG1hY3JvcyByZWxhdGVkIHRvIGRlYnVnZ2luZyBmZWF0dXJlcy4gR2l2ZW4gdGhlIGZpbGUgbmFtZSwgaXQncyB2ZXJ5IGxpa2VseSB0aGlzIGFyZWEgaXMgZGVkaWNhdGVkIHRvIHBhcmFtZXRlcnMgb3IgY29uZmlndXJhdGlvbnMgZm9yIGNvcmUgb3IgZm91bmRhdGlvbmFsIGRlYnVnZ2luZyBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBvZiB0aGVzZSB2YWx1ZXMgYW5kIHRoZWlyIGltcGFjdCBvbiBidWlsZCBzaXplIGFuZCBwZXJmb3JtYW5jZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgbnVhbmNlcyBvciBwb3RlbnRpYWwgdHdlYWtzIGFyZSBoaWRkZW4gaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjQwLjM1OTk1ODkyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTgsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTg6XFx0Y29uZmlnIERFQlVHX0lORk9fQlRGXFxuIDM5OTpcXHRcXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4gNDAwOlxcdFxcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0lORk9fUkVEVUNFRFxcbiA0MDE6XFx0XFx0ZGVwZW5kcyBvbiAhR0NDX1BMVUdJTl9SQU5EU1RSVUNUIHx8IENPTVBJTEVfVEVTVFxcbiA0MDI6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiA0MDM6XFx0XFx0ZGVwZW5kcyBvbiBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjJcXG4gNDA0OlxcdFxcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xcbiA0MDU6XFx0XFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxcbiA0MDY6XFx0XFx0aGVscFxcbiA0MDc6XFx0XFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxcbiA0MDg6XFx0XFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcXG4gNDA5OlxcdFxcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cXG4gNDEwOlxcdFxcbiA0MTE6XFx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xcbiA0MTI6XFx0XFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXFx1MDAzZT0gMTIzXFxuIDQxMzpcXHRcXHRkZXBlbmRzIG9uIENDX0lTX0NMQU5HXFxuIDQxNDpcXHRcXHRoZWxwXFxuIDQxNTpcXHRcXHQgIERlY2lkZSB3aGV0aGVyIHBhaG9sZSBlbWl0cyBidGZfdGFnIGF0dHJpYnV0ZXMgKGJ0Zl90eXBlX3RhZyBhbmRcXG4gNDE2OlxcdFxcdCAgYnRmX2RlY2xfdGFnKSBvciBub3QuIEN1cnJlbnRseSBvbmx5IGNsYW5nIGNvbXBpbGVyIGltcGxlbWVudHNcXG4gNDE3OlxcdFxcdCAgdGhlc2UgYXR0cmlidXRlcywgc28gbWFrZSB0aGUgY29uZmlnIGRlcGVuZCBvbiBDQ19JU19DTEFORy5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuIDQyMDpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjRcXG4gNDIxOlxcdFxcdGhlbHBcXG4gNDIyOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6NDAuMzYwMzE3MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU1NTUzMzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSdyZSBkZWFsaW5nIHdpdGggYGJwZl9zb2NrX2Rlc3Ryb3lgLCB3aGljaCBpcyB1c2VkIHRvIGRlc3Ryb3kgc29ja2V0cyAoVENQLCBVRFAsIHRoZSB1c3VhbCBzdXNwZWN0cykuIFRoZSBzdGFuZGFyZCBgQ09ORklHX0lORVRgIGlzLCBvZiBjb3Vyc2UsIGEgZ2l2ZW4uIEl0IGFsc28gbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgIGFyZSBlc3NlbnRpYWwgYXMgd2VsbC5cblxuTm93LCBsZXQncyBnZXQgZm9jdXNlZC4gTXkgbWFpbiB0YXJnZXQgaXMgYGJwZl9zb2NrX2Rlc3Ryb3lgLiBUaGUgbW9kaWZpY2F0aW9uIGlzIGluIHRoZSBrZXJuZWwgaW1hZ2UuIEl0IGxvb2tzIGxpa2UgYHRjcF9hYm9ydGAgaXMgY2xvc2VseSByZWxhdGVkLCBhcyBpdCBoYW5kbGVzIFRJTUVfV0FJVCBzb2NrZXQgZGVzdHJ1Y3Rpb24uIExldCdzIHNlZS4uLiBgdHJhY2luZ19pdGVyX2ZpbHRlcmAgaXMgaW4gdGhlIHNhbWUgZmlsZSBidXQgaXQgd2Fzbid0IG1vZGlmaWVkLiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgZm9jdXMuIFdlIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBgdGNwX2Fib3J0YCBzaW5jZSBpdCdzIGRpcmVjdGx5IGludm9rZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfc29ja19kZXN0cm95YCBhbmQgYHRjcF9hYm9ydGAgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGUuIE9rYXksIGBicGZfc29ja19kZXN0cm95YCBpcyBhIGdsb2JhbCBrZnVuYyBzeW1ib2wgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gQW5kIGB0Y3BfYWJvcnRgIGlzIGFsc28gbm9uLXN0YXRpYywgZm91bmQgaW4gYG5ldC9pcHY0L3RjcC5jYC4gR29vZC5cblxuSnVzdCB0byBiZSBzYWZlLCBJJ20gdmVyaWZ5aW5nIHRob3NlIHJlcXVpcmVkIGNvbmZpZ3MgYWdhaW46IGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgSU5FVGAuXG5cblRoZSByYXRpb25hbGUgaXMgc291bmQuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIGhhbmRsZSB0aGUgZGVzdHJ1Y3Rpb24gb2Ygbm9uLWZ1bGwgc29ja2V0cywgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBUQ1BfVElNRV9XQUlUYCBhbmQgYFRDUF9ORVdfU1lOX1JFQ1ZgIHN0YXRlcy4gSXQncyBkb2luZyB0aGlzIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGZpcnN0LiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBsZXRzIEJQRiBpdGVyYXRvcnMgY2FsbCBgYnBmX3NvY2tfZGVzdHJveWAgb24gc29ja2V0cyBpbiBgVElNRV9XQUlUYCwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyBwcm90b2NvbC1zcGVjaWZpYyBhYm9ydCByb3V0aW5lcyBsaWtlIGB0Y3BfYWJvcnRgLiBUaGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIEJQRiBpdGVyYXRvcnMsIHNvIGZ1enppbmcgaXMgY2VydGFpbmx5IHdhcnJhbnRlZC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ0NCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNTo0Ny45MTU4NTU3OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk0NTY2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NvY2tfZGVzdHJveVwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NvY2tfZGVzdHJveSgpIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGFsbG93IHByb3RvY29sIGFib3J0IGhhbmRsZXJzIChlLmcuLCB0Y3BfYWJvcnQpIHRvIGRlc3Ryb3kgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCBTWU5fUkVDViBzb2NrZXRzKSBieSBxdWFsaWZ5aW5nIHRoZSBwcm90b2NvbCBjaGVjayB3aXRoIHNrX2Z1bGxzb2NrKCkuIFRoaXMgZW5hYmxlcyBuZXcgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrZXQgaXRlcmF0b3IgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6NDguMDEyODE2ODc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc0NTA0NDY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjQ4LjAxMzYxMjAzNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5NzQ0MjQ0NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBvbmx5IGNoZWNrIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTowNDoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI1LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuaW5kZXggOWMxMTkzOGZlNTk3ZC4uNmNjYzdjZGE0MTBiZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuQEAgLTExMCw2ICsxMTAsNjUgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiBcdFx0Y2xvc2Uoc2Vydik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbit7XG4rXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbitcdGNoYXIgYnVmWzFdO1xuK1xuK1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbitcdGlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCBcImNvbm5lY3RfdG9fZmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsIFwic2VydiBhY2NlcHRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0YWNjZXB0X3NlcnYgPSAtMTtcbitcbitcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwiY2xpZW50IHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMSwgXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZGVzdHJveV9lcnIsIFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXCIpO1xuK1xuK1x0LyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDAsIFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChjbGllbiAhPSAtMSlcbitcdFx0Y2xvc2UoY2xpZW4pO1xuK1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRpZiAoc2VydiAhPSAtMSlcbitcdFx0Y2xvc2Uoc2Vydik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4ge1xuIFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7XG5AQCAtMjA0LDExICsyNjMsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuIFx0XHR0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7XG4tXG4gXHRSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7XG4gXG4gY2xlYW51cDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5pbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbiBcbiBfX2JlMTYgc2Vydl9wb3J0ID0gMDtcbitpbnQgdHdfZm91bmQgPSAwO1xuK2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJpdGVyL3RjcFwiKVxuK2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC1cdTAwM2Vza19jb21tb247XG4rXHRfX3U2NCAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHRpZiAoIXNrX2NvbW1vbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc2tfY29tbW9uLVx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1x0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xuK1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dHdfZm91bmQrKztcbitcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuIFNFQyhcIml0ZXIvdWRwXCIpXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjQ4LjAxMzYxMzU5NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTE1NjQ3MzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIGZ1enppbmcgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLlxuXG5SaWdodCwgc28gdGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YC4gSXQgbG9va3MgbGlrZSBpdCdzIHJlbW92aW5nIGEgY2hlY2sgZm9yIGBzay1cdTAwM2Vza19wcm90b2NvbGAgd2l0aGluIGFuIGVhcmx5IHJldHVybi4gVGhlIG9yaWdpbmFsIGxvZ2ljIHByZXZlbnRlZCB0aGUgZXhlY3V0aW9uIG9mIGBkaWFnX2Rlc3Ryb3lgIGlmIHRoZSBzb2NrZXQgd2Fzbid0IFRDUCBvciBVRFAuIFRoZSBuZXcgbG9naWMgaXMgYWxsb3dpbmcgYGRpYWdfZGVzdHJveWAgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgc29ja2V0IGlzbid0IFwiZnVsbHNvY2tcIi4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBicGZfc29ja19kZXN0cm95YCBhbmQgYGRpYWdfZGVzdHJveWAgZm9yIHNvY2tldHMgdGhhdCBhcmUgbm90IFwiZnVsbHNvY2ssXCIgc3BlY2lmaWNhbGx5IHRpbWV3YWl0IHNvY2tldHMgb3IgcmVxdWVzdCBzb2NrZXRzLCB3aGljaCBJICprbm93KiBjYW4gZXhpc3QuXG5cblRvIHByb2NlZWQgZWZmaWNpZW50bHksIEknbGwgbGV2ZXJhZ2UgYGdyZXBwZXJgIChvciBpZiB0aGF0J3Mgbm90IGF2YWlsYWJsZSwgYHJlYWQtZmlsZWApIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCwgYGluZXRfdHdza19kaWFnX2Rlc3Ryb3lgLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGBkaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGhhbmRsaW5nIG9mIHRob3NlIHNvY2tldCB0eXBlcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIG1lbW9yeSBzYWZldHk6IGFyZSB3ZSBub3cgcG90ZW50aWFsbHkgZnJlZWluZyBtZW1vcnkgb3IgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBpbiBhIHdheSB0aGF0IHdhc24ndCBwcmV2aW91c2x5IHBvc3NpYmxlPyBUaGF0J3Mgd2hhdCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGluIHRoZSBjYWxsIHBhdGhzLiBJZiB0aGVyZSdzIGEgZ29vZCBjaGFuY2Ugb2YgbWVtb3J5IGlzc3VlcywgS01TQU4gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA2OjAzLjE3MDA5MTk3NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTEzMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYWdfZGVzdHJveVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTE5PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTI3LVxcdCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI4OlxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkyOS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNjpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzNy19XFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMTQ5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L2NvcmUvc29ja19kaWFnLmM6MTUwOlxcdGNvbnN0IGVudW0gc2tuZXRsaW5rX2dyb3VwcyBncm91cCA9IHNvY2tfZGlhZ19kZXN0cm95X2dyb3VwKHNrKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXFx0aW50IGVyciA9IC0xO1xcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTEtXFxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzEzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMTc6XFx0aWYgKCFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95KVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzE5LVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMjEtfVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMjpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX2RpYWdfZGVzdHJveSk7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcXG5uZXQvaXB2NC9yYXcuYzo5NzM6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0xODc9c3RhdGljIHZvaWQgcmF3X2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9yYXdfZGlhZy5jOjE5NTpzdGF0aWMgaW50IHJhd19kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTE5Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXFxuLS1cXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTIwNC1cXHRcXHRyZXR1cm4gUFRSX0VSUihzayk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYzoyMDU6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXFx0c29ja19wdXQoc2spO1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMTgtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5OlxcdC5kZXN0cm95XFx0XFx0PSByYXdfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjIwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDMtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY1MzpcXHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9NjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNjY5LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY3MDpcXHQuZGVzdHJveVxcdFxcdD0gdGNwX2RpYWdfZGVzdHJveSxcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTUtXFx0Lm5vX2F1dG9iaW5kXFx0XFx0PSB0cnVlLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM5NjpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB0Y3BfYWJvcnQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTQzPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMxNzMtXFx0Lm9ial9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSxcXG5uZXQvaXB2NC91ZHAuYzozMTc0OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHVkcF9hYm9ydCxcXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTE0ND1zdGF0aWMgdm9pZCB1ZHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0xNTEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3VkcF9kaWFnLmM6MTUyOnN0YXRpYyBpbnQgdWRwX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDAtXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDItXFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHVkcF9kaWFnX2hhbmRsZXIgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMTc6XFx0LmRlc3Ryb3lcXHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjE4LSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNjowMy40MTQwMDk4MDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3OTU1MzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGl0OlxuXG4qKkNvbnNpZGVyaW5nIFRDUCBTb2NrZXQgQWJvcnQgXHUwMDI2IFRpbWV3YWl0IFNvY2tldCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgVENQIHNvY2tldCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGVjaWRlIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBhIHBhcnRpY3VsYXIgcHJvYmxlbSB0aGF0IEknbSB3b3JraW5nIHRocm91Z2guIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCBhbmQgYHRjcF9hYm9ydGAuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gaXMgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aW1ld2FpdCBzb2NrZXRzIGFyZSB1bHRpbWF0ZWx5IGhhbmRsZWQgYW5kIGNsZWFuZWQgdXAuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhIGJ1ZyBvciBwZXJmb3JtYW5jZSBpc3N1ZSBJIGFtIGZhY2luZy4gRmlyc3QsIEkgdGhpbmsgSSdsbCBmb2N1cyBvbiBgdGNwX2Fib3J0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDY6MDUuNDkzNTY3ODUxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAyNjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTExNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNjowNS41Njc2MDU5NzZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc3MzE5MDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBUQ1AncyBtYW5hZ2luZyBjb25nZXN0aW9uIGNvbnRyb2wsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGl0IGhhbmRsZXMgcmV0cmFuc21pc3Npb25zLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBgbmV0L2lwdjQvdGNwLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTE1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zLiBJJ20gZ3Vlc3NpbmcgdGhhdCBhcmVhIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgbG9naWMuIE1pZ2h0IGFzIHdlbGwgdXNlIHRoYXQgdG8gZ3VpZGUgdGhlIG5leHQgZmV3IG1pbnV0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNjowOC4zNDA3OTk1MTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMTU6XFx0aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNTExNjpcXHR7XFxuNTExNzpcXHRcXHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xcbjUxMTg6XFx0XFxuNTExOTpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVikge1xcbjUxMjA6XFx0XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XFxuNTEyMTpcXHRcXG41MTIyOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTIzOlxcdFxcdFxcdGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XFxuNTEyNDpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTI1OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMjY6XFx0XFx0fVxcbjUxMjc6XFx0XFx0aWYgKHN0YXRlID09IFRDUF9USU1FX1dBSVQpIHtcXG41MTI4OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTtcXG41MTI5OlxcdFxcbjUxMzA6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ0dy1cXHUwMDNldHdfcmVmY250KTtcXG41MTMxOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTMyOlxcdFxcdFxcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XFxuNTEzMzpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTM0OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMzU6XFx0XFx0fVxcbjUxMzY6XFx0XFxuNTEzNzpcXHRcXHQvKiBCUEYgY29udGV4dCBlbnN1cmVzIHNvY2sgbG9ja2luZy4gKi9cXG41MTM4OlxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbjUxMzk6XFx0XFx0XFx0LyogRG9uJ3QgcmFjZSB3aXRoIHVzZXJzcGFjZSBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgdGNwX2Nsb3NlLiAqL1xcbjUxNDA6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG41MTQxOlxcdFxcbjUxNDI6XFx0XFx0LyogQXZvaWQgY2xvc2luZyB0aGUgc2FtZSBzb2NrZXQgdHdpY2UuICovXFxuNTE0MzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjUxNDQ6XFx0XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTE0NTpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjUxNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuNTE0NzpcXHRcXHR9XFxuNTE0ODpcXHRcXG41MTQ5OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xcbjUxNTA6XFx0XFx0XFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG41MTUxOlxcdFxcdFxcdGluZXRfY3NrX2xpc3Rlbl9zdG9wKHNrKTtcXG41MTUyOlxcdFxcdH1cXG41MTUzOlxcdFxcbjUxNTQ6XFx0XFx0LyogRG9uJ3QgcmFjZSB3aXRoIEJIIHNvY2tldCBjbG9zZXMgc3VjaCBhcyBpbmV0X2Nza19saXN0ZW5fc3RvcC4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDY6MDguMzQxMDEyMTU5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0MTY4MjE4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBgYnBmX3NvY2tfZGVzdHJveWAsIHdoaWNoIHRha2VzIGEgYHNvY2tfY29tbW9uYCBwb2ludGVyLiAgUHJldmlvdXNseSwgaXQgd2FzIHJlYWRpbmcgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCBkaXJlY3RseS4gVGhlIHByb2JsZW0gaXMgdGhhdCBub3QgYWxsIHNvY2tldHMsIHNwZWNpZmljYWxseSB0aW1lLXdhaXQgb3IgcmVxdWVzdCBzb2NrZXRzIChgIXNrX2Z1bGxzb2NrKHNrKWApLCBhY3R1YWxseSBoYXZlIGBzay1cdTAwM2Vza19wcm90b2NvbGAgZGVmaW5lZCB3aXRoaW4gdGhlIGBzb2NrX2NvbW1vbmAgc3RydWN0dXJlLiBJdCdzIG9ubHkgd2l0aGluIHRoZSBmdWxsIGBzdHJ1Y3Qgc29ja2AuIFRoZSBjaGVjayBgc2stXHUwMDNlc2tfZnVsbHNvY2soc2spYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIGZ1bGwgc29ja2V0LiBJbiBvdGhlciB3b3JkcywgYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAgb24gdGltZS13YWl0IHNvY2tldHMgd2FzIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgb3IgcG90ZW50aWFsbHkgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgaXQgd2FzIGJsb2NraW5nIHRpbWUtd2FpdCBzb2NrZXRzIGZyb20gYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgdGhlIHByb3RvY29sIGNoZWNrLlxuXG5UaGUgcGF0Y2ggZml4ZXMgdGhpcy4gSXQgbm93IGNoZWNrcyBpZiB0aGUgc29ja2V0IGlzIGEgZnVsbCBzb2NrZXQgKmJlZm9yZSogYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAuICBJZiBpdCdzICpub3QqIGEgZnVsbCBzb2NrZXQgKGxpa2UgYSB0aW1lLXdhaXQgc29ja2V0KSwgaXQgc2tpcHMgdGhlIHByb3RvY29sIGNoZWNrIGVudGlyZWx5IGFuZCBwcm9jZWVkcyBkaXJlY3RseSB0byBjYWxsaW5nIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveWAuIFRoaXMgaXMgY29ycmVjdC4gVGhlIHByb3RvY29sLXNwZWNpZmljIGBkaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9uIChgdGNwX2Fib3J0YCBpbiB0aGUgY2FzZSBvZiBUQ1ApIGFscmVhZHkgaGFuZGxlcyB0aGUgdGltZS13YWl0IG9yIG5ldy1zeW4tcmVjdiBzdGF0ZXMgcHJvcGVybHkuICBUaGlzIHJlc29sdmVzIHRoZSBwcmV2aW91cyBpc3N1ZS5cblxuTm93LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSAqbmV3KiBwcm9ibGVtcy4gIExldCdzIGNvbnNpZGVyIHBvc3NpYmxlIGlzc3VlczpcbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqICBEb2VzIHRoZSBwYXRjaCBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3IgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSBwYXRjaCBhY3R1YWxseSAqcHJldmVudHMqIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cbiogICAqKkRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2U6KiogIERvZXMgdGhpcyBwYXRjaCBjb3B5IGFueSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBOby5cbiogICAqKlVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIG9yIG1lbW9yeSByZWFkczoqKiBEb2VzIGl0IGludHJvZHVjZSBhbnkgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSW4gZmFjdCwgaXQncyBzYWZlci5cbiogICAqKk1lbW9yeSBjb3JydXB0aW9uLCBsb2NraW5nLCBvciBsaWZldGltZSBpc3N1ZXM6KiogIEFueSByaXNrcz8gVGhlIG1haW4gY29uY2VybnMgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCBidXQgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIGxvY2tkZXAsIHJlc3BlY3RpdmVseS5cblxuVGhpcyBsZWFkcyB1cyB0byB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGNvZGUgY2hhbmdlIHdhcnJhbnQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKT8gIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZS4gV2Ugb25seSBuZWVkIGl0IGlmIHRoZSBjaGFuZ2UgZXhwb3NlcyAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHJpc2tzIHRoYXQgYXJlICpub3QqIGNhdWdodCBieSBLQVNBTiwgbG9ja2RlcCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cblxuUmV2aWV3aW5nIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlOioqICBOby5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOby4gVGhlIHBhdGNoIGZpeGVkIGEgcG90ZW50aWFsIHJlYWQgb2YgdW5pbml0aWFsaXplZCBkYXRhLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOby5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGNvZGUgY2hhbmdlIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbkEgZmluYWwgZG91YmxlLWNoZWNrIG9mIHRoZSB0b3VjaGVkIGZpbGVzICggYG5ldC9jb3JlL2ZpbHRlci5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4uLmApIGNvbmZpcm1zIHRoaXMgYW5hbHlzaXMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMuXG5cblRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3NSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDY6MTcuNzU3ODM2ODA5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBvbmx5IGNoZWNrIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBvbmx5IGNoZWNrIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 18:43:46 +0000 UTC FinishedAt: 2026-09-04 19:06:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "e20e078a-0589-4df5-814b-a67cb42f8446" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_destroy", "tcp_abort" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIG9ubHkgY2hlY2sgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCB3aGVuIGBza19mdWxsc29jayhzaylgIGlzIHRydWUsIGFsbG93aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB3aXRoIGEgdmFsaWQgYHNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJbiBmYWN0LCBjaGVja2luZyBgc2tfZnVsbHNvY2soKWAgYXZvaWRzIHJlYWRpbmcgZmllbGRzIGJleW9uZCBgc29ja19jb21tb25gIGZvciBtaW5pYXR1cmUgc29ja2V0cy4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIHNvY2tldCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgb3IgbG9ja2luZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0ZTQ1NWJhYTY3MTMwMGQyNTk3OTllOGVhZjQzZTAxYTlmZDg3MmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE5OjA0OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICYjNDM7MTI5MTIsOCBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuICAqXG4gICogUmV0dXJuOlxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxuLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbiYjNDM7ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgRUlOVkFMLlxuJiM0MzsgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI1LDggJiM0MzsxMjkyNSwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4gXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XG4gXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxuIFx0ICovXG4tXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95IHx8IChzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0ICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxuJiM0MztcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbmluZGV4IDljMTE5MzhmZTU5N2QuLjZjY2M3Y2RhNDEwYmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbkBAIC0xMTAsNiAmIzQzOzExMCw2NSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiYjNDM7e1xuJiM0MztcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbiYjNDM7XHRjaGFyIGJ1ZlsxXTtcbiYjNDM7XG4mIzQzO1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwmIzM0O3N0YXJ0X3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCYjMzQ7Y29ubmVjdF90b19mZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcJiMzNDtzZXJ2IGFjY2VwdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4mIzQzO1x0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxuJiM0MztcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4mIzQzO1x0ICogY2FuJiMzOTt0IHJhY2UgdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHR2KSksIFwmIzM0O2NsZWFyIHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwmIzM0O2NsaWVudCBzaHV0ZG93blwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbiYjNDM7XHRhY2NlcHRfc2VydiA9IC0xO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4mIzQzO1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwmIzM0O2NsaWVudCByZWN2IEVPRlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoY2xpZW4gIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShjbGllbik7XG4mIzQzO1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGlmIChzZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2Uoc2Vydik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgJiM0MzsyNjMsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0Y3Bfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3RjcF90aW1ld2FpdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VkcF9jbGllbnRcJiMzNDspKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt1ZHBfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF91ZHBfc2VydmVyKHNrZWwpO1xuLVxuIFx0UlVOX1RFU1RTKHNvY2tfZGVzdHJveV9wcm9nX2ZhaWwpO1xuIFxuIGNsZWFudXA6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuQEAgLTcsNiAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4gXG4gX19iZTE2IHNlcnZfcG9ydCA9IDA7XG4mIzQzO2ludCB0d19mb3VuZCA9IDA7XG4mIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICYjNDM7MTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtpdGVyL3RjcFwmIzM0OylcbiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtXHUwMDNlc2tfY29tbW9uO1xuJiM0MztcdF9fdTY0ICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghc2tfY29tbW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4mIzQzO1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dHdfZm91bmQmIzQzOyYjNDM7O1xuJiM0MztcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtpdGVyL3VkcFwmIzM0OylcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicGZfc29ja19kZXN0cm95KCkgaW4gbmV0L2NvcmUvZmlsdGVyLmMgdG8gYWxsb3cgcHJvdG9jb2wgYWJvcnQgaGFuZGxlcnMgKGUuZy4sIHRjcF9hYm9ydCkgdG8gZGVzdHJveSBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgYW5kIFNZTl9SRUNWIHNvY2tldHMpIGJ5IHF1YWxpZnlpbmcgdGhlIHByb3RvY29sIGNoZWNrIHdpdGggc2tfZnVsbHNvY2soKS4gVGhpcyBlbmFibGVzIG5ldyBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIHRocm91Z2ggQlBGIHNvY2tldCBpdGVyYXRvciBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxOTowNDoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uMWJiYjcyMTM4YWM2NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTEyOTEyLDggJiM0MzsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWQKICAqCiAgKiBSZXR1cm46Ci0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC4KLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBFSU5WQUwuCiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KICAqIDAgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKQEAgLTEyOTI1LDggJiM0MzsxMjkyNSwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCiAJICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dAogCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCiAJICovCi0JaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwotCQkJCQkgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCmluZGV4IDljMTE5MzhmZTU5N2QuLjZjY2M3Y2RhNDEwYmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCkBAIC0xMTAsNiAmIzQzOzExMCw2NSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogCQljbG9zZShzZXJ2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0ge307CiYjNDM7CWNoYXIgYnVmWzFdOwomIzQzOwomIzQzOwlzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNlcnYsIDAsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgJiMzNDtzZXJ2IGFjY2VwdCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2UKJiM0MzsJICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudAomIzQzOwkgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveAomIzQzOwkgKiBjYW4mIzM5O3QgcmFjZSB1cy4KJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX09LKHNldHNvY2tvcHQoY2xpZW4sIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3R2LAomIzQzOwkJCQkgIHNpemVvZih0dikpLCAmIzM0O2NsZWFyIHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksICYjMzQ7Y2xpZW50IHNodXRkb3duJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gLTE7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi8KJiM0MzsJbiA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O2NsaWVudCByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMSwgJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlBU1NFUlRfT0soc2tlbC0mZ3Q7YnNzLSZndDt0d19kZXN0cm95X2VyciwgJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2smIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDAsICYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIHsKIAlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDsKQEAgLTIwNCwxMSAmIzQzOzI2MywxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpCiAJCXRlc3RfdGNwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdGNwX3NlcnZlcihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfdGltZXdhaXQmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF90aW1ld2FpdChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9jbGllbnQmIzM0OykpCiAJCXRlc3RfdWRwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdWRwX3NlcnZlcihza2VsKTsKLQogCVJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiAKIF9fYmUxNiBzZXJ2X3BvcnQgPSAwOwomIzQzO2ludCB0d19mb3VuZCA9IDA7CiYjNDM7aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDsKIAogaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltOwogCkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7aXRlci90Y3AmIzM0OykKJiM0MztpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC0mZ3Q7c2tfY29tbW9uOwomIzQzOwlfX3U2NCAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFza19jb21tb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHNrX2NvbW1vbi0mZ3Q7c2tjX2ZhbWlseSAhPSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGNwX2Nvbm5fc29ja2V0cywgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwkvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovCiYjNDM7CWlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXR3X2ZvdW5kJiM0MzsmIzQzOzsKJiM0MzsJdHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAogU0VDKCYjMzQ7aXRlci91ZHAmIzM0OykKIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgcGF0Y2ggd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIHBhdGNoIGl0c2VsZiwgdGhlbiBJJiMzOTtsbCBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgQlBGIGFuZCBzb2NrZXQgaW50ZXJuYWxzIHRvIGFzc2VzcyBpdHMgaW1wYWN0LgoKVGhlIGNoYW5nZSBpbiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIFRoZSBjb2RlIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHJlc3RyaWN0IGl0cyB1c2UsIHBhcnRpY3VsYXJseSBmb3Igc29ja2V0cyBiZXlvbmQgVENQIGFuZCBVRFAuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIHRoYXQgYWxsb3dlZCB0aGUgZnVuY3Rpb24gdG8gcHJvY2VlZCBpZiBgZGlhZ19kZXN0cm95YCB3YXMgbm90IGltcGxlbWVudGVkLiBOb3csIGEgcmV0dXJuIG9mIGAtRU9QTk9UU1VQUGAgb2NjdXJzIGlmIGBkaWFnX2Rlc3Ryb3lgIGlzbiYjMzk7dCBpbXBsZW1lbnRlZCBhbmQgdGhlIHNvY2tldCBpcyBub3QgVENQIG9yIFVEUC4gRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIGFuIGFkZGVkIGNoZWNrIHVzaW5nIGBza19mdWxsc29ja2AsIHdoaWNoIGluZGljYXRlcyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIG1vcmUgbGltaXRlZCB0byBmdWxsIHNvY2tldHMgb3RoZXIgdGhhbiBUQ1AvVURQLgoKVGhlIGNvbW1lbnQgaGlnaGxpZ2h0aW5nICYjMzQ7bG9ja2luZyBzZW1hbnRpY3MmIzM0OyBhbmQgY29uY3VycmVudCBleGVjdXRpb24gaXMgYSBrZXkgcmVkIGZsYWcsIG9mIGNvdXJzZS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHNvY2tldCB0ZWFyZG93biB3aXRoaW4gQlBGIGNvbnRleHRzLiBTdXBwb3J0aW5nIHByb3RvY29scyBtdXN0IG5vdyBhY3F1aXJlIHRoZSBzb2NrIGxvY2sgdG8gZW5zdXJlIHNhZmV0eS4KClRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgYnBmX3NvY2tfZGVzdHJveWAgaXMgKnVzZWQqIHdpdGhpbiB0aGlzIGZpbGUgYW5kIHBvdGVudGlhbGx5IGluIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXJvdW5kIHRoaXMgZnVuY3Rpb24gdG8gc2VlIHdoZXJlIGl0IGlzIGNhbGxlZCBhbmQgaG93IGl0cyByZXR1cm4gdmFsdWVzIGFyZSBoYW5kbGVkLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IGV4aXN0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhpcyBmdW5jdGlvbmFsaXR5PyBIb3cgYXJlIHRoZXkgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgZGVwZW5kIG9uIHRoaXMga2Z1bmM/IEkgbmVlZCB0byB0cmFjayBkb3duIHRob3NlIHVzZXMuCgpNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpcyBzb3VuZCwgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSByZWdyZXNzaW9ucywgYW5kIGlmIGl0JiMzOTtzIHByb3Blcmx5IGRvY3VtZW50ZWQuIEEgdGhvcm91Z2ggcmV2aWV3IHdpbGwgcmVxdWlyZSBsb29raW5nIGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IHJlc3RyaWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwNTpcdCAqIFRoZSBmdW5jdGlvbiBleHBlY3RzIGEgbm9uLU5VTEwgcG9pbnRlciB0byBhIHNvY2tldCwgYW5kIGludm9rZXMgdGhlXG4xMjkwNjpcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxuMTI5MDc6XHQgKlxuMTI5MDg6XHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxuMTI5MDk6XHQgKiBsb2Nrcy5cbjEyOTEwOlx0ICpcbjEyOTExOlx0ICogUGFyYW1ldGVyczpcbjEyOTEyOlx0ICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuMTI5MTM6XHQgKlxuMTI5MTQ6XHQgKiBSZXR1cm46XG4xMjkxNTpcdCAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cbjEyOTE2Olx0ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbjEyOTE3Olx0ICogMCBvdGhlcndpc2VcbjEyOTE4Olx0ICovXG4xMjkxOTpcdF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbjEyOTIwOlx0e1xuMTI5MjE6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7XG4xMjkyMjpcdFxuMTI5MjM6XHRcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXG4xMjkyNDpcdFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxuMTI5MjU6XHRcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbjEyOTI2Olx0XHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxuMTI5Mjc6XHRcdCAqL1xuMTI5Mjg6XHRcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4xMjkyOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjkzMDpcdFxuMTI5MzE6XHRcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4xMjkzMjpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuMTI5MzM6XHRcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjEyOTM0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTM1Olx0XG4xMjkzNjpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xuMTI5Mzc6XHR9XG4xMjkzODpcdFxuMTI5Mzk6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuMTI5NDA6XHRcbjEyOTQxOlx0QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0MjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxuMTI5NDM6XHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBicGZfc29ja19kZXN0cm95YCBpcyBhIEJQRiBrZnVuYywgcGFydCBvZiB0aGUgc3RhbmRhcmQgQlBGIHRvb2xraXQgdXNlZCB0byBjbGVhbiB1cCBzb2NrZXQgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IHRob3NlIGFjY2Vzc2VkIHRocm91Z2ggc29ja2V0IGFuZCBCUEYgaXRlcmF0b3JzLiBJIHJlY2FsbCB0aGF0LCBwcmV2aW91c2x5LCBpdHMgdXNhZ2Ugd2FzIHJhdGhlciByZXN0cmljdGVkLCByZXF1aXJpbmcgdGhhdCB0aGUgc29ja2V0JiMzOTtzIHByb3RvY29sIGJlIGVpdGhlciBUQ1Agb3IgVURQLiBUaGUgY29kZSBzbmlwcGV0IGlzIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgaGVyZS4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBzb2NrZXRzIHRoYXQgYXJlbiYjMzk7dCBmdWxseSBmb3JtZWTigJRsZXQmIzM5O3MgY2FsbCB0aGVtICYjMzQ7bm9uLWZ1bGxzb2NrJiMzNDsgc29ja2V0c+KAlHNwZWNpZmljYWxseSwgdGltZXdhaXQgc29ja2V0cywgcmVxdWVzdCBzb2NrZXRzIGFuZCB0aGUgbGlrZS4gTm93LCB0aGUgYHNrX3Byb3RvY29sYCBmaWVsZCwgdGhlIG9uZSB1c2VkIHRvIHZhbGlkYXRlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggVENQIG9yIFVEUCwgZG9lc24mIzM5O3QgYWx3YXlzIGV4aXN0IGF0IHRoZSBzYW1lIG9mZnNldCBpbiB0aGUgYHNvY2tfY29tbW9uYCBzdHJ1Y3R1cmUgZm9yIHRoZXNlICYjMzQ7cGFydGlhbCYjMzQ7IHNvY2tldCB0eXBlcy4gRnVydGhlcm1vcmUsIGNhbGxpbmcgYHNrX2Z1bGxzb2NrKHNrKWAgcmV0dXJucyBmYWxzZSBmb3IgdGhlc2Ugc29ja2V0IHR5cGVzLiBUaGlzIGlzIHdoZXJlIHRoZSBpc3N1ZSBjYW1lIGluLgoKVGhlIGZpeCBJJiMzOTttIGxvb2tpbmcgYXQgdXRpbGl6ZXMgYHNrX2Z1bGxzb2NrKHNrKWAuIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlIGtmdW5jIHdvdWxkIGhhdmUgZmFpbGVkIGluIHRob3NlIHNpdHVhdGlvbnMuIEJ1dCBieSB1c2luZyBgc2tfZnVsbHNvY2soc2spYCBhcyBhIGNoZWNrLCB0aGUgY29kZSBub3cgKmNvbmRpdGlvbmFsbHkqIGFwcGxpZXMgdGhlIHByb3RvY29sIGNoZWNrLiBUaGlzIGFsbG93cyB0aGUga2Z1bmMgdG8gY29ycmVjdGx5IGRlc3Ryb3kgdGhlc2UgdGltZXdhaXQgc29ja2V0cywgZXZlbiB3aGVuIHRoZSBgc2tfcHJvdG9jb2xgIGZpZWxkIGlzbiYjMzk7dCByZWxpYWJseSBhdmFpbGFibGUgaW4gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLCBvciBhdCBhbGwuIEkgY2FuIHNlZSBob3cgdGhpcyBjYW4gYmUgdXNlZnVsIGluIGZ1bmN0aW9ucyBsaWtlIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgLCBgdGNwX2RpYWdfZGVzdHJveWAsIGFuZCBgaW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0YC4gVGhlIG5ldyBjb2RlIGhhbmRsZXMgdGhlc2UgdHlwZXMgb2Ygc29ja2V0cyBieSBkZXN0cm95aW5nIHRoZW0gbm93IHRoYXQgYHNrX2Z1bGxzb2NrKHNrKWAgaXMgYmVpbmcgdXNlZCB0byB2YWxpZGF0ZSBmaXJzdC4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IGhvdyBgZGlhZ19kZXN0cm95YCBpcyBpbXBsZW1lbnRlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGJyb2FkZXIgaW1wYWN0IG9yIGlmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgdHJlbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuZGlhZ19kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3Jhdy5jPTk0OD1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxubmV0L2lwdjQvcmF3LmM6OTczOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2NC9yYXcuYy05NzQtfTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3My1cdC5vYmpfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XG4tLVxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxubmV0L2lwdjYvcmF3LmM6MTIzMjpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTk0MC1cdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjYvdWRwLmMtMTk0Mi19O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgYSBCUEYga2Z1bmMsIHRoYXQgaXMgaW1wb3J0YW50IGFzIGl0IGlzIGEgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgZnVuY3Rpb24gdGhhdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBicGYoKWAgYW5kIGl0ZXJhdG9yIGZpbGUgZGVzY3JpcHRvcnMuIFFFTVUgYW5kIEdDRSBhcmUgc3RhbmRhcmQgdGFyZ2V0cyBmb3IgdGhpcyB0eXBlIG9mIHdvcmssIHNvIHRoYXQmIzM5O3MgZ29vZC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBjaGFuZ2UgbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgJiMzOTtzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgaXQgdG8gZGVzdHJveSAqbm9uLWZ1bGwqIHNvY2tldHMsIGxpa2UgVElNRV9XQUlUIHNvY2tldHMsIGZvciBleGFtcGxlLCB3aGljaCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgdGNwX2Fib3J0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGV4ZWN1dGlvbiBwYXRocyBmb3Igc29ja2V0cyBpbiBUSU1FX1dBSVQgb3IgcmVxdWVzdCBzdGF0ZXMuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gU2VjdGlvbiAzIG9mIG15IGd1aWRlbGluZXMgYXJlOiBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgYW5kIHJlYWNoYWJsZSBjb2RlLiBUaGlzIGhpdHMgb24gJiMzNDtjb3JlIG5ldHdvcmtpbmcsJiMzNDsgJiMzNDtCUEYsJiMzNDsgYW5kIGlzIGRlZmluaXRlbHkgJiMzNDtyZWFjaGFibGUgY29kZSYjMzQ7IHNvIHRoZSBhbnN3ZXIgaXMgY2xlYXJseSBUUlVFLiBUaGlzIGlzIGEgdmVyeSBnb29kIHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIEZvY3VzU3ltYm9sczogYGJwZl9zb2NrX2Rlc3Ryb3lgIGl0c2VsZiwgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgaXMgdGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLiBBbmQgcmVsYXRlZCBmdW5jdGlvbnM/IGB0Y3BfYWJvcnRgIGlzIHRoZSBvYnZpb3VzIG9uZSwgb3IgaXMgaXQganVzdCB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoYXQgYHRjcF9hYm9ydGAgYWN0dWFsbHkgZG9lcyB3aXRoIFRJTUVfV0FJVCBzb2NrZXRzLiBOZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTcwND12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNzA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXG4tLVxubmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA5Nj1zdGF0aWMgdm9pZCB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExMS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjExMjpzdGF0aWMgaW50IHRjcF9hYm9ydF9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgZXJyKVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzA2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHRjcF9hYm9ydGAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIGB0Y3BfYWJvcnRgIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgb3ZlciB0byBgbmV0L2lwdjQvdGNwLmNgLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHRjcF9hYm9ydGAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggb24gaG93IGl0IGhhbmRsZXMgdGhlIGFicnVwdCB0ZXJtaW5hdGlvbiBvZiBhIFRDUCBjb25uZWN0aW9uIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgY2xlYW51cCwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVENQIHN0YXRlIG1hY2hpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxMTU6XHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbjUxMTY6XHR7XG41MTE3Olx0XHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xuNTExODpcdFxuNTExOTpcdFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcbjUxMjA6XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XG41MTIxOlx0XG41MTIyOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMjM6XHRcdFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuNTEyNDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMjU6XHRcdFx0cmV0dXJuIDA7XG41MTI2Olx0XHR9XG41MTI3Olx0XHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xuNTEyODpcdFx0XHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XG41MTI5Olx0XG41MTMwOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ0dy1cdTAwM2V0d19yZWZjbnQpO1xuNTEzMTpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTMyOlx0XHRcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XG41MTMzOlx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEzNDpcdFx0XHRyZXR1cm4gMDtcbjUxMzU6XHRcdH1cbjUxMzY6XHRcbjUxMzc6XHRcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xuNTEzODpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTM5Olx0XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXG41MTQwOlx0XHRcdGxvY2tfc29jayhzayk7XG41MTQxOlx0XG41MTQyOlx0XHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cbjUxNDM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbjUxNDQ6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTQ1Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNDY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG41MTQ3Olx0XHR9XG41MTQ4Olx0XG41MTQ5Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGBicGZfc29ja19kZXN0cm95YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZml4IHJlbGF0ZWQgdG8gYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBzb2NrZXRzIGluIGRpZmZlcmVudCBzdGF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHBhdGNoIGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCBpdCYjMzk7cyBlbmFibGluZy4KCkZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB0Y3BfYWJvcnRgIGlzIGN1cnJlbnRseSBoYW5kbGVkLiBJIHNlZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgYGlmIChzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKWAuIFRoYXQmIzM5O3MgZ29vZCwgaXQgY29uZmlybXMgdGhhdCBgdGNwX2Fib3J0YCBpcyAqYWxyZWFkeSogd3JpdHRlbiB0byBkZWFsIHdpdGggYFRDUF9USU1FX1dBSVRgIHNvY2tldHMuIFNhbWUgZm9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgaXTigJlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgaW1wbGllcyB0aGVyZSYjMzk7cyBubyBpbmhlcmVudCBwcm9ibGVtIGluICp0Y3BfYWJvcnQqIGl0c2VsZi4gVGhlIGlzc3VlIG11c3QgYmUgaW4gKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIG9yIHBlcmhhcHMsICp3aGVuKi4KClRoZSB0ZXh0IHNheXMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgd2FzIHRoZSBibG9ja2VyLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIGNoZWNrICpiZWZvcmUqIHRoZSBgc2tfZnVsbHNvY2soc2spYCBjaGVjayB3aXRoaW4gYGJwZl9zb2NrX2Rlc3Ryb3koKWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjdWxwcml0LiBUaGF0IGNvbmRpdGlvbmFsIGxvZ2ljIHdhcyBwcmV2ZW50aW5nIGBicGZfc29ja19kZXN0cm95YCBmcm9tIGJlaW5nIGNhbGxlZCBvbiBzb2NrZXRzIGluIHN0YXRlcyBsaWtlIGBUQ1BfVElNRV9XQUlUYCwgd2hpY2ggYXJlIG5vdCAqZnVsbCogc29ja2V0cy4gVGhlIGZpeCBpcyBub3cgYWxsb3dpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIG9wZXJhdGUgb24gKm5vbi1mdWxsKiBzb2NrZXRzLiBNYWtlcyBzZW5zZSwgdGhhdCBhbGxvd3MgdGhlIGNsZWFudXAgb2YgdGhlc2Ugc29ja2V0IHN0cnVjdHVyZXMuCgpOb3csIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc29ja19kZXN0cm95YCBpcyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgY29tcGlsZWQuIExldCYjMzk7cyBmaW5kIG91dCBhYm91dCB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMsIEkmIzM5O2xsIGdvIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNlYXJjaCBhcm91bmQgbGluZSAxMjkwMCBvciB1c2UgYSBkaXJlY3Qgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIHJldmVhbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhhdCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgcHJvcGVybHkgZW5hYmxlZCBmb3IgdGhlIHJlbGV2YW50IEJQRiBpdGVyYXRvciB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyOTM5PV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MzpCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0NC1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQ1PXN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ2LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQ3Olx0aWYgKGJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDgtXHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTU1Olx0LnNldCAgID0gXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTYtXHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZWdpc3RyYXRpb24gb2YgYGJwZl9za19pdGVyX2tmdW5jX3NldGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc2tfaXRlcl9rZnVuY19zZXRgIGlzIGFjdHVhbGx5IHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBCUEYgZnVuY3Rpb25zLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIOKAkyB0aG9zZSBgI2lmZGVmYCBibG9ja3Mg4oCTIHRoYXQgbWlnaHQgZ292ZXJuIGl0cyBpbmNsdXNpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdHMgYXZhaWxhYmlsaXR5IGlzIHRpZWQgdG8gc29tZSBzcGVjaWZpYyBmZWF0dXJlIG9yIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkgd2FudCB0byBpZGVudGlmeSB0aG9zZSBjb25kaXRpb25zIGJlY2F1c2UgaXQgZ2l2ZXMgbWUgY29udGV4dCBvbiBpdHMgcHVycG9zZSwgdXNhZ2UgcmVxdWlyZW1lbnRzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGVudmlyb25tZW50IHRoZSBmdW5jdGlvbiBleHBlY3RzIHRvIHdvcmsgd2l0aGluLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBpbmZvcm0gYW55IGZ1cnRoZXIgYW5hbHlzaXMsIGRlYnVnZ2luZywgb3IgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IG5lZWQgdG8gcGVyZm9ybSBvbiByZWxhdGVkIEJQRiBjb2RlLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgdHJhY2luZyB0aG9zZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjk0MDpcdFxuMTI5NDE6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0MzpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ0Olx0XG4xMjk0NTpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ2Olx0e1xuMTI5NDc6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ4Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbjEyOTQ5Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTI5NTA6XHRcdHJldHVybiAwO1xuMTI5NTE6XHR9XG4xMjk1MjpcdFxuMTI5NTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xuMTI5NTQ6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTI5NTU6XHRcdC5zZXQgICA9IFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcbjEyOTU2Olx0XHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcbjEyOTU3Olx0fTtcbjEyOTU4Olx0XG4xMjk1OTpcdHN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbjEyOTYwOlx0e1xuMTI5NjE6XHRcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbjEyOTYyOlx0fVxuMTI5NjM6XHRsYXRlX2luaXRjYWxsKGluaXRfc3Vic3lzdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMsIHNwZWNpZmljYWxseSBgI2lmZGVmYCBwcmVwcm9jZXNzb3Igc3RhdGVtZW50cywgc3Vycm91bmRpbmcgdGhlIGBpbml0X3N1YnN5c3RlbWAgb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIGNvZGViYXNlLCB0aGlzIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBwb3RlbnRpYWwgYnVpbGQtdGltZSB2YXJpYXRpb25zIGluIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBtaWdodCBiZSBpbml0aWFsaXplZCBvciB0b3JuIGRvd24uIEtub3dpbmcgdGhpcywgYW5kIGhhdmluZyBsb29rZWQgYXQgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBuZXR3b3JrIGZpbHRlciwgSSBoYXZlIGEgZ29vZCBpZGVhIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcsIGFuZCBhcm91bmQgbGluZSAxMjkwMCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwb2ludCB0byBiZWdpbiBteSBzY2FuLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMsIG9yIHRoZWlyIGJlaGF2aW9yLCBhcmUgcG90ZW50aWFsbHkgY29udHJvbGxlZCBieSBidWlsZCBjb25maWd1cmF0aW9ucyBvciBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiB0aGUga2VybmVsLCBhbmQgdW5kZXJzdGFuZGluZyB0aGVzZSBjb25kaXRpb25hbCBibG9ja3MgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIG9yIHBvcnRpbmcgQlBGLXJlbGF0ZWQgY29kZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyODkwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG4xMjg5MTpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xuMTI4OTI6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG4xMjg5MzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuMTI4OTQ6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcbjEyODk1Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xuMTI4OTY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuMTI4OTc6XHRcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbjEyODk4Olx0fVxuMTI4OTk6XHRsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcbjEyOTAwOlx0XG4xMjkwMTpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbjEyOTAyOlx0XG4xMjkwMzpcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxuMTI5MDQ6XHQgKlxuMTI5MDU6XHQgKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gYSBzb2NrZXQsIGFuZCBpbnZva2VzIHRoZVxuMTI5MDY6XHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cbjEyOTA3Olx0ICpcbjEyOTA4Olx0ICogVGhlIGhlbHBlciBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBCUEYgY29udGV4dHMgdGhhdCBoYXZlIGFjcXVpcmVkIHRoZSBzb2NrZXRcbjEyOTA5Olx0ICogbG9ja3MuXG4xMjkxMDpcdCAqXG4xMjkxMTpcdCAqIFBhcmFtZXRlcnM6XG4xMjkxMjpcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbjEyOTEzOlx0ICpcbjEyOTE0Olx0ICogUmV0dXJuOlxuMTI5MTU6XHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBFSU5WQUwuXG4xMjkxNjpcdCAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4xMjkxNzpcdCAqIDAgb3RoZXJ3aXNlXG4xMjkxODpcdCAqL1xuMTI5MTk6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzcwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgTmV0d29yayBDb3JlIE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCBob3cgYGZpbHRlci5jYCBnZXRzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgcmVzaWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuZWFydGggaW4gdGhlcmUuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IE1ha2VmaWxlIGFuZCBodW50IGRvd24gdGhlIHJlbGV2YW50IHNlY3Rpb24uLi4gZ290dGEgZmluZCB0aG9zZSBidWlsZCBkaXJlY3RpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXHUwMDNjbGFmb3JnZUBuZXRmaWx0ZXIub3JnXHUwMDNlIDA0MDQxOVxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFx1MDAzY2Fyb25AaHAuY29tXHUwMDNlIDA0MDYwNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgQlBGX1NZU0NBTEwgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBwcmVzZW5jZSBvZiBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBvciBkZWZpbml0aW9uIG9mIGBCUEZfU1lTQ0FMTGAgbWlnaHQgYmUgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBrZXJuZWwgdmVyc2lvbiwgb3Igb3RoZXIgY29tcGlsZS10aW1lIGZsYWcuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYCNkZWZpbmVgIHVzYWdlIHN1cnJvdW5kaW5nIHRoaXMgbWFjcm8uIFRoZSBwdXJwb3NlIG9mIHRoaXMgY291bGQgYmUgYSBjb21wYXRpYmlsaXR5IG1lYXN1cmUgZm9yIG9sZGVyIGtlcm5lbHMsIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSwgc28gaXQgaXMgbmVjZXNzYXJ5IHRvIGRldGVybWluZSBleGFjdGx5IHdoYXQgdGhpcyBtZWFucy4gVGhpcyBpcyBvZnRlbiB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBsYW5kc2NhcGUuIFRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbHMgaGVyZSB3b3VsZCBpbW1lZGlhdGVseSByYWlzZSBzb21lIHF1ZXN0aW9ucyBpbiBteSBtaW5kIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwb3J0YWJpbGl0eSwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciB0aGUgc3RhYmlsaXR5IG9mIEJQRi1yZWxhdGVkIGNvZGUuIExldCYjMzk7cyBzdGFydCB0aGUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz00NTM0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NTM1LVxubmV0L2NvcmUvZmlsdGVyLmM6NDUzNjojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG5uZXQvY29yZS9maWx0ZXIuYy00NTM3LXZvaWQgeGRwX2RvX2NoZWNrX2ZsdXNoZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAgYW5kIEJQRl9TWVNDQUxMKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIGFueSBndWFyZGluZyBjb25kaXRpb25zLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIEJQRiwgYW5kIGdpdmVuIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgdGhlIHVzZSBvZiBgQlBGX1NZU0NBTExgIGlzIGltcG9ydGFudCBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHdoYXQgY29uZGl0aW9uYWwgbG9naWMgaXMgd3JhcHBlZCBhcm91bmQgaXRzIHVzZS4gQXJlIHdlIHVzaW5nIGEgYCNpZmRlZmAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IElzIGl0IGFuIGlubGluZSBmdW5jdGlvbj8gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hhdCBjb25kaXRpb25zIG11c3QgYmUgbWV0IGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIGV2ZW4gY29uc2lkZXJlZCBhdCBjb21waWxlIHRpbWUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBvdGVudGlhbCBpbXBhY3QgYW5kIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGVuYWJsZWQgYnkgYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbiwgbWF5YmUgYSBmZWF0dXJlIGZsYWcuLi4gS25vd2luZyB0aG9zZSBkZXRhaWxzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gZXZhbHVhdGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00OTQ9dHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDctICAgICAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjUwODogICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfdGFza19rZnVuY19zZXQpO1xuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDktICAgICAgICB9XG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jPTEyMjc9c3RhdGljIHZvaWQgX19pbml0IHdha2V1cF9zb3VyY2VzX2JwZl9pbml0KHZvaWQpXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtMTIyOC17XG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM6MTIyOTpcdGlmIChyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2d2FrZXVwX3NvdXJjZV9rZnVuY19zZXQpKVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jLTEyMzAtXHRcdHBtX3ByX2RiZyhcJiMzNDtXYWtldXA6IGZhaWxlZCB0byByZWdpc3RlciBCVEYga2Z1bmNzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jPTY1OD1zdGF0aWMgaW50IF9faW5pdCBoaWRfYnBmX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY2Ny1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6NjY4Olx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmhpZF9icGZfa2Z1bmNfc2V0KTtcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjczLVxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2NzQ6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2aGlkX2JwZl9zeXNjYWxsX2tmdW5jX3NldCk7XG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY3NS1cdGlmIChlcnIpIHtcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0zMjE9c3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zMjIte1xuZnMvYmluZm10X21pc2NfYnBmLmM6MzIzOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzI0LVx0XHRcdFx0XHQgXHUwMDI2Ym1fYnBmX2tmdW5jX3NldCk7XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ5Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk1LVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5NjpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ5Ny1cdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk4LVx0XHRyZXR1cm4gcmV0O1xuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5OTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbmZzL2JwZl9mc19rZnVuY3MuYy01MDAtXHRcdFx0XHRcdCBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE4Nj12b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODcte1xuZnMvdmVyaXR5L21lYXN1cmUuYzoxODg6XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcdTAwMjZicGZfZnN2ZXJpdHlfc2V0KTtcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2J0Zi5oPTU4Nz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTg4LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnRmLmg6NTg5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTU5MC1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcyk7XG4tLVxuaW5jbHVkZS9saW51eC9idGYuaD02NDc9c3RhdGljIGlubGluZSB1MzIgKmJ0Zl9rZnVuY19pZF9zZXRfY29udGFpbnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmluY2x1ZGUvbGludXgvYnRmLmgtNjUzLX1cbmluY2x1ZGUvbGludXgvYnRmLmg6NjU0OnN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjU1LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKnMpXG4tLVxuaW9fdXJpbmcvYnBmLW9wcy5jPTEyMD1zdGF0aWMgaW50IGJwZl9pb19pbml0KHN0cnVjdCBidGYgKmJ0Zilcbi0tXG5pb191cmluZy9icGYtb3BzLmMtMTI5LVxuaW9fdXJpbmcvYnBmLW9wcy5jOjEzMDpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuaW9fdXJpbmcvYnBmLW9wcy5jLTEzMS1cdFx0XHRcdFx0XHUwMDI2YnBmX2lvX3VyaW5nX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTExMzE9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzIte1xua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC19XG4tLVxua2VybmVsL2JwZi9idGYuYz04OTAyPXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg5NDgtXHRzZXQgPSB0YWItXHUwMDNlc2V0c1tob29rXTtcbmtlcm5lbC9icGYvYnRmLmM6ODk0OTpcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xua2VybmVsL2JwZi9idGYuYy04OTUwLVx0ICogZm9yIG1vZHVsZSBzZXRzLlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTE3Mz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODEtXG5rZXJuZWwvYnBmL2J0Zi5jOjkxODI6c3RhdGljIGludCBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxua2VybmVsL2JwZi9idGYuYy05MTgzLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTIwOC0vKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBvbmx5IGZyb20gaW5pdGNhbGxzL21vZHVsZSBpbml0IGZ1bmN0aW9ucyAqL1xua2VybmVsL2JwZi9idGYuYzo5MjA5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMTAtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG4tLVxua2VybmVsL2JwZi9idGYuYy05MjIyLVx0aG9vayA9IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhwcm9nX3R5cGUpO1xua2VybmVsL2JwZi9idGYuYzo5MjIzOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChob29rLCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIyNC19XG5rZXJuZWwvYnBmL2J0Zi5jOjkyMjU6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjYtXG4tLVxua2VybmVsL2JwZi9idGYuYz05MjI4PWludCByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjkte1xua2VybmVsL2JwZi9idGYuYzo5MjMwOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCVEZfS0ZVTkNfSE9PS19GTU9EUkVULCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIzMS19XG4tLVxua2VybmVsL2JwZi9jcHVtYXNrLmM9NTE1PXN0YXRpYyBpbnQgX19pbml0IGNwdW1hc2tfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNS1cdHJldCA9IGJwZl9tZW1fYWxsb2NfaW5pdChcdTAwMjZicGZfY3B1bWFza19tYSwgc2l6ZW9mKHN0cnVjdCBicGZfY3B1bWFzayksIGZhbHNlKTtcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1Mjg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyOS1cdHJldHVybiAgcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhjcHVtYXNrX2R0b3JzLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zODgtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM4OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcnlwdG8uYzozOTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkyOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxua2VybmVsL2JwZi9jcnlwdG8uYy0zOTMtXHRcdFx0XHRcdCAgICAgICBcdTAwMjZjcnlwdF9pbml0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk5Ny1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5OTg6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk5OTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDM6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDQtXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGdlbmVyaWNfZHRvcnMsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwNi1cdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDc6XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFx1MDAyNmNvbW1vbl9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwOC19XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTIzMD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMxLXtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoyMzI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX21hcF9pdGVyX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMzLX1cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NTk9c3RhdGljIF9faW5pdCBpbnQgcnFzcGlubG9ja19yZWdpc3Rlcl9rZnVuY3Modm9pZClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2MC17XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NjE6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2cnFzcGlubG9ja19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzYyLX1cbi0tXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmM9NzY2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9yc3RhdF9rZnVuY19pbml0KHZvaWQpXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY3LXtcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYzo3Njg6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY5LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3JzdGF0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xMTYwPWludCBzY3hfY2lkX2tmdW5jX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2MS17XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnNjeF9rZnVuY19zZXRfaW5pdF9jaWRzKSA/Olxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTYzOlx0XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjQ6XHRcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MTE2NTpcdFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNnNjeF9rZnVuY19zZXRfY2lkKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2Ni19XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5OD1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzYtXHQgKiBrZnVuYyByZWdpc3RyYXRpb24gY2FuJiMzOTt0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTc3Olx0ICogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCgpIG5lZWRzIG1vc3Qgb2YgdGhlIHN5c3RlbSB0byBiZSB1cC5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzgtXHQgKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODYtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5ODc6XHRpZiAoKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk4OC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2VucXVldWVfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4OTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkwLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkyLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfY3B1X3JlbGVhc2UpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk0LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk2LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk4LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkgfHxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5OTk6XHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTAwMC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpIHx8XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDAxOlx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwMDItXHRcdFx0XHRcdCAgICAgXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1NTQ9aW50IHNjeF9pZGxlX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NTUte1xua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NjpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NzpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1ODpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1OTpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU2MDpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KTtcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NjEtfVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNDU5PXN0YXRpYyBpbnQgX19pbml0IGJwZl90cmFjZV9rZnVuY3NfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDYyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM0NjM6XHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0tQUk9CRSwgXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY0Olx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM0NjUtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0xODI9c3RhdGljIGludCBfX2luaXQgYnBmX21lbWNvbnRyb2xfaW5pdCh2b2lkKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmMtMTg1LVxubW0vYnBmX21lbWNvbnRyb2wuYzoxODY6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODctXHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE4ODg9c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xOTAyLVx0cmV0ID0gcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTAzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTA0Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE5MDYtXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfcHJvZ190ZXN0X2R0b3Jfa2Z1bmMsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzE2LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE3Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTgtXHRcdFx0XHRcdFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxOTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG5uZXQvY29yZS9icGZfa3NvY2suYzozMjE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzU9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg3OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyODc5Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODA6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODk6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk0LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk3Olx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTgtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU5PXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYxOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19zZXQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjItfVxuLS1cbm5ldC9jb3JlL3hkcC5jPTk5Mz1zdGF0aWMgaW50IF9faW5pdCB4ZHBfbWV0YWRhdGFfaW5pdCh2b2lkKVxubmV0L2NvcmUveGRwLmMtOTk0LXtcbm5ldC9jb3JlL3hkcC5jOjk5NTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZ4ZHBfbWV0YWRhdGFfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL3hkcC5jLTk5Ni19XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTM0NT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGNwX2NhX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUwLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XG4tLVxubmV0L2lwdjQvZm91X2JwZi5jPTExMz1pbnQgcmVnaXN0ZXJfZm91X2JwZih2b2lkKVxubmV0L2lwdjQvZm91X2JwZi5jLTExNC17XG5uZXQvaXB2NC9mb3VfYnBmLmM6MTE1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvaXB2NC9mb3VfYnBmLmMtMTE2LVx0XHRcdFx0XHQgXHUwMDI2Zm91X2JwZl9rZnVuY19zZXQpO1xuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTc1PXN0YXRpYyBpbnQgX19pbml0IGJicl9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgwLVxubmV0L2lwdjQvdGNwX2Jici5jOjExODE6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2dGNwX2Jicl9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2Jici5jLTExODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jPTUwMT1zdGF0aWMgaW50IF9faW5pdCBjdWJpY3RjcF9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNC1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jOjUzNTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZ0Y3BfY3ViaWNfa2Z1bmNfc2V0KTtcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IGRjdGNwX3JlZ2lzdGVyKHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjk5LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MzAwOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnRjcF9kY3RjcF9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2RjdGNwLmMtMzAxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01NDA9aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjU0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0Ni1cdGlmICghcmV0KSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jPTExNj1pbnQgbmZfZmxvd19yZWdpc3Rlcl9icGYodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0xMTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjExODpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTExOS1cdFx0XHRcdFx0IFx1MDAyNm5mX2Zsb3dfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYz02Nj1pbnQgcmVnaXN0ZXJfbmZfbmF0X2JwZih2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTY5LVxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzEtXHRcdFx0XHRcdFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03NC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjc1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03Ni1cdFx0XHRcdFx0IFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9NDYwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9xZGlzY19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ2OS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYzo0NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3FkaXNjX2tmdW5jX3NldCk7XG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDcxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhza2Jfa2Z1bmNfZHRvcnMsXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM9MTA2PWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9pbnRlcmZhY2VfYnBmKHZvaWQpXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDcte1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM6MTA4Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDktXHRcdFx0XHRcdCBcdTAwMjZ4ZnJtX2ludGVyZmFjZV9rZnVuY19zZXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM9MTMwPWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYodm9pZClcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmMtMTMxLXtcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM6MTMyOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jLTEzMy1cdFx0XHRcdFx0IFx1MDAyNnhmcm1fc3RhdGVfeGRwX2tmdW5jX3NldCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jPTI1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90ZXN0X21vZG9yZGVyX3hfaW5pdCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYzoyNzpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI4LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3Rlc3RfbW9kb3JkZXJfeF9zZXQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl95X2luaXQodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM6Mjc6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yOC1cdFx0XHRcdFx0IFx1MDAyNmJwZl90ZXN0X21vZG9yZGVyX3lfc2V0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jPTIxMzA9c3RhdGljIGludCBicGZfdGVzdG1vZF9pbml0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy0yMTQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQxOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX3NldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtMjE0Ni1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXHUwMDI2YnBmX3Rlc3Rtb2RfdHJhbXBvbGluZV9jb3VudF9mbW9kcmV0X3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgQlBGIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGEgZmV3IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGZvciBCUEYga2Z1bmMgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBlc3NlbnRpYWxzOiBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgQlBGIGtmdW5jcyByZWx5IG9uIGJvdGggb2YgdGhlc2UgYmVpbmcgZW5hYmxlZC4gT2YgY291cnNlLCBgQ09ORklHX05FVGAgYW5kIGBDT05GSUdfSU5FVGAgYXJlIGFsc28gZnVuZGFtZW50YWwgZm9yIG5ldHdvcmtpbmctcmVsYXRlZCBCUEYgYXBwbGljYXRpb25zLiBUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoaXMgaW5mb3JtYXRpb24gYXJlIGluIGBpbml0L0tjb25maWdgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZXNlIGNvcmUgc2V0dGluZ3MgYmVmb3JlIGRpdmluZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gZGVlcGVyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgQlBGIGNvbnRyb2xzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgSSBjYW4gc3RhcnQgdW50YW5nbGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgZmVhdHVyZXMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBob3cgQlBGIGZpdHMgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gbXkgZmlyc3QgbW92ZSBpcyB0byBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBpcyBzZXQgdXAgaXMgY3J1Y2lhbCB0byBmaWd1cmluZyBvdXQgaXRzIGltcGFjdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGlzIGFzIEkgZXhwZWN0LiBJdCYjMzk7cyBhIHF1aWNrIGJ1dCBlc3NlbnRpYWwgc3RlcCB0byBhc3Nlc3MgaXRzIHByZXNlbmNlIG9yIGFic2VuY2UgYW5kIGl0cyBnZW5lcmFsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDU6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDQ2Olx0XHRzZWxlY3QgRVhFQ01FTVxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDQ5Olx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1MDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDUxOlx0XHQgIHByb2dyYW1zLlxuICA1MjpcdFxuICA1MzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTQ6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU1Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNTY6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA1OTpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBCVEYgSW5mb3JtYXRpb246IEEgS2NvbmZpZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlRGIGRlYnVnZ2luZyBzaXR1YXRpb24uIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyBgbGliL0tjb25maWcuZGVidWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGdhdGVrZWVwZXJzIGZvciBkZWJ1Zy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBCVEYuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB3aGVyZSB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gbGluZXMgYXJlIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJ1aWxkLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBJIGhhdmUgYXZhaWxhYmxlLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19JTkZPX0JURiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xubGliL0tjb25maWcuZGVidWctNDI5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBzb21lIGRlYnVnIHNldHRpbmdzIGluIHRoaXMgYnVpbGQuIExldCYjMzk7cyBzZWUuLi5JJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbGliL0tjb25maWcuZGVidWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmVzIDM5OCB0aHJvdWdoIDQyMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IGdvaW5nIHRvIGxheSBvdXQgc29tZSBjb25kaXRpb25hbCBsb2dpYyBvciBkZWZpbmUgc29tZSBtYWNyb3MgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgZmVhdHVyZXMuIEdpdmVuIHRoZSBmaWxlIG5hbWUsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRoaXMgYXJlYSBpcyBkZWRpY2F0ZWQgdG8gcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9ucyBmb3IgY29yZSBvciBmb3VuZGF0aW9uYWwgZGVidWdnaW5nIHBhcmFtZXRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBvZiB0aGVzZSB2YWx1ZXMgYW5kIHRoZWlyIGltcGFjdCBvbiBidWlsZCBzaXplIGFuZCBwZXJmb3JtYW5jZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgb3IgcG90ZW50aWFsIHR3ZWFrcyBhcmUgaGlkZGVuIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzk4Olx0Y29uZmlnIERFQlVHX0lORk9fQlRGXG4gMzk5Olx0XHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4gNDAwOlx0XHRkZXBlbmRzIG9uICFERUJVR19JTkZPX1NQTElUIFx1MDAyNlx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXG4gNDAxOlx0XHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXG4gNDAyOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gNDAzOlx0XHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFx1MDAzZT0gMTIyXG4gNDA0Olx0XHQjIHBhaG9sZSB1c2VzIGVsZnV0aWxzLCB3aGljaCBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIEhleGFnb24gcmVsb2NhdGlvbnNcbiA0MDU6XHRcdGRlcGVuZHMgb24gIUhFWEFHT05cbiA0MDY6XHRcdGhlbHBcbiA0MDc6XHRcdCAgR2VuZXJhdGUgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm9ybWF0aW9uIGZyb20gRFdBUkYgZGVidWcgaW5mby5cbiA0MDg6XHRcdCAgVHVybmluZyB0aGlzIG9uIHJlcXVpcmVzIHBhaG9sZSB2MS4yMiBvciBsYXRlciwgd2hpY2ggd2lsbCBjb252ZXJ0XG4gNDA5Olx0XHQgIERXQVJGIHR5cGUgaW5mbyBpbnRvIGVxdWl2YWxlbnQgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm8uXG4gNDEwOlx0XG4gNDExOlx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xuIDQxMjpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjNcbiA0MTM6XHRcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcbiA0MTQ6XHRcdGhlbHBcbiA0MTU6XHRcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxuIDQxNjpcdFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xuIDQxNzpcdFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxuIDQxODpcdFxuIDQxOTpcdGNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuIDQyMDpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjRcbiA0MjE6XHRcdGhlbHBcbiA0MjI6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NDQKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogNDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnBmX3NvY2tfZGVzdHJveWAsIHdoaWNoIGlzIHVzZWQgdG8gZGVzdHJveSBzb2NrZXRzIChUQ1AsIFVEUCwgdGhlIHVzdWFsIHN1c3BlY3RzKS4gVGhlIHN0YW5kYXJkIGBDT05GSUdfSU5FVGAgaXMsIG9mIGNvdXJzZSwgYSBnaXZlbi4gSXQgYWxzbyBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIGVzc2VudGlhbCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGZvY3VzZWQuIE15IG1haW4gdGFyZ2V0IGlzIGBicGZfc29ja19kZXN0cm95YC4gVGhlIG1vZGlmaWNhdGlvbiBpcyBpbiB0aGUga2VybmVsIGltYWdlLiBJdCBsb29rcyBsaWtlIGB0Y3BfYWJvcnRgIGlzIGNsb3NlbHkgcmVsYXRlZCwgYXMgaXQgaGFuZGxlcyBUSU1FX1dBSVQgc29ja2V0IGRlc3RydWN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGB0cmFjaW5nX2l0ZXJfZmlsdGVyYCBpcyBpbiB0aGUgc2FtZSBmaWxlIGJ1dCBpdCB3YXNuJiMzOTt0IG1vZGlmaWVkLiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgZm9jdXMuIFdlIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBgdGNwX2Fib3J0YCBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSBpbnZva2VkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBgdGNwX2Fib3J0YCBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gT2theSwgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGEgZ2xvYmFsIGtmdW5jIHN5bWJvbCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBBbmQgYHRjcF9hYm9ydGAgaXMgYWxzbyBub24tc3RhdGljLCBmb3VuZCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBHb29kLgoKSnVzdCB0byBiZSBzYWZlLCBJJiMzOTttIHZlcmlmeWluZyB0aG9zZSByZXF1aXJlZCBjb25maWdzIGFnYWluOiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYElORVRgLgoKVGhlIHJhdGlvbmFsZSBpcyBzb3VuZC4gVGhpcyBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gaGFuZGxlIHRoZSBkZXN0cnVjdGlvbiBvZiBub24tZnVsbCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgaW4gYFRDUF9USU1FX1dBSVRgIGFuZCBgVENQX05FV19TWU5fUkVDVmAgc3RhdGVzLiBJdCYjMzk7cyBkb2luZyB0aGlzIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGZpcnN0LiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBsZXRzIEJQRiBpdGVyYXRvcnMgY2FsbCBgYnBmX3NvY2tfZGVzdHJveWAgb24gc29ja2V0cyBpbiBgVElNRV9XQUlUYCwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyBwcm90b2NvbC1zcGVjaWZpYyBhYm9ydCByb3V0aW5lcyBsaWtlIGB0Y3BfYWJvcnRgLiBUaGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIEJQRiBpdGVyYXRvcnMsIHNvIGZ1enppbmcgaXMgY2VydGFpbmx5IHdhcnJhbnRlZC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NvY2tfZGVzdHJveSgpIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGFsbG93IHByb3RvY29sIGFib3J0IGhhbmRsZXJzIChlLmcuLCB0Y3BfYWJvcnQpIHRvIGRlc3Ryb3kgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCBTWU5fUkVDViBzb2NrZXRzKSBieSBxdWFsaWZ5aW5nIHRoZSBwcm90b2NvbCBjaGVjayB3aXRoIHNrX2Z1bGxzb2NrKCkuIFRoaXMgZW5hYmxlcyBuZXcgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrZXQgaXRlcmF0b3IgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NvY2tfZGVzdHJveSgpIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGFsbG93IHByb3RvY29sIGFib3J0IGhhbmRsZXJzIChlLmcuLCB0Y3BfYWJvcnQpIHRvIGRlc3Ryb3kgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCBTWU5fUkVDViBzb2NrZXRzKSBieSBxdWFsaWZ5aW5nIHRoZSBwcm90b2NvbCBjaGVjayB3aXRoIHNrX2Z1bGxzb2NrKCkuIFRoaXMgZW5hYmxlcyBuZXcgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrZXQgaXRlcmF0b3IgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gb25seSBjaGVjayBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrIHRvIGJlIGRlc3Ryb3llZCB2aWEgdGhlIEJQRiBrZnVuYy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU0ZTQ1NWJhYTY3MTMwMGQyNTk3OTllOGVhZjQzZTAxYTlmZDg3MmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE5OjA0OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi4xYmJiNzIxMzhhYzY0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTI5MTIsOCAmIzQzOzEyOTEyLDggQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZAogICoKICAqIFJldHVybjoKLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLgotICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC4KJiM0MzsgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgogICogMCBvdGhlcndpc2UKICAqLwogX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKQpAQCAtMTI5MjUsOCAmIzQzOzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKIAkgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0CiAJICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy4KIAkgKi8KLQlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kgfHwgKHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7Ci0JCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCiYjNDM7CWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXR1cm4gc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMKaW5kZXggOWMxMTkzOGZlNTk3ZC4uNmNjYzdjZGE0MTBiZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMKQEAgLTExMCw2ICYjNDM7MTEwLDY1IEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiAJCWNsb3NlKHNlcnYpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90Y3BfdGltZXdhaXQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQomIzQzO3sKJiM0MzsJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjsKJiM0MzsJc3RydWN0IHRpbWV2YWwgdHYgPSB7fTsKJiM0MzsJY2hhciBidWZbMV07CiYjNDM7CiYjNDM7CXNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgJiMzNDtzdGFydF9zZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsICYjMzQ7Y29ubmVjdF90b19mZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJYWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCAmIzM0O3NlcnYgYWNjZXB0JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBBY3RpdmUgY2xvc2UgZnJvbSB0aGUgY2xpZW50LCB0aGVuIGNsb3NlIHRoZSBzZXJ2ZXIgc2lkZS4gT25jZQomIzQzOwkgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50CiYjNDM7CSAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94CiYjNDM7CSAqIGNhbiYjMzk7dCByYWNlIHVzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dHYsCiYjNDM7CQkJCSAgc2l6ZW9mKHR2KSksICYjMzQ7Y2xlYXIgcmN2dGltZW8mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWlmICghQVNTRVJUX09LKHNodXRkb3duKGNsaWVuLCBTSFVUX1dSKSwgJiMzNDtjbGllbnQgc2h1dGRvd24mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWNsb3NlKGFjY2VwdF9zZXJ2KTsKJiM0MzsJYWNjZXB0X3NlcnYgPSAtMTsKJiM0MzsKJiM0MzsJLyogYmxvY2sgdW50aWwgcmV0dXJuIEVPRiAqLwomIzQzOwluID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIDAsICYjMzQ7Y2xpZW50IHJlY3YgRU9GJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCA9IDA7CiYjNDM7CXN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLSZndDtwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kLCAxLCAmIzM0O3RpbWV3YWl0IHNvY2sgZm91bmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CUFTU0VSVF9PSyhza2VsLSZndDtic3MtJmd0O3R3X2Rlc3Ryb3lfZXJyLCAmIzM0O2Rlc3Ryb3kgdGltZXdhaXQgc29jayYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCA9IDA7CiYjNDM7CXN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLSZndDtwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMCwgJiMzNDt0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZCYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpZiAoY2xpZW4gIT0gLTEpCiYjNDM7CQljbG9zZShjbGllbik7CiYjNDM7CWlmIChhY2NlcHRfc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKGFjY2VwdF9zZXJ2KTsKJiM0MzsJaWYgKHNlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShzZXJ2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogewogCWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwOwpAQCAtMjA0LDExICYjNDM7MjYzLDEyIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZCkKIAkJdGVzdF90Y3BfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGNwX3NlcnZlciYjMzQ7KSkKIAkJdGVzdF90Y3Bfc2VydmVyKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF90aW1ld2FpdCYjMzQ7KSkKJiM0MzsJCXRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX2NsaWVudCYjMzQ7KSkKIAkJdGVzdF91ZHBfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX3NlcnZlciYjMzQ7KSkKIAkJdGVzdF91ZHBfc2VydmVyKHNrZWwpOwotCiAJUlVOX1RFU1RTKHNvY2tfZGVzdHJveV9wcm9nX2ZhaWwpOwogCiBjbGVhbnVwOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYwppbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYwpAQCAtNyw2ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKIAogX19iZTE2IHNlcnZfcG9ydCA9IDA7CiYjNDM7aW50IHR3X2ZvdW5kID0gMDsKJiM0MztpbnQgdHdfZGVzdHJveV9lcnIgPSAwOwogCiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07CiAKQEAgLTEwMCw2ICYjNDM7MTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtpdGVyL3RjcCYjMzQ7KQomIzQzO2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LSZndDtza19jb21tb247CiYjNDM7CV9fdTY0ICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwlpZiAoIXNrX2NvbW1vbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoc2tfY29tbW9uLSZndDtza2NfZmFtaWx5ICE9IEFGX0lORVQ2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jayhza19jb21tb24pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0Y3BfY29ubl9zb2NrZXRzLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qIFRoZSB0aW1ld2FpdCBzb2NrIGluaGVyaXRzIHRoZSBjb29raWUgb2YgdGhlIGNsb3NlZCBjbGllbnQgc29jay4gKi8KJiM0MzsJaWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdHdfZm91bmQmIzQzOyYjNDM7OwomIzQzOwl0d19kZXN0cm95X2VyciA9IGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogCiBTRUMoJiMzNDtpdGVyL3VkcCYjMzQ7KQogaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIGZ1enppbmcgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLgoKUmlnaHQsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVtb3ZpbmcgYSBjaGVjayBmb3IgYHNrLSZndDtza19wcm90b2NvbGAgd2l0aGluIGFuIGVhcmx5IHJldHVybi4gVGhlIG9yaWdpbmFsIGxvZ2ljIHByZXZlbnRlZCB0aGUgZXhlY3V0aW9uIG9mIGBkaWFnX2Rlc3Ryb3lgIGlmIHRoZSBzb2NrZXQgd2FzbiYjMzk7dCBUQ1Agb3IgVURQLiBUaGUgbmV3IGxvZ2ljIGlzIGFsbG93aW5nIGBkaWFnX2Rlc3Ryb3lgIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHNvY2tldCBpc24mIzM5O3QgJiMzNDtmdWxsc29jayYjMzQ7LiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBgZGlhZ19kZXN0cm95YCBmb3Igc29ja2V0cyB0aGF0IGFyZSBub3QgJiMzNDtmdWxsc29jaywmIzM0OyBzcGVjaWZpY2FsbHkgdGltZXdhaXQgc29ja2V0cyBvciByZXF1ZXN0IHNvY2tldHMsIHdoaWNoIEkgKmtub3cqIGNhbiBleGlzdC4KClRvIHByb2NlZWQgZWZmaWNpZW50bHksIEkmIzM5O2xsIGxldmVyYWdlIGBncmVwcGVyYCAob3IgaWYgdGhhdCYjMzk7cyBub3QgYXZhaWxhYmxlLCBgcmVhZC1maWxlYCkgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBicGZfc29ja19kZXN0cm95YCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgLCBgaW5ldF90d3NrX2RpYWdfZGVzdHJveWAsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgYGRpYWdfZGVzdHJveWAgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgaGFuZGxpbmcgb2YgdGhvc2Ugc29ja2V0IHR5cGVzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgbWVtb3J5IHNhZmV0eTogYXJlIHdlIG5vdyBwb3RlbnRpYWxseSBmcmVlaW5nIG1lbW9yeSBvciBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5IGluIGEgd2F5IHRoYXQgd2FzbiYjMzk7dCBwcmV2aW91c2x5IHBvc3NpYmxlPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW4gdGhlIGNhbGwgcGF0aHMuIElmIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2Ugb2YgbWVtb3J5IGlzc3VlcywgS01TQU4gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlhZ19kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjkxOT1fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MjctXHQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI4Olx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTI5LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MzUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNjpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTM3LX1cbi0tXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTE0OS1cdHN0cnVjdCBza19idWZmICpza2I7XG5uZXQvY29yZS9zb2NrX2RpYWcuYzoxNTA6XHRjb25zdCBlbnVtIHNrbmV0bGlua19ncm91cHMgZ3JvdXAgPSBzb2NrX2RpYWdfZGVzdHJveV9ncm91cChzayk7XG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXHRpbnQgZXJyID0gLTE7XG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmMtMzExLVxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTMte1xuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMxNzpcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMyMS19XG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMjI6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19kaWFnX2Rlc3Ryb3kpO1xubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxuLS1cbm5ldC9pcHY0L3Jhdy5jPTk0OD1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxubmV0L2lwdjQvcmF3LmM6OTczOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2NC9yYXcuYy05NzQtfTtcbi0tXG5uZXQvaXB2NC9yYXdfZGlhZy5jPTE4Nz1zdGF0aWMgdm9pZCByYXdfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MTk1OnN0YXRpYyBpbnQgcmF3X2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjQvcmF3X2RpYWcuYy0xOTYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjA0LVx0XHRyZXR1cm4gUFRSX0VSUihzayk7XG5uZXQvaXB2NC9yYXdfZGlhZy5jOjIwNTpcdGVyciA9IHNvY2tfZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXHRzb2NrX3B1dChzayk7XG4tLVxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjE4LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5Olx0LmRlc3Ryb3lcdFx0PSByYXdfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMjAtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0My1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cbm5ldC9pcHY0L3RjcF9kaWFnLmM6NjUzOlx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTY2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHRjcF9kaWFnX2hhbmRsZXIgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NjktI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NzA6XHQuZGVzdHJveVx0XHQ9IHRjcF9kaWFnX2Rlc3Ryb3ksXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3My1cdC5vYmpfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XG4tLVxubmV0L2lwdjQvdWRwX2RpYWcuYz0xNDQ9c3RhdGljIHZvaWQgdWRwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTE1MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjE1MjpzdGF0aWMgaW50IHVkcF9kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAwLVxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAyLVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmM9MjA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdWRwX2RpYWdfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjIxNzpcdC5kZXN0cm95XHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMTgtI2VuZGlmXG4tLVxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxubmV0L2lwdjYvcmF3LmM6MTIzMjpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTk0MC1cdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjYvdWRwLmMtMTk0Mi19O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBpdDoKCioqQ29uc2lkZXJpbmcgVENQIFNvY2tldCBBYm9ydCAmYW1wOyBUaW1ld2FpdCBTb2NrZXQgSGFuZGxpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgVENQIHNvY2tldCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGRlY2lkZSB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggYSBwYXJ0aWN1bGFyIHByb2JsZW0gdGhhdCBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgIGFuZCBgdGNwX2Fib3J0YC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRpbWV3YWl0IHNvY2tldHMgYXJlIHVsdGltYXRlbHkgaGFuZGxlZCBhbmQgY2xlYW5lZCB1cC4gVGhpcyBmZWVscyBsaWtlIGl0IG1pZ2h0IGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGEgYnVnIG9yIHBlcmZvcm1hbmNlIGlzc3VlIEkgYW0gZmFjaW5nLiBGaXJzdCwgSSB0aGluayBJJiMzOTtsbCBmb2N1cyBvbiBgdGNwX2Fib3J0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTUwODk9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwLmMtNTExNC1cbm5ldC9pcHY0L3RjcC5jOjUxMTU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG5uZXQvaXB2NC90Y3AuYy01MTE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb3JlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IFRDUCYjMzk7cyBtYW5hZ2luZyBjb25nZXN0aW9uIGNvbnRyb2wsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGl0IGhhbmRsZXMgcmV0cmFuc21pc3Npb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTExNS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucy4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGFyZWEgcHJvYmFibHkgZGVhbHMgd2l0aCB0aGUgY29yZSBsb2dpYy4gTWlnaHQgYXMgd2VsbCB1c2UgdGhhdCB0byBndWlkZSB0aGUgbmV4dCBmZXcgbWludXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTExNTpcdGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxuNTExNjpcdHtcbjUxMTc6XHRcdGludCBzdGF0ZSA9IGluZXRfc2tfc3RhdGVfbG9hZChzayk7XG41MTE4Olx0XG41MTE5Olx0XHRpZiAoc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVikge1xuNTEyMDpcdFx0XHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSBpbmV0X3JlcXNrKHNrKTtcbjUxMjE6XHRcbjUxMjI6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuNTEyMzpcdFx0XHRpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG41MTI0Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEyNTpcdFx0XHRyZXR1cm4gMDtcbjUxMjY6XHRcdH1cbjUxMjc6XHRcdGlmIChzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSB7XG41MTI4Olx0XHRcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTtcbjUxMjk6XHRcbjUxMzA6XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNnR3LVx1MDAzZXR3X3JlZmNudCk7XG41MTMxOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMzI6XHRcdFx0aW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0KHR3KTtcbjUxMzM6XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG41MTM0Olx0XHRcdHJldHVybiAwO1xuNTEzNTpcdFx0fVxuNTEzNjpcdFxuNTEzNzpcdFx0LyogQlBGIGNvbnRleHQgZW5zdXJlcyBzb2NrIGxvY2tpbmcuICovXG41MTM4Olx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjUxMzk6XHRcdFx0LyogRG9uJiMzOTt0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cbjUxNDA6XHRcdFx0bG9ja19zb2NrKHNrKTtcbjUxNDE6XHRcbjUxNDI6XHRcdC8qIEF2b2lkIGNsb3NpbmcgdGhlIHNhbWUgc29ja2V0IHR3aWNlLiAqL1xuNTE0MzpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuNTE0NDpcdFx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjUxNDU6XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuNTE0NjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjUxNDc6XHRcdH1cbjUxNDg6XHRcbjUxNDk6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XG41MTUwOlx0XHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG41MTUxOlx0XHRcdGluZXRfY3NrX2xpc3Rlbl9zdG9wKHNrKTtcbjUxNTI6XHRcdH1cbjUxNTM6XHRcbjUxNTQ6XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggQkggc29ja2V0IGNsb3NlcyBzdWNoIGFzIGluZXRfY3NrX2xpc3Rlbl9zdG9wLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc1CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDE0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIGBicGZfc29ja19kZXN0cm95YCwgd2hpY2ggdGFrZXMgYSBgc29ja19jb21tb25gIHBvaW50ZXIuICBQcmV2aW91c2x5LCBpdCB3YXMgcmVhZGluZyBgc2stJmd0O3NrX3Byb3RvY29sYCBkaXJlY3RseS4gVGhlIHByb2JsZW0gaXMgdGhhdCBub3QgYWxsIHNvY2tldHMsIHNwZWNpZmljYWxseSB0aW1lLXdhaXQgb3IgcmVxdWVzdCBzb2NrZXRzIChgIXNrX2Z1bGxzb2NrKHNrKWApLCBhY3R1YWxseSBoYXZlIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIGRlZmluZWQgd2l0aGluIHRoZSBgc29ja19jb21tb25gIHN0cnVjdHVyZS4gSXQmIzM5O3Mgb25seSB3aXRoaW4gdGhlIGZ1bGwgYHN0cnVjdCBzb2NrYC4gVGhlIGNoZWNrIGBzay0mZ3Q7c2tfZnVsbHNvY2soc2spYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIGZ1bGwgc29ja2V0LiBJbiBvdGhlciB3b3JkcywgYWNjZXNzaW5nIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIG9uIHRpbWUtd2FpdCBzb2NrZXRzIHdhcyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTW9yZW92ZXIsIGl0IHdhcyBibG9ja2luZyB0aW1lLXdhaXQgc29ja2V0cyBmcm9tIGJlaW5nIGRlc3Ryb3llZCBiZWNhdXNlIG9mIHRoZSBwcm90b2NvbCBjaGVjay4KClRoZSBwYXRjaCBmaXhlcyB0aGlzLiBJdCBub3cgY2hlY2tzIGlmIHRoZSBzb2NrZXQgaXMgYSBmdWxsIHNvY2tldCAqYmVmb3JlKiBhY2Nlc3NpbmcgYHNrLSZndDtza19wcm90b2NvbGAuICBJZiBpdCYjMzk7cyAqbm90KiBhIGZ1bGwgc29ja2V0IChsaWtlIGEgdGltZS13YWl0IHNvY2tldCksIGl0IHNraXBzIHRoZSBwcm90b2NvbCBjaGVjayBlbnRpcmVseSBhbmQgcHJvY2VlZHMgZGlyZWN0bHkgdG8gY2FsbGluZyBgc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveWAuIFRoaXMgaXMgY29ycmVjdC4gVGhlIHByb3RvY29sLXNwZWNpZmljIGBkaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9uIChgdGNwX2Fib3J0YCBpbiB0aGUgY2FzZSBvZiBUQ1ApIGFscmVhZHkgaGFuZGxlcyB0aGUgdGltZS13YWl0IG9yIG5ldy1zeW4tcmVjdiBzdGF0ZXMgcHJvcGVybHkuICBUaGlzIHJlc29sdmVzIHRoZSBwcmV2aW91cyBpc3N1ZS4KCk5vdywgd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqIHByb2JsZW1zLiAgTGV0JiMzOTtzIGNvbnNpZGVyIHBvc3NpYmxlIGlzc3VlczoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnk6KiogIERvZXMgdGhlIHBhdGNoIGFsbG9jYXRlIGFueSBuZXcgYnVmZmVycyBvciBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBObywgdGhlIHBhdGNoIGFjdHVhbGx5ICpwcmV2ZW50cyogYW4gb3V0LW9mLWJvdW5kcyByZWFkLgoqICAgKipEYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlOioqICBEb2VzIHRoaXMgcGF0Y2ggY29weSBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8gTm8uCiogICAqKlVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIG9yIG1lbW9yeSByZWFkczoqKiBEb2VzIGl0IGludHJvZHVjZSBhbnkgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSW4gZmFjdCwgaXQmIzM5O3Mgc2FmZXIuCiogICAqKk1lbW9yeSBjb3JydXB0aW9uLCBsb2NraW5nLCBvciBsaWZldGltZSBpc3N1ZXM6KiogIEFueSByaXNrcz8gVGhlIG1haW4gY29uY2VybnMgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCBidXQgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIGxvY2tkZXAsIHJlc3BlY3RpdmVseS4KClRoaXMgbGVhZHMgdXMgdG8gdGhlIGNydWNpYWwgcXVlc3Rpb246IERvZXMgdGhpcyBjb2RlIGNoYW5nZSB3YXJyYW50IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcik/ICBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmUuIFdlIG9ubHkgbmVlZCBpdCBpZiB0aGUgY2hhbmdlIGV4cG9zZXMgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyB0aGF0IGFyZSAqbm90KiBjYXVnaHQgYnkgS0FTQU4sIGxvY2tkZXAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuCgpSZXZpZXdpbmcgdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlOioqICBOby4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBUaGUgcGF0Y2ggZml4ZWQgYSBwb3RlbnRpYWwgcmVhZCBvZiB1bmluaXRpYWxpemVkIGRhdGEuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm8uCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBjb2RlIGNoYW5nZSBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKQSBmaW5hbCBkb3VibGUtY2hlY2sgb2YgdGhlIHRvdWNoZWQgZmlsZXMgKCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCkgY29uZmlybXMgdGhpcyBhbmFseXNpcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcy4KClRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gb25seSBjaGVjayBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrIHRvIGJlIGRlc3Ryb3llZCB2aWEgdGhlIEJQRiBrZnVuYy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIG9ubHkgY2hlY2sgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCB3aGVuIGBza19mdWxsc29jayhzaylgIGlzIHRydWUsIGFsbG93aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB3aXRoIGEgdmFsaWQgYHNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJbiBmYWN0LCBjaGVja2luZyBgc2tfZnVsbHNvY2soKWAgYXZvaWRzIHJlYWRpbmcgZmllbGRzIGJleW9uZCBgc29ja19jb21tb25gIGZvciBtaW5pYXR1cmUgc29ja2V0cy4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIHNvY2tldCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgb3IgbG9ja2luZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA0OjI0LjA2ODkyNjAwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzY4ODk0NTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJ0Y3BfYWJvcnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIG9ubHkgY2hlY2sgYHNrLVxcdTAwM2Vza19wcm90b2NvbGAgd2hlbiBgc2tfZnVsbHNvY2soc2spYCBpcyB0cnVlLCBhbGxvd2luZyBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgd2l0aCBhIHZhbGlkIGBza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrIHRvIGJlIGRlc3Ryb3llZCB2aWEgdGhlIEJQRiBrZnVuYy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5IGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSW4gZmFjdCwgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKClgIGF2b2lkcyByZWFkaW5nIGZpZWxkcyBiZXlvbmQgYHNvY2tfY29tbW9uYCBmb3IgbWluaWF0dXJlIHNvY2tldHMuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIG9yIGxvY2tpbmcgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6MjQuMDY4OTMwNjU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA4MTE2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTk6MDQ6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0xMjkxMiw4ICsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbiAgKlxcbiAgKiBSZXR1cm46XFxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxcbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cXG4rICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cXG4gICogMCBvdGhlcndpc2VcXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG5AQCAtMTI5MjUsOCArMTI5MjUsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbiBcXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XFxuIFxcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbmluZGV4IDljMTE5MzhmZTU5N2QuLjZjY2M3Y2RhNDEwYmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbkBAIC0xMTAsNiArMTEwLDY1IEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuIFxcdFxcdGNsb3NlKHNlcnYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuK3tcXG4rXFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcXG4rXFx0Y2hhciBidWZbMV07XFxuK1xcbitcXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFxcXCJzdGFydF9zZXJ2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXFxcImNvbm5lY3RfdG9fZmRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcXFwic2VydiBhY2NlcHRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcXG4rXFx0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxcbitcXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxcbitcXHQgKiBjYW4ndCByYWNlIHVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0dixcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YodHYpKSwgXFxcImNsZWFyIHJjdnRpbWVvXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcXFwiY2xpZW50IHNodXRkb3duXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0YWNjZXB0X3NlcnYgPSAtMTtcXG4rXFxuK1xcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cXG4rXFx0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcXFwiY2xpZW50IHJlY3YgRU9GXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHdfZm91bmQsIDEsIFxcXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdEFTU0VSVF9PSyhza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcXFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kLCAwLCBcXFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChjbGllbiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2UoY2xpZW4pO1xcbitcXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0aWYgKHNlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKHNlcnYpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxcbiB7XFxuIFxcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xcbkBAIC0yMDQsMTEgKzI2MywxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpXFxuIFxcdFxcdHRlc3RfdGNwX2NsaWVudChza2VsKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRjcF9zZXJ2ZXJcXFwiKSlcXG4gXFx0XFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidGNwX3RpbWV3YWl0XFxcIikpXFxuK1xcdFxcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidWRwX2NsaWVudFxcXCIpKVxcbiBcXHRcXHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1ZHBfc2VydmVyXFxcIikpXFxuIFxcdFxcdHRlc3RfdWRwX3NlcnZlcihza2VsKTtcXG4tXFxuIFxcdFJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTtcXG4gXFxuIGNsZWFudXA6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcXG5pbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcXG5AQCAtNyw2ICs3LDggQEBcXG4gI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbiBcXG4gX19iZTE2IHNlcnZfcG9ydCA9IDA7XFxuK2ludCB0d19mb3VuZCA9IDA7XFxuK2ludCB0d19kZXN0cm95X2VyciA9IDA7XFxuIFxcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XFxuIFxcbkBAIC0xMDAsNiArMTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcIml0ZXIvdGNwXFxcIilcXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVxcdTAwM2Vza19jb21tb247XFxuK1xcdF9fdTY0ICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0aWYgKCFza19jb21tb24pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHNrX2NvbW1vbi1cXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXFxuK1xcdGlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHR3X2ZvdW5kKys7XFxuK1xcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuIFNFQyhcXFwiaXRlci91ZHBcXFwiKVxcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDoyNC42MDA1MDk1NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgzNDEyMjk5NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTowNDoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI1LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuaW5kZXggOWMxMTkzOGZlNTk3ZC4uNmNjYzdjZGE0MTBiZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuQEAgLTExMCw2ICsxMTAsNjUgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiBcdFx0Y2xvc2Uoc2Vydik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbit7XG4rXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbitcdGNoYXIgYnVmWzFdO1xuK1xuK1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbitcdGlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCBcImNvbm5lY3RfdG9fZmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsIFwic2VydiBhY2NlcHRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0YWNjZXB0X3NlcnYgPSAtMTtcbitcbitcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwiY2xpZW50IHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMSwgXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZGVzdHJveV9lcnIsIFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXCIpO1xuK1xuK1x0LyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDAsIFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChjbGllbiAhPSAtMSlcbitcdFx0Y2xvc2UoY2xpZW4pO1xuK1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRpZiAoc2VydiAhPSAtMSlcbitcdFx0Y2xvc2Uoc2Vydik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4ge1xuIFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7XG5AQCAtMjA0LDExICsyNjMsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuIFx0XHR0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7XG4tXG4gXHRSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7XG4gXG4gY2xlYW51cDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5pbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbiBcbiBfX2JlMTYgc2Vydl9wb3J0ID0gMDtcbitpbnQgdHdfZm91bmQgPSAwO1xuK2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJpdGVyL3RjcFwiKVxuK2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC1cdTAwM2Vza19jb21tb247XG4rXHRfX3U2NCAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHRpZiAoIXNrX2NvbW1vbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc2tfY29tbW9uLVx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1x0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xuK1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dHdfZm91bmQrKztcbitcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuIFNFQyhcIml0ZXIvdWRwXCIpXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA0OjI0LjYwMDUxMTE5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MDg4NTU3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJJ2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIHBhdGNoIGl0c2VsZiwgdGhlbiBJJ2xsIGxldmVyYWdlIG15IGtub3dsZWRnZSBvZiBCUEYgYW5kIHNvY2tldCBpbnRlcm5hbHMgdG8gYXNzZXNzIGl0cyBpbXBhY3QuXG5cblRoZSBjaGFuZ2UgaW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGltbWVkaWF0ZWx5IGFwcGFyZW50LiBUaGUgY29kZSBpcyBiZWluZyBtb2RpZmllZCB0byByZXN0cmljdCBpdHMgdXNlLCBwYXJ0aWN1bGFybHkgZm9yIHNvY2tldHMgYmV5b25kIFRDUCBhbmQgVURQLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayB0aGF0IGFsbG93ZWQgdGhlIGZ1bmN0aW9uIHRvIHByb2NlZWQgaWYgYGRpYWdfZGVzdHJveWAgd2FzIG5vdCBpbXBsZW1lbnRlZC4gTm93LCBhIHJldHVybiBvZiBgLUVPUE5PVFNVUFBgIG9jY3VycyBpZiBgZGlhZ19kZXN0cm95YCBpc24ndCBpbXBsZW1lbnRlZCBhbmQgdGhlIHNvY2tldCBpcyBub3QgVENQIG9yIFVEUC4gRnVydGhlcm1vcmUsIHRoZXJlJ3MgYW4gYWRkZWQgY2hlY2sgdXNpbmcgYHNrX2Z1bGxzb2NrYCwgd2hpY2ggaW5kaWNhdGVzIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgbW9yZSBsaW1pdGVkIHRvIGZ1bGwgc29ja2V0cyBvdGhlciB0aGFuIFRDUC9VRFAuXG5cblRoZSBjb21tZW50IGhpZ2hsaWdodGluZyBcImxvY2tpbmcgc2VtYW50aWNzXCIgYW5kIGNvbmN1cnJlbnQgZXhlY3V0aW9uIGlzIGEga2V5IHJlZCBmbGFnLCBvZiBjb3Vyc2UuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzb2NrZXQgdGVhcmRvd24gd2l0aGluIEJQRiBjb250ZXh0cy4gU3VwcG9ydGluZyBwcm90b2NvbHMgbXVzdCBub3cgYWNxdWlyZSB0aGUgc29jayBsb2NrIHRvIGVuc3VyZSBzYWZldHkuXG5cblRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byBzZWUgaG93IGBicGZfc29ja19kZXN0cm95YCBpcyAqdXNlZCogd2l0aGluIHRoaXMgZmlsZSBhbmQgcG90ZW50aWFsbHkgaW4gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byBsb29rIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIGhvdyBpdHMgcmV0dXJuIHZhbHVlcyBhcmUgaGFuZGxlZC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IGV4aXN0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhpcyBmdW5jdGlvbmFsaXR5PyBIb3cgYXJlIHRoZXkgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhpcyBrZnVuYz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhvc2UgdXNlcy5cblxuTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgc291bmQsIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcmVncmVzc2lvbnMsIGFuZCBpZiBpdCdzIHByb3Blcmx5IGRvY3VtZW50ZWQuIEEgdGhvcm91Z2ggcmV2aWV3IHdpbGwgcmVxdWlyZSBsb29raW5nIGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IHJlc3RyaWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6MzMuNDA5Mzc0MDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTA1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwNTpcXHQgKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gYSBzb2NrZXQsIGFuZCBpbnZva2VzIHRoZVxcbjEyOTA2OlxcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxcbjEyOTA3OlxcdCAqXFxuMTI5MDg6XFx0ICogVGhlIGhlbHBlciBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBCUEYgY29udGV4dHMgdGhhdCBoYXZlIGFjcXVpcmVkIHRoZSBzb2NrZXRcXG4xMjkwOTpcXHQgKiBsb2Nrcy5cXG4xMjkxMDpcXHQgKlxcbjEyOTExOlxcdCAqIFBhcmFtZXRlcnM6XFxuMTI5MTI6XFx0ICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbjEyOTEzOlxcdCAqXFxuMTI5MTQ6XFx0ICogUmV0dXJuOlxcbjEyOTE1OlxcdCAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cXG4xMjkxNjpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE3OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTg6XFx0ICovXFxuMTI5MTk6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIwOlxcdHtcXG4xMjkyMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIyOlxcdFxcbjEyOTIzOlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjQ6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI1OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNjpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI3OlxcdFxcdCAqL1xcbjEyOTI4OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkyOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzA6XFx0XFxuMTI5MzE6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMyOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzMzpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNTpcXHRcXG4xMjkzNjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzNzpcXHR9XFxuMTI5Mzg6XFx0XFxuMTI5Mzk6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MDpcXHRcXG4xMjk0MTpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0MzpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA0OjMzLjQxMDA2MjEyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NTY3NTQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgYSBCUEYga2Z1bmMsIHBhcnQgb2YgdGhlIHN0YW5kYXJkIEJQRiB0b29sa2l0IHVzZWQgdG8gY2xlYW4gdXAgc29ja2V0IHJlc291cmNlcywgZXNwZWNpYWxseSB0aG9zZSBhY2Nlc3NlZCB0aHJvdWdoIHNvY2tldCBhbmQgQlBGIGl0ZXJhdG9ycy4gSSByZWNhbGwgdGhhdCwgcHJldmlvdXNseSwgaXRzIHVzYWdlIHdhcyByYXRoZXIgcmVzdHJpY3RlZCwgcmVxdWlyaW5nIHRoYXQgdGhlIHNvY2tldCdzIHByb3RvY29sIGJlIGVpdGhlciBUQ1Agb3IgVURQLiBUaGUgY29kZSBzbmlwcGV0IGlzIHRhbGtpbmcgYWJvdXQgYSBjaGFuZ2UgaGVyZS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHNvY2tldHMgdGhhdCBhcmVuJ3QgZnVsbHkgZm9ybWVk4oCUbGV0J3MgY2FsbCB0aGVtIFwibm9uLWZ1bGxzb2NrXCIgc29ja2V0c+KAlHNwZWNpZmljYWxseSwgdGltZXdhaXQgc29ja2V0cywgcmVxdWVzdCBzb2NrZXRzIGFuZCB0aGUgbGlrZS4gTm93LCB0aGUgYHNrX3Byb3RvY29sYCBmaWVsZCwgdGhlIG9uZSB1c2VkIHRvIHZhbGlkYXRlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggVENQIG9yIFVEUCwgZG9lc24ndCBhbHdheXMgZXhpc3QgYXQgdGhlIHNhbWUgb2Zmc2V0IGluIHRoZSBgc29ja19jb21tb25gIHN0cnVjdHVyZSBmb3IgdGhlc2UgXCJwYXJ0aWFsXCIgc29ja2V0IHR5cGVzLiBGdXJ0aGVybW9yZSwgY2FsbGluZyBgc2tfZnVsbHNvY2soc2spYCByZXR1cm5zIGZhbHNlIGZvciB0aGVzZSBzb2NrZXQgdHlwZXMuIFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIGNhbWUgaW4uXG5cblRoZSBmaXggSSdtIGxvb2tpbmcgYXQgdXRpbGl6ZXMgYHNrX2Z1bGxzb2NrKHNrKWAuIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlIGtmdW5jIHdvdWxkIGhhdmUgZmFpbGVkIGluIHRob3NlIHNpdHVhdGlvbnMuIEJ1dCBieSB1c2luZyBgc2tfZnVsbHNvY2soc2spYCBhcyBhIGNoZWNrLCB0aGUgY29kZSBub3cgKmNvbmRpdGlvbmFsbHkqIGFwcGxpZXMgdGhlIHByb3RvY29sIGNoZWNrLiBUaGlzIGFsbG93cyB0aGUga2Z1bmMgdG8gY29ycmVjdGx5IGRlc3Ryb3kgdGhlc2UgdGltZXdhaXQgc29ja2V0cywgZXZlbiB3aGVuIHRoZSBgc2tfcHJvdG9jb2xgIGZpZWxkIGlzbid0IHJlbGlhYmx5IGF2YWlsYWJsZSBpbiB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24sIG9yIGF0IGFsbC4gSSBjYW4gc2VlIGhvdyB0aGlzIGNhbiBiZSB1c2VmdWwgaW4gZnVuY3Rpb25zIGxpa2UgYHRjcF90d3NrX2RpYWdfZGVzdHJveWAsIGB0Y3BfZGlhZ19kZXN0cm95YCwgYW5kIGBpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXRgLiBUaGUgbmV3IGNvZGUgaGFuZGxlcyB0aGVzZSB0eXBlcyBvZiBzb2NrZXRzIGJ5IGRlc3Ryb3lpbmcgdGhlbSBub3cgdGhhdCBgc2tfZnVsbHNvY2soc2spYCBpcyBiZWluZyB1c2VkIHRvIHZhbGlkYXRlIGZpcnN0LlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBob3cgYGRpYWdfZGVzdHJveWAgaXMgaW1wbGVtZW50ZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBicm9hZGVyIGltcGFjdCBvciBpZiB0aGlzIGlzIHRoZSBzdGFydCBvZiBhIHRyZW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6NDAuMjY2ODIwNTY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzQ0NDUwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5kaWFnX2Rlc3Ryb3lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcXG5uZXQvaXB2NC9yYXcuYzo5NzM6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ3PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cXHQubm9fYXV0b2JpbmRcXHRcXHQ9IHRydWUsXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzk2OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHRjcF9hYm9ydCxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTctfTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMxNDM9c3RydWN0IHByb3RvIHVkcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzE3My1cXHQub2JqX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxcbm5ldC9pcHY0L3VkcC5jOjMxNzQ6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY0L3VkcC5jLTMxNzUtfTtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxcbm5ldC9pcHY2L3Jhdy5jOjEyMzI6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY2L3Jhdy5jLTEyMzMtfTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNS1cXHQubm9fYXV0b2JpbmRcXHRcXHQ9IHRydWUsXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHRjcF9hYm9ydCxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjctfTtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTQwLVxcdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcXG5uZXQvaXB2Ni91ZHAuYzoxOTQxOlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHVkcF9hYm9ydCxcXG5uZXQvaXB2Ni91ZHAuYy0xOTQyLX07XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDY9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXFx0dGNwX3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE2NzpcXHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxMy1cXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTQ6XFx0dGNwdjZfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6NDIuNjAxMjcyNjAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ4MTU0Nzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBicGZfc29ja19kZXN0cm95YCBpcyBhIEJQRiBrZnVuYywgdGhhdCBpcyBpbXBvcnRhbnQgYXMgaXQgaXMgYSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBmdW5jdGlvbiB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgYnBmKClgIGFuZCBpdGVyYXRvciBmaWxlIGRlc2NyaXB0b3JzLiBRRU1VIGFuZCBHQ0UgYXJlIHN0YW5kYXJkIHRhcmdldHMgZm9yIHRoaXMgdHlwZSBvZiB3b3JrLCBzbyB0aGF0J3MgZ29vZC5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIGNoYW5nZSBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAncyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGl0IHRvIGRlc3Ryb3kgKm5vbi1mdWxsKiBzb2NrZXRzLCBsaWtlIFRJTUVfV0FJVCBzb2NrZXRzLCBmb3IgZXhhbXBsZSwgd2hpY2ggaXMgdHJpZ2dlcmVkIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYHRjcF9hYm9ydGAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQncyBjaGFuZ2luZyB0aGUgZXhlY3V0aW9uIHBhdGhzIGZvciBzb2NrZXRzIGluIFRJTUVfV0FJVCBvciByZXF1ZXN0IHN0YXRlcy5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQncyBzZWUuLi4gU2VjdGlvbiAzIG9mIG15IGd1aWRlbGluZXMgYXJlOiBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgYW5kIHJlYWNoYWJsZSBjb2RlLiBUaGlzIGhpdHMgb24gXCJjb3JlIG5ldHdvcmtpbmcsXCIgXCJCUEYsXCIgYW5kIGlzIGRlZmluaXRlbHkgXCJyZWFjaGFibGUgY29kZVwiIHNvIHRoZSBhbnN3ZXIgaXMgY2xlYXJseSBUUlVFLiBUaGlzIGlzIGEgdmVyeSBnb29kIHRhcmdldC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBGb2N1c1N5bWJvbHM6IGBicGZfc29ja19kZXN0cm95YCBpdHNlbGYsIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIGlzIHRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZC4gQW5kIHJlbGF0ZWQgZnVuY3Rpb25zPyBgdGNwX2Fib3J0YCBpcyB0aGUgb2J2aW91cyBvbmUsIG9yIGlzIGl0IGp1c3QgdGhlIGBicGZfc29ja19kZXN0cm95YD8gSSBuZWVkIHRvIGxvb2sgaW50byB3aGF0IGB0Y3BfYWJvcnRgIGFjdHVhbGx5IGRvZXMgd2l0aCBUSU1FX1dBSVQgc29ja2V0cy4gTmVlZCB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDo0OC4wODI4MjQyOTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNTYyNjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE3MDQ9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjE3MDU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTExNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDk2PXN0YXRpYyB2b2lkIHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTEtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTEyOnN0YXRpYyBpbnQgdGNwX2Fib3J0X292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2ssIGludCBlcnIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDQ6NTAuMTA4NDU3NTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ4NjkyMTczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRjcF9hYm9ydGAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBgdGNwX2Fib3J0YCBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBuZXQvaXB2NC90Y3AuY2AuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgdGNwX2Fib3J0YC4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBvbiBob3cgaXQgaGFuZGxlcyB0aGUgYWJydXB0IHRlcm1pbmF0aW9uIG9mIGEgVENQIGNvbm5lY3Rpb24gZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgY2xlYW51cCwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgVENQIHN0YXRlIG1hY2hpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDo1NC41OTUzODM3MjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMTU6XFx0aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNTExNjpcXHR7XFxuNTExNzpcXHRcXHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xcbjUxMTg6XFx0XFxuNTExOTpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVikge1xcbjUxMjA6XFx0XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XFxuNTEyMTpcXHRcXG41MTIyOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTIzOlxcdFxcdFxcdGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XFxuNTEyNDpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTI1OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMjY6XFx0XFx0fVxcbjUxMjc6XFx0XFx0aWYgKHN0YXRlID09IFRDUF9USU1FX1dBSVQpIHtcXG41MTI4OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTtcXG41MTI5OlxcdFxcbjUxMzA6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ0dy1cXHUwMDNldHdfcmVmY250KTtcXG41MTMxOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTMyOlxcdFxcdFxcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XFxuNTEzMzpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTM0OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMzU6XFx0XFx0fVxcbjUxMzY6XFx0XFxuNTEzNzpcXHRcXHQvKiBCUEYgY29udGV4dCBlbnN1cmVzIHNvY2sgbG9ja2luZy4gKi9cXG41MTM4OlxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbjUxMzk6XFx0XFx0XFx0LyogRG9uJ3QgcmFjZSB3aXRoIHVzZXJzcGFjZSBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgdGNwX2Nsb3NlLiAqL1xcbjUxNDA6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG41MTQxOlxcdFxcbjUxNDI6XFx0XFx0LyogQXZvaWQgY2xvc2luZyB0aGUgc2FtZSBzb2NrZXQgdHdpY2UuICovXFxuNTE0MzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjUxNDQ6XFx0XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTE0NTpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjUxNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuNTE0NzpcXHRcXHR9XFxuNTE0ODpcXHRcXG41MTQ5OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNDo1NC41OTU1OTMzMDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY5NjkxNzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBgYnBmX3NvY2tfZGVzdHJveWAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZpeCByZWxhdGVkIHRvIGBicGZfc29ja19kZXN0cm95YCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggc29ja2V0cyBpbiBkaWZmZXJlbnQgc3RhdGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBwYXRjaCBpcyBuZWNlc3NhcnkgYW5kIHdoYXQgaXQncyBlbmFibGluZy5cblxuRmlyc3QsIEknbSBsb29raW5nIGF0IGhvdyBgdGNwX2Fib3J0YCBpcyBjdXJyZW50bHkgaGFuZGxlZC4gSSBzZWUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVClgLiBUaGF0J3MgZ29vZCwgaXQgY29uZmlybXMgdGhhdCBgdGNwX2Fib3J0YCBpcyAqYWxyZWFkeSogd3JpdHRlbiB0byBkZWFsIHdpdGggYFRDUF9USU1FX1dBSVRgIHNvY2tldHMuIFNhbWUgZm9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgaXTigJlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgaW1wbGllcyB0aGVyZSdzIG5vIGluaGVyZW50IHByb2JsZW0gaW4gKnRjcF9hYm9ydCogaXRzZWxmLiBUaGUgaXNzdWUgbXVzdCBiZSBpbiAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgb3IgcGVyaGFwcywgKndoZW4qLlxuXG5UaGUgdGV4dCBzYXlzIGBicGZfc29ja19kZXN0cm95KClgIHdhcyB0aGUgYmxvY2tlci4gVGhlIGtleSBoZXJlIGlzIHRoZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrICpiZWZvcmUqIHRoZSBgc2tfZnVsbHNvY2soc2spYCBjaGVjayB3aXRoaW4gYGJwZl9zb2NrX2Rlc3Ryb3koKWAuIFJpZ2h0LCB0aGF0J3MgdGhlIGN1bHByaXQuIFRoYXQgY29uZGl0aW9uYWwgbG9naWMgd2FzIHByZXZlbnRpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZyb20gYmVpbmcgY2FsbGVkIG9uIHNvY2tldHMgaW4gc3RhdGVzIGxpa2UgYFRDUF9USU1FX1dBSVRgLCB3aGljaCBhcmUgbm90ICpmdWxsKiBzb2NrZXRzLiBUaGUgZml4IGlzIG5vdyBhbGxvd2luZyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gb3BlcmF0ZSBvbiAqbm9uLWZ1bGwqIHNvY2tldHMuIE1ha2VzIHNlbnNlLCB0aGF0IGFsbG93cyB0aGUgY2xlYW51cCBvZiB0aGVzZSBzb2NrZXQgc3RydWN0dXJlcy5cblxuTm93LCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5lZCBhbmQgaG93IGl0J3MgY29tcGlsZWQuIExldCdzIGZpbmQgb3V0IGFib3V0IHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cywgSSdsbCBnbyB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzZWFyY2ggYXJvdW5kIGxpbmUgMTI5MDAgb3IgdXNlIGEgZGlyZWN0IHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIHJldmVhbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhhdCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgcHJvcGVybHkgZW5hYmxlZCBmb3IgdGhlIHJlbGV2YW50IEJQRiBpdGVyYXRvciB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjAwLjI5MjUxMzgzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NjA4Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19pdGVyX2tmdW5jX2lkc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI5Mzk9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0Mi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MzpCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDQtXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NDU9c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ2LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0NzpcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDgtXFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NTM9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9za19pdGVyX2tmdW5jX3NldCA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1NC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1NTpcXHQuc2V0ICAgPSBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU2LVxcdC5maWx0ZXIgPSB0cmFjaW5nX2l0ZXJfZmlsdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNTowMC41MDExMjc5ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwNDIyMzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWdpc3RyYXRpb24gb2YgYGJwZl9za19pdGVyX2tmdW5jX3NldGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9za19pdGVyX2tmdW5jX3NldGAgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIEJQRiBmdW5jdGlvbnMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIHRob3NlIGAjaWZkZWZgIGJsb2NrcyDigJMgdGhhdCBtaWdodCBnb3Zlcm4gaXRzIGluY2x1c2lvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgaXRzIGF2YWlsYWJpbGl0eSBpcyB0aWVkIHRvIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSBvciBtb2R1bGUgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhvc2UgY29uZGl0aW9ucyBiZWNhdXNlIGl0IGdpdmVzIG1lIGNvbnRleHQgb24gaXRzIHB1cnBvc2UsIHVzYWdlIHJlcXVpcmVtZW50cywgYW5kIHRoZSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudCB0aGUgZnVuY3Rpb24gZXhwZWN0cyB0byB3b3JrIHdpdGhpbi4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaW5mb3JtIGFueSBmdXJ0aGVyIGFuYWx5c2lzLCBkZWJ1Z2dpbmcsIG9yIG1vZGlmaWNhdGlvbnMgSSBtaWdodCBuZWVkIHRvIHBlcmZvcm0gb24gcmVsYXRlZCBCUEYgY29kZS4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHN0YXJ0IHRyYWNpbmcgdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjAzLjEwNTM1NTY5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTQwOlxcdFxcbjEyOTQxOlxcdEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbjEyOTQyOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxcbjEyOTQzOlxcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0NDpcXHRcXG4xMjk0NTpcXHRzdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuMTI5NDY6XFx0e1xcbjEyOTQ3OlxcdFxcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG4xMjk0ODpcXHRcXHQgICAgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXFxuMTI5NDk6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTI5NTA6XFx0XFx0cmV0dXJuIDA7XFxuMTI5NTE6XFx0fVxcbjEyOTUyOlxcdFxcbjEyOTUzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XFxuMTI5NTQ6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI5NTU6XFx0XFx0LnNldCAgID0gXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcXG4xMjk1NjpcXHRcXHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcXG4xMjk1NzpcXHR9O1xcbjEyOTU4OlxcdFxcbjEyOTU5OlxcdHN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG4xMjk2MDpcXHR7XFxuMTI5NjE6XFx0XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcXG4xMjk2MjpcXHR9XFxuMTI5NjM6XFx0bGF0ZV9pbml0Y2FsbChpbml0X3N1YnN5c3RlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjAzLjEwNTc3Mjk0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA4MzUyOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIHN0YXRlbWVudHMsIHN1cnJvdW5kaW5nIHRoZSBgaW5pdF9zdWJzeXN0ZW1gIG9yIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBjb2RlYmFzZSwgdGhpcyBzZWVtcyBsaWtlIGEgc2Vuc2libGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgcG90ZW50aWFsIGJ1aWxkLXRpbWUgdmFyaWF0aW9ucyBpbiBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gbWlnaHQgYmUgaW5pdGlhbGl6ZWQgb3IgdG9ybiBkb3duLiBLbm93aW5nIHRoaXMsIGFuZCBoYXZpbmcgbG9va2VkIGF0IHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSBvZiB0aGUgbmV0d29yayBmaWx0ZXIsIEkgaGF2ZSBhIGdvb2QgaWRlYSB3aGVyZSB0byBzdGFydCBsb29raW5nLCBhbmQgYXJvdW5kIGxpbmUgMTI5MDAgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcG9pbnQgdG8gYmVnaW4gbXkgc2Nhbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zLCBvciB0aGVpciBiZWhhdmlvciwgYXJlIHBvdGVudGlhbGx5IGNvbnRyb2xsZWQgYnkgYnVpbGQgY29uZmlndXJhdGlvbnMgb3Igc3BlY2lmaWMga2VybmVsIHZlcnNpb25zLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gdGhlIGtlcm5lbCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlc2UgY29uZGl0aW9uYWwgYmxvY2tzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBvciBwb3J0aW5nIEJQRi1yZWxhdGVkIGNvZGUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjA1LjMxNDEzMDY5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyODkwOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XFxuMTI4OTE6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG4xMjg5MjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfeGRwKTtcXG4xMjg5MzpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxuMTI4OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfYWRkcik7XFxuMTI4OTU6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7XFxuMTI4OTY6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xcbjEyODk3OlxcdFxcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XFxuMTI4OTg6XFx0fVxcbjEyODk5OlxcdGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xcbjEyOTAwOlxcdFxcbjEyOTAxOlxcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4xMjkwMjpcXHRcXG4xMjkwMzpcXHQvKiBicGZfc29ja19kZXN0cm95OiBEZXN0cm95IHRoZSBnaXZlbiBzb2NrZXQgd2l0aCBFQ09OTkFCT1JURUQgZXJyb3IgY29kZS5cXG4xMjkwNDpcXHQgKlxcbjEyOTA1OlxcdCAqIFRoZSBmdW5jdGlvbiBleHBlY3RzIGEgbm9uLU5VTEwgcG9pbnRlciB0byBhIHNvY2tldCwgYW5kIGludm9rZXMgdGhlXFxuMTI5MDY6XFx0ICogcHJvdG9jb2wgc3BlY2lmaWMgc29ja2V0IGRlc3Ryb3kgaGFuZGxlcnMuXFxuMTI5MDc6XFx0ICpcXG4xMjkwODpcXHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxcbjEyOTA5OlxcdCAqIGxvY2tzLlxcbjEyOTEwOlxcdCAqXFxuMTI5MTE6XFx0ICogUGFyYW1ldGVyczpcXG4xMjkxMjpcXHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXFxuMTI5MTM6XFx0ICpcXG4xMjkxNDpcXHQgKiBSZXR1cm46XFxuMTI5MTU6XFx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgRUlOVkFMLlxcbjEyOTE2OlxcdCAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuMTI5MTc6XFx0ICogMCBvdGhlcndpc2VcXG4xMjkxODpcXHQgKi9cXG4xMjkxOTpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjA1LjMxNDY4MjMwNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTczNzI2NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIE5ldHdvcmsgQ29yZSBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCBob3cgYGZpbHRlci5jYCBnZXRzIGJ1aWx0IHdpdGhpbiB0aGUgbmV0d29yayBjb3JlLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCByZXNpZGUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmVhcnRoIGluIHRoZXJlLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBNYWtlZmlsZSBhbmQgaHVudCBkb3duIHRoZSByZWxldmFudCBzZWN0aW9uLi4uIGdvdHRhIGZpbmQgdGhvc2UgYnVpbGQgZGlyZWN0aXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjA4LjI4ODQxMjQ0NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2ODU5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNTowOC4zNDgxMTAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxNDU3NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIEJQRl9TWVNDQUxMIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHByZXNlbmNlIG9mIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IG9yIGRlZmluaXRpb24gb2YgYEJQRl9TWVNDQUxMYCBtaWdodCBiZSBkZXBlbmRlbnQgb24gc29tZSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGtlcm5lbCB2ZXJzaW9uLCBvciBvdGhlciBjb21waWxlLXRpbWUgZmxhZy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGAjaWZkZWZgLCBgI2lmbmRlZmAsIGAjaWZgLCBvciBwb3RlbnRpYWxseSBldmVuIGAjZGVmaW5lYCB1c2FnZSBzdXJyb3VuZGluZyB0aGlzIG1hY3JvLiBUaGUgcHVycG9zZSBvZiB0aGlzIGNvdWxkIGJlIGEgY29tcGF0aWJpbGl0eSBtZWFzdXJlIGZvciBvbGRlciBrZXJuZWxzLCBhIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHksIHNvIGl0IGlzIG5lY2Vzc2FyeSB0byBkZXRlcm1pbmUgZXhhY3RseSB3aGF0IHRoaXMgbWVhbnMuIFRoaXMgaXMgb2Z0ZW4gdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgbGFuZHNjYXBlLiBUaGUgcHJlc2VuY2Ugb2YgY29uZGl0aW9uYWxzIGhlcmUgd291bGQgaW1tZWRpYXRlbHkgcmFpc2Ugc29tZSBxdWVzdGlvbnMgaW4gbXkgbWluZCBhYm91dCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHksIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgdGhlIHN0YWJpbGl0eSBvZiBCUEYtcmVsYXRlZCBjb2RlLiBMZXQncyBzdGFydCB0aGUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjczMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjEwLjU5OTU3MTE5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NzExMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTQ1MzQ9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NTM1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzY6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNy12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MTAuNjUwMzQ3MzM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDA1MDkwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0YCBhbmQgQlBGX1NZU0NBTEwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgZ3VhcmRpbmcgY29uZGl0aW9ucy4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBCUEYsIGFuZCBnaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZSB1c2Ugb2YgYEJQRl9TWVNDQUxMYCBpcyBpbXBvcnRhbnQgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB3aGF0IGNvbmRpdGlvbmFsIGxvZ2ljIGlzIHdyYXBwZWQgYXJvdW5kIGl0cyB1c2UuIEFyZSB3ZSB1c2luZyBhIGAjaWZkZWZgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJcyBpdCBhbiBpbmxpbmUgZnVuY3Rpb24/IE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBmb3IgdGhpcyBmdW5jdGlvbiB0byBiZSBldmVuIGNvbnNpZGVyZWQgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgaW1wYWN0IGFuZCBkZXBlbmRlbmNpZXMuIExldCdzIGdldCB0byB0aGUgY29kZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGVuYWJsZWQgYnkgYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbiwgbWF5YmUgYSBmZWF0dXJlIGZsYWcuLi4gS25vd2luZyB0aG9zZSBkZXRhaWxzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gZXZhbHVhdGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MTMuMTkwODYxMzQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEyNDg3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00OTQ9dHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTUwNy0gICAgICAgIHtcXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjUwODogICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3Rhc2tfa2Z1bmNfc2V0KTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTUwOS0gICAgICAgIH1cXG4tLVxcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYz0xMjI3PXN0YXRpYyB2b2lkIF9faW5pdCB3YWtldXBfc291cmNlc19icGZfaW5pdCh2b2lkKVxcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy0xMjI4LXtcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM6MTIyOTpcXHRpZiAocmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZ3YWtldXBfc291cmNlX2tmdW5jX3NldCkpXFxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jLTEyMzAtXFx0XFx0cG1fcHJfZGJnKFxcXCJXYWtldXA6IGZhaWxlZCB0byByZWdpc3RlciBCVEYga2Z1bmNzXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM9NjU4PXN0YXRpYyBpbnQgX19pbml0IGhpZF9icGZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NjctXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2Njg6XFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZoaWRfYnBmX2tmdW5jX3NldCk7XFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NjktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NzMtXFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2NzQ6XFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZoaWRfYnBmX3N5c2NhbGxfa2Z1bmNfc2V0KTtcXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY3NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYz0zMjE9c3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzIyLXtcXG5mcy9iaW5mbXRfbWlzY19icGYuYzozMjM6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTMyNC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJtX2JwZl9rZnVuY19zZXQpO1xcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ5Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy00OTUtXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5NjpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ5Ny1cXHRpZiAocmV0IHx8ICFJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpKVxcbmZzL2JwZl9mc19rZnVuY3MuYy00OTgtXFx0XFx0cmV0dXJuIHJldDtcXG5mcy9icGZfZnNfa2Z1bmNzLmM6NDk5OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNTAwLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE4Nj12b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg3LXtcXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjE4ODpcXHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzdmVyaXR5X3NldCk7XFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9idGYuaD01ODc9dTMyICpidGZfa2Z1bmNfaXNfbW9kaWZ5X3JldHVybihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsXFxuaW5jbHVkZS9saW51eC9idGYuaC01ODgtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcXG5pbmNsdWRlL2xpbnV4L2J0Zi5oOjU4OTppbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTkwLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmLmg9NjQ3PXN0YXRpYyBpbmxpbmUgdTMyICpidGZfa2Z1bmNfaWRfc2V0X2NvbnRhaW5zKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjUzLX1cXG5pbmNsdWRlL2xpbnV4L2J0Zi5oOjY1NDpzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuaW5jbHVkZS9saW51eC9idGYuaC02NTUtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKVxcbi0tXFxuaW9fdXJpbmcvYnBmLW9wcy5jPTEyMD1zdGF0aWMgaW50IGJwZl9pb19pbml0KHN0cnVjdCBidGYgKmJ0ZilcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuYy0xMjktXFxuaW9fdXJpbmcvYnBmLW9wcy5jOjEzMDpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5pb191cmluZy9icGYtb3BzLmMtMTMxLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZicGZfaW9fdXJpbmdfa2Z1bmNfc2V0KTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTMxPXN0YXRpYyBpbnQgX19pbml0IGtmdW5jX2luaXQodm9pZClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzMi17XFxua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZjb21tb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC19XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg5MDI9c3RhdGljIGludCBidGZfcG9wdWxhdGVfa2Z1bmNfc2V0KHN0cnVjdCBidGYgKmJ0ZiwgZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04OTQ4LVxcdHNldCA9IHRhYi1cXHUwMDNlc2V0c1tob29rXTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg5NDk6XFx0LyogV2FybiB3aGVuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQgaXMgY2FsbGVkIHR3aWNlIGZvciB0aGUgc2FtZSBob29rXFxua2VybmVsL2JwZi9idGYuYy04OTUwLVxcdCAqIGZvciBtb2R1bGUgc2V0cy5cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTE3Mz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTE4MS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjkxODI6c3RhdGljIGludCBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxcbmtlcm5lbC9icGYvYnRmLmMtOTE4My1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMDgtLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgb25seSBmcm9tIGluaXRjYWxscy9tb2R1bGUgaW5pdCBmdW5jdGlvbnMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jOjkyMDk6aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMTAtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjItXFx0aG9vayA9IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhwcm9nX3R5cGUpO1xcbmtlcm5lbC9icGYvYnRmLmM6OTIyMzpcXHRyZXR1cm4gX19yZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGhvb2ssIGtzZXQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTIyNC19XFxua2VybmVsL2JwZi9idGYuYzo5MjI1OkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTIyNi1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTIyOD1pbnQgcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxcbmtlcm5lbC9icGYvYnRmLmMtOTIyOS17XFxua2VybmVsL2JwZi9idGYuYzo5MjMwOlxcdHJldHVybiBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlRGX0tGVU5DX0hPT0tfRk1PRFJFVCwga3NldCk7XFxua2VybmVsL2JwZi9idGYuYy05MjMxLX1cXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jPTUxNT1zdGF0aWMgaW50IF9faW5pdCBjcHVtYXNrX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNS1cXHRyZXQgPSBicGZfbWVtX2FsbG9jX2luaXQoXFx1MDAyNmJwZl9jcHVtYXNrX21hLCBzaXplb2Yoc3RydWN0IGJwZl9jcHVtYXNrKSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1Mjg6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyOS1cXHRyZXR1cm4gIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoY3B1bWFza19kdG9ycyxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM4OC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM4OTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozOTE6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM5My1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNyeXB0X2luaXRfa2Z1bmNfc2V0KTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5ODI9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk5Ny1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTk4OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5OTk6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAzOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDA0LVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoZ2VuZXJpY19kdG9ycyxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDYtXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwNzpcXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZjb21tb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDA4LX1cXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0yMzA9c3RhdGljIGludCBpbml0X3N1YnN5c3RlbSh2b2lkKVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0yMzEte1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoyMzI6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZicGZfbWFwX2l0ZXJfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMzLX1cXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTc1OT1zdGF0aWMgX19pbml0IGludCBycXNwaW5sb2NrX3JlZ2lzdGVyX2tmdW5jcyh2b2lkKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2MC17XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzYxOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2cnFzcGlubG9ja19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2Mi19XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmM9NzY2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9yc3RhdF9rZnVuY19pbml0KHZvaWQpXFxua2VybmVsL2Nncm91cC9yc3RhdC5jLTc2Ny17XFxua2VybmVsL2Nncm91cC9yc3RhdC5jOjc2ODpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsXFxua2VybmVsL2Nncm91cC9yc3RhdC5jLTc2OS1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJwZl9yc3RhdF9rZnVuY19zZXQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xMTYwPWludCBzY3hfY2lkX2tmdW5jX2luaXQodm9pZClcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTExNjEte1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MTE2MjpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2luaXRfY2lkcykgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjM6XFx0XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjQ6XFx0XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjU6XFx0XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCk7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0xMTY2LX1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTg9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzYtXFx0ICoga2Z1bmMgcmVnaXN0cmF0aW9uIGNhbid0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk3NzpcXHQgKiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KCkgbmVlZHMgbW9zdCBvZiB0aGUgc3lzdGVtIHRvIGJlIHVwLlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzgtXFx0ICpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODYtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4NzpcXHRpZiAoKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODgtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9lbnF1ZXVlX2Rpc3BhdGNoKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTg5OlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5MC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2Rpc3BhdGNoKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTkxOlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5Mi1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2NwdV9yZWxlYXNlKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTkzOlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5NC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3VubG9ja2VkKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTk1OlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3VubG9ja2VkKSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTk3OlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk5OC1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5OTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwMDAtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSB8fFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwMDE6XFx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDAyLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1NTQ9aW50IHNjeF9pZGxlX2luaXQodm9pZClcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy0xNTU1LXtcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU2OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNnNjeF9rZnVuY19zZXRfaWRsZSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU3OlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNnNjeF9rZnVuY19zZXRfaWRsZSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU4OlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNnNjeF9rZnVuY19zZXRfaWRsZSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTU5OlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNnNjeF9rZnVuY19zZXRfc2VsZWN0X2NwdSkgPzpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTYwOlxcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNnNjeF9rZnVuY19zZXRfc2VsZWN0X2NwdSk7XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTU2MS19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzQ1OT1zdGF0aWMgaW50IF9faW5pdCBicGZfdHJhY2Vfa2Z1bmNzX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDYyLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDYzOlxcdGVyciA9IGVyciA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfS1BST0JFLCBcXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2NDpcXHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY1LVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xODI9c3RhdGljIGludCBfX2luaXQgYnBmX21lbWNvbnRyb2xfaW5pdCh2b2lkKVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODUtXFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODY6XFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQyxcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4Ny1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX21lbWNvbnRyb2xfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xODg4PXN0YXRpYyBpbnQgX19pbml0IGJwZl9wcm9nX3Rlc3RfcnVuX2luaXQodm9pZClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xOTAyLVxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChcXHUwMDI2YnBmX3Rlc3RfbW9kaWZ5X3JldHVybl9zZXQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTAzOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTA0OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE5MDYtXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX3Byb2dfdGVzdF9kdG9yX2tmdW5jLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTYtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE3OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMxOC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxOTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMjE6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzIyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyODc1PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg3OC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg3OTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgwOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0tfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODQ6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg1OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX0lOLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg2OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODc6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg4OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg5OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTI6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTM6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk0LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk1OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk2OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5NzpcXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk4LX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU5PXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MC17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NjE6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2Mi19XFxuLS1cXG5uZXQvY29yZS94ZHAuYz05OTM9c3RhdGljIGludCBfX2luaXQgeGRwX21ldGFkYXRhX2luaXQodm9pZClcXG5uZXQvY29yZS94ZHAuYy05OTQte1xcbm5ldC9jb3JlL3hkcC5jOjk5NTpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNnhkcF9tZXRhZGF0YV9rZnVuY19zZXQpO1xcbm5ldC9jb3JlL3hkcC5jLTk5Ni19XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MzQ1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90Y3BfY2Ffa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTM0OC1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzQ5OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3RjcF9jYV9rZnVuY19zZXQpO1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zNTAtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFxcdTAwMjZicGZfdGNwX2Nvbmdlc3Rpb25fb3BzLCB0Y3BfY29uZ2VzdGlvbl9vcHMpO1xcbi0tXFxubmV0L2lwdjQvZm91X2JwZi5jPTExMz1pbnQgcmVnaXN0ZXJfZm91X2JwZih2b2lkKVxcbm5ldC9pcHY0L2ZvdV9icGYuYy0xMTQte1xcbm5ldC9pcHY0L2ZvdV9icGYuYzoxMTU6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxubmV0L2lwdjQvZm91X2JwZi5jLTExNi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvdV9icGZfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTc1PXN0YXRpYyBpbnQgX19pbml0IGJicl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2Jici5jLTExODAtXFxubmV0L2lwdjQvdGNwX2Jici5jOjExODE6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZ0Y3BfYmJyX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvdGNwX2Jici5jLTExODItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYz01MDE9c3RhdGljIGludCBfX2luaXQgY3ViaWN0Y3BfcmVnaXN0ZXIodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNC1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYzo1MzU6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZ0Y3BfY3ViaWNfa2Z1bmNfc2V0KTtcXG5uZXQvaXB2NC90Y3BfY3ViaWMuYy01MzYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgZGN0Y3BfcmVnaXN0ZXIodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTI5OS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYzozMDA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZ0Y3BfZGN0Y3Bfa2Z1bmNfc2V0KTtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0zMDEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01NDA9aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXFx1MDAyNm5mX2Nvbm50cmFja19rZnVuY19zZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjU0NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNm5mX2Nvbm50cmFja19rZnVuY19zZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0Ni1cXHRpZiAoIXJldCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jPTExNj1pbnQgbmZfZmxvd19yZWdpc3Rlcl9icGYodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtMTE3LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6MTE4OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0xMTktXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZuZl9mbG93X2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYz02Nj1pbnQgcmVnaXN0ZXJfbmZfbmF0X2JwZih2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNjktXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03MS1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2bmZfYnBmX25hdF9rZnVuY19zZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzQtXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzU6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzYtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZuZl9icGZfbmF0X2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9NDYwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9xZGlzY19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDY5LVxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYzo0NzA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZicGZfcWRpc2Nfa2Z1bmNfc2V0KTtcXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDcxLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3Moc2tiX2tmdW5jX2R0b3JzLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM9MTA2PWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9pbnRlcmZhY2VfYnBmKHZvaWQpXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmMtMTA3LXtcXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYzoxMDg6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmMtMTA5LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2eGZybV9pbnRlcmZhY2Vfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM9MTMwPWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYodm9pZClcXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jLTEzMS17XFxubmV0L3hmcm0veGZybV9zdGF0ZV9icGYuYzoxMzI6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXFxubmV0L3hmcm0veGZybV9zdGF0ZV9icGYuYy0xMzMtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ4ZnJtX3N0YXRlX3hkcF9rZnVuY19zZXQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jPTI1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90ZXN0X21vZG9yZGVyX3hfaW5pdCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYy0yNi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jOjI3OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYy0yOC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJwZl90ZXN0X21vZG9yZGVyX3hfc2V0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl95X2luaXQodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYzoyNzpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmMtMjgtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfdGVzdF9tb2RvcmRlcl95X3NldCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jPTIxMzA9c3RhdGljIGludCBicGZfdGVzdG1vZF9pbml0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTIxNDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQxOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFxcdTAwMjZicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDI6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZicGZfdGVzdG1vZF9rZnVuY19zZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtMjE0Ni1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KFxcdTAwMjZicGZfdGVzdG1vZF90cmFtcG9saW5lX2NvdW50X2Ztb2RyZXRfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MTUuNjAzMzc5OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1MjQ3MjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBCUEYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGEgZmV3IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGZvciBCUEYga2Z1bmMgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGVzc2VudGlhbHM6IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBCUEYga2Z1bmNzIHJlbHkgb24gYm90aCBvZiB0aGVzZSBiZWluZyBlbmFibGVkLiBPZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgYWxzbyBmdW5kYW1lbnRhbCBmb3IgbmV0d29ya2luZy1yZWxhdGVkIEJQRiBhcHBsaWNhdGlvbnMuIFRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGlzIGluZm9ybWF0aW9uIGFyZSBpbiBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZXNlIGNvcmUgc2V0dGluZ3MgYmVmb3JlIGRpdmluZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MjIuMjU1ODU1MTYxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI3ODg1MTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MjIuNDk4NjYxNDYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTQ0MjU0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsJ3MgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgKEJQRikgc3Vic3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIGdvIGRlZXBlci4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgY2VudHJhbCBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyBCUEYgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0gYW5kIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgQlBGIGNvbnRyb2xzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgSSBjYW4gc3RhcnQgdW50YW5nbGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgZmVhdHVyZXMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBob3cgQlBGIGZpdHMgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDAxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MjguODkzMDkwNTUxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI5NTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNToyOC45NDYzOTIzNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA2MTM0OTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIEJQRl9TWVNDQUxMIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIG15IGZpcnN0IG1vdmUgaXMgdG8gbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIGlzIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0IGl0cyBpbXBhY3QuIEknbSBsb29raW5nIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29udGV4dC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGlzIGFzIEkgZXhwZWN0LiBJdCdzIGEgcXVpY2sgYnV0IGVzc2VudGlhbCBzdGVwIHRvIGFzc2VzcyBpdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSBhbmQgaXRzIGdlbmVyYWwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MzMuMDA3NzQ1MzM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MzMuMDA3ODI0MDg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTAwNDY4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBCVEYgSW5mb3JtYXRpb246IEEgS2NvbmZpZyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBCVEYgZGVidWdnaW5nIHNpdHVhdGlvbi4gRmlyc3QgdGhpbmcncyBmaXJzdDogSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZ2F0ZWtlZXBlcnMgZm9yIGRlYnVnLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBhbnl0aGluZyByZWxhdGVkIHRvIEJURi4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGxpbmVzIGFyZSBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBidWlsZC4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgSSBoYXZlIGF2YWlsYWJsZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6MzUuMjk3ODc0MzA2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzNTE3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXFxubGliL0tjb25maWcuZGVidWctMzk5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDI3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjM3LjA1MTQwMDU2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzA4NTQ5Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRGVidWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gc29tZSBkZWJ1ZyBzZXR0aW5ncyBpbiB0aGlzIGJ1aWxkLiBMZXQncyBzZWUuLi5JJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMzk4IHRocm91Z2ggNDIwLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgZ29pbmcgdG8gbGF5IG91dCBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGRlZmluZSBzb21lIG1hY3JvcyByZWxhdGVkIHRvIGRlYnVnZ2luZyBmZWF0dXJlcy4gR2l2ZW4gdGhlIGZpbGUgbmFtZSwgaXQncyB2ZXJ5IGxpa2VseSB0aGlzIGFyZWEgaXMgZGVkaWNhdGVkIHRvIHBhcmFtZXRlcnMgb3IgY29uZmlndXJhdGlvbnMgZm9yIGNvcmUgb3IgZm91bmRhdGlvbmFsIGRlYnVnZ2luZyBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBvZiB0aGVzZSB2YWx1ZXMgYW5kIHRoZWlyIGltcGFjdCBvbiBidWlsZCBzaXplIGFuZCBwZXJmb3JtYW5jZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgbnVhbmNlcyBvciBwb3RlbnRpYWwgdHdlYWtzIGFyZSBoaWRkZW4gaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjQwLjM1OTk1ODkyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTgsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTg6XFx0Y29uZmlnIERFQlVHX0lORk9fQlRGXFxuIDM5OTpcXHRcXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4gNDAwOlxcdFxcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0lORk9fUkVEVUNFRFxcbiA0MDE6XFx0XFx0ZGVwZW5kcyBvbiAhR0NDX1BMVUdJTl9SQU5EU1RSVUNUIHx8IENPTVBJTEVfVEVTVFxcbiA0MDI6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiA0MDM6XFx0XFx0ZGVwZW5kcyBvbiBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjJcXG4gNDA0OlxcdFxcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xcbiA0MDU6XFx0XFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxcbiA0MDY6XFx0XFx0aGVscFxcbiA0MDc6XFx0XFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxcbiA0MDg6XFx0XFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcXG4gNDA5OlxcdFxcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cXG4gNDEwOlxcdFxcbiA0MTE6XFx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xcbiA0MTI6XFx0XFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXFx1MDAzZT0gMTIzXFxuIDQxMzpcXHRcXHRkZXBlbmRzIG9uIENDX0lTX0NMQU5HXFxuIDQxNDpcXHRcXHRoZWxwXFxuIDQxNTpcXHRcXHQgIERlY2lkZSB3aGV0aGVyIHBhaG9sZSBlbWl0cyBidGZfdGFnIGF0dHJpYnV0ZXMgKGJ0Zl90eXBlX3RhZyBhbmRcXG4gNDE2OlxcdFxcdCAgYnRmX2RlY2xfdGFnKSBvciBub3QuIEN1cnJlbnRseSBvbmx5IGNsYW5nIGNvbXBpbGVyIGltcGxlbWVudHNcXG4gNDE3OlxcdFxcdCAgdGhlc2UgYXR0cmlidXRlcywgc28gbWFrZSB0aGUgY29uZmlnIGRlcGVuZCBvbiBDQ19JU19DTEFORy5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuIDQyMDpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjRcXG4gNDIxOlxcdFxcdGhlbHBcXG4gNDIyOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6NDAuMzYwMzE3MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU1NTUzMzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSdyZSBkZWFsaW5nIHdpdGggYGJwZl9zb2NrX2Rlc3Ryb3lgLCB3aGljaCBpcyB1c2VkIHRvIGRlc3Ryb3kgc29ja2V0cyAoVENQLCBVRFAsIHRoZSB1c3VhbCBzdXNwZWN0cykuIFRoZSBzdGFuZGFyZCBgQ09ORklHX0lORVRgIGlzLCBvZiBjb3Vyc2UsIGEgZ2l2ZW4uIEl0IGFsc28gbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgIGFyZSBlc3NlbnRpYWwgYXMgd2VsbC5cblxuTm93LCBsZXQncyBnZXQgZm9jdXNlZC4gTXkgbWFpbiB0YXJnZXQgaXMgYGJwZl9zb2NrX2Rlc3Ryb3lgLiBUaGUgbW9kaWZpY2F0aW9uIGlzIGluIHRoZSBrZXJuZWwgaW1hZ2UuIEl0IGxvb2tzIGxpa2UgYHRjcF9hYm9ydGAgaXMgY2xvc2VseSByZWxhdGVkLCBhcyBpdCBoYW5kbGVzIFRJTUVfV0FJVCBzb2NrZXQgZGVzdHJ1Y3Rpb24uIExldCdzIHNlZS4uLiBgdHJhY2luZ19pdGVyX2ZpbHRlcmAgaXMgaW4gdGhlIHNhbWUgZmlsZSBidXQgaXQgd2Fzbid0IG1vZGlmaWVkLiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWUgZm9jdXMuIFdlIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBgdGNwX2Fib3J0YCBzaW5jZSBpdCdzIGRpcmVjdGx5IGludm9rZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfc29ja19kZXN0cm95YCBhbmQgYHRjcF9hYm9ydGAgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGUuIE9rYXksIGBicGZfc29ja19kZXN0cm95YCBpcyBhIGdsb2JhbCBrZnVuYyBzeW1ib2wgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gQW5kIGB0Y3BfYWJvcnRgIGlzIGFsc28gbm9uLXN0YXRpYywgZm91bmQgaW4gYG5ldC9pcHY0L3RjcC5jYC4gR29vZC5cblxuSnVzdCB0byBiZSBzYWZlLCBJJ20gdmVyaWZ5aW5nIHRob3NlIHJlcXVpcmVkIGNvbmZpZ3MgYWdhaW46IGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgSU5FVGAuXG5cblRoZSByYXRpb25hbGUgaXMgc291bmQuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIGhhbmRsZSB0aGUgZGVzdHJ1Y3Rpb24gb2Ygbm9uLWZ1bGwgc29ja2V0cywgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBUQ1BfVElNRV9XQUlUYCBhbmQgYFRDUF9ORVdfU1lOX1JFQ1ZgIHN0YXRlcy4gSXQncyBkb2luZyB0aGlzIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGZpcnN0LiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBsZXRzIEJQRiBpdGVyYXRvcnMgY2FsbCBgYnBmX3NvY2tfZGVzdHJveWAgb24gc29ja2V0cyBpbiBgVElNRV9XQUlUYCwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyBwcm90b2NvbC1zcGVjaWZpYyBhYm9ydCByb3V0aW5lcyBsaWtlIGB0Y3BfYWJvcnRgLiBUaGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIEJQRiBpdGVyYXRvcnMsIHNvIGZ1enppbmcgaXMgY2VydGFpbmx5IHdhcnJhbnRlZC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ0NCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNTo0Ny45MTU4NTU3OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk0NTY2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NvY2tfZGVzdHJveVwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NvY2tfZGVzdHJveSgpIGluIG5ldC9jb3JlL2ZpbHRlci5jIHRvIGFsbG93IHByb3RvY29sIGFib3J0IGhhbmRsZXJzIChlLmcuLCB0Y3BfYWJvcnQpIHRvIGRlc3Ryb3kgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCBTWU5fUkVDViBzb2NrZXRzKSBieSBxdWFsaWZ5aW5nIHRoZSBwcm90b2NvbCBjaGVjayB3aXRoIHNrX2Z1bGxzb2NrKCkuIFRoaXMgZW5hYmxlcyBuZXcgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrZXQgaXRlcmF0b3IgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9zb2NrX2Rlc3Ryb3koKSBpbiBuZXQvY29yZS9maWx0ZXIuYyB0byBhbGxvdyBwcm90b2NvbCBhYm9ydCBoYW5kbGVycyAoZS5nLiwgdGNwX2Fib3J0KSB0byBkZXN0cm95IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgU1lOX1JFQ1Ygc29ja2V0cykgYnkgcXVhbGlmeWluZyB0aGUgcHJvdG9jb2wgY2hlY2sgd2l0aCBza19mdWxsc29jaygpLiBUaGlzIGVuYWJsZXMgbmV3IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja2V0IGl0ZXJhdG9yIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDU6NDguMDEyODE2ODc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc0NTA0NDY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjQ4LjAxMzYxMjAzNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5NzQ0MjQ0NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBvbmx5IGNoZWNrIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNGU0NTViYWE2NzEzMDBkMjU5Nzk5ZThlYWY0M2UwMWE5ZmQ4NzJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTowNDoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjFiYmI3MjEzOGFjNjQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw4IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIEVJTlZBTC5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI1LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuaW5kZXggOWMxMTkzOGZlNTk3ZC4uNmNjYzdjZGE0MTBiZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuQEAgLTExMCw2ICsxMTAsNjUgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiBcdFx0Y2xvc2Uoc2Vydik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbit7XG4rXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbitcdGNoYXIgYnVmWzFdO1xuK1xuK1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbitcdGlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCBcImNvbm5lY3RfdG9fZmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsIFwic2VydiBhY2NlcHRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0YWNjZXB0X3NlcnYgPSAtMTtcbitcbitcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwiY2xpZW50IHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMSwgXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZGVzdHJveV9lcnIsIFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXCIpO1xuK1xuK1x0LyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDAsIFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcIik7XG4rXG4rY2xlYW51cDpcbitcdGlmIChjbGllbiAhPSAtMSlcbitcdFx0Y2xvc2UoY2xpZW4pO1xuK1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRpZiAoc2VydiAhPSAtMSlcbitcdFx0Y2xvc2Uoc2Vydik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4ge1xuIFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7XG5AQCAtMjA0LDExICsyNjMsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuIFx0XHR0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7XG4tXG4gXHRSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7XG4gXG4gY2xlYW51cDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5pbmRleCA5ZTBiZjdhNTRjZWM5Li4wYTg4ODc1NDMyMThhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbiBcbiBfX2JlMTYgc2Vydl9wb3J0ID0gMDtcbitpbnQgdHdfZm91bmQgPSAwO1xuK2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJpdGVyL3RjcFwiKVxuK2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC1cdTAwM2Vza19jb21tb247XG4rXHRfX3U2NCAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHRpZiAoIXNrX2NvbW1vbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc2tfY29tbW9uLVx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1x0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xuK1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dHdfZm91bmQrKztcbitcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuIFNFQyhcIml0ZXIvdWRwXCIpXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA1OjQ4LjAxMzYxMzU5NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTE1NjQ3MzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIGZ1enppbmcgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLlxuXG5SaWdodCwgc28gdGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95YC4gSXQgbG9va3MgbGlrZSBpdCdzIHJlbW92aW5nIGEgY2hlY2sgZm9yIGBzay1cdTAwM2Vza19wcm90b2NvbGAgd2l0aGluIGFuIGVhcmx5IHJldHVybi4gVGhlIG9yaWdpbmFsIGxvZ2ljIHByZXZlbnRlZCB0aGUgZXhlY3V0aW9uIG9mIGBkaWFnX2Rlc3Ryb3lgIGlmIHRoZSBzb2NrZXQgd2Fzbid0IFRDUCBvciBVRFAuIFRoZSBuZXcgbG9naWMgaXMgYWxsb3dpbmcgYGRpYWdfZGVzdHJveWAgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgc29ja2V0IGlzbid0IFwiZnVsbHNvY2tcIi4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBicGZfc29ja19kZXN0cm95YCBhbmQgYGRpYWdfZGVzdHJveWAgZm9yIHNvY2tldHMgdGhhdCBhcmUgbm90IFwiZnVsbHNvY2ssXCIgc3BlY2lmaWNhbGx5IHRpbWV3YWl0IHNvY2tldHMgb3IgcmVxdWVzdCBzb2NrZXRzLCB3aGljaCBJICprbm93KiBjYW4gZXhpc3QuXG5cblRvIHByb2NlZWQgZWZmaWNpZW50bHksIEknbGwgbGV2ZXJhZ2UgYGdyZXBwZXJgIChvciBpZiB0aGF0J3Mgbm90IGF2YWlsYWJsZSwgYHJlYWQtZmlsZWApIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCwgYGluZXRfdHdza19kaWFnX2Rlc3Ryb3lgLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGBkaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGhhbmRsaW5nIG9mIHRob3NlIHNvY2tldCB0eXBlcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIG1lbW9yeSBzYWZldHk6IGFyZSB3ZSBub3cgcG90ZW50aWFsbHkgZnJlZWluZyBtZW1vcnkgb3IgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBpbiBhIHdheSB0aGF0IHdhc24ndCBwcmV2aW91c2x5IHBvc3NpYmxlPyBUaGF0J3Mgd2hhdCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGluIHRoZSBjYWxsIHBhdGhzLiBJZiB0aGVyZSdzIGEgZ29vZCBjaGFuY2Ugb2YgbWVtb3J5IGlzc3VlcywgS01TQU4gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjA2OjAzLjE3MDA5MTk3NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTEzMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYWdfZGVzdHJveVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTE5PV9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTI3LVxcdCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI4OlxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkyOS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNjpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzNy19XFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMTQ5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L2NvcmUvc29ja19kaWFnLmM6MTUwOlxcdGNvbnN0IGVudW0gc2tuZXRsaW5rX2dyb3VwcyBncm91cCA9IHNvY2tfZGlhZ19kZXN0cm95X2dyb3VwKHNrKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXFx0aW50IGVyciA9IC0xO1xcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTEtXFxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzEzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMTc6XFx0aWYgKCFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95KVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzE5LVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMjEtfVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMjpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX2RpYWdfZGVzdHJveSk7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcXG5uZXQvaXB2NC9yYXcuYzo5NzM6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0xODc9c3RhdGljIHZvaWQgcmF3X2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9yYXdfZGlhZy5jOjE5NTpzdGF0aWMgaW50IHJhd19kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTE5Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXFxuLS1cXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTIwNC1cXHRcXHRyZXR1cm4gUFRSX0VSUihzayk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYzoyMDU6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXFx0c29ja19wdXQoc2spO1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMTgtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5OlxcdC5kZXN0cm95XFx0XFx0PSByYXdfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjIwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDMtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY1MzpcXHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9NjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNjY5LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY3MDpcXHQuZGVzdHJveVxcdFxcdD0gdGNwX2RpYWdfZGVzdHJveSxcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTUtXFx0Lm5vX2F1dG9iaW5kXFx0XFx0PSB0cnVlLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM5NjpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB0Y3BfYWJvcnQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTQzPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMxNzMtXFx0Lm9ial9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSxcXG5uZXQvaXB2NC91ZHAuYzozMTc0OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHVkcF9hYm9ydCxcXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTE0ND1zdGF0aWMgdm9pZCB1ZHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0xNTEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3VkcF9kaWFnLmM6MTUyOnN0YXRpYyBpbnQgdWRwX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDAtXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDItXFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHVkcF9kaWFnX2hhbmRsZXIgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMTc6XFx0LmRlc3Ryb3lcXHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjE4LSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNjowMy40MTQwMDk4MDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3OTU1MzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGl0OlxuXG4qKkNvbnNpZGVyaW5nIFRDUCBTb2NrZXQgQWJvcnQgXHUwMDI2IFRpbWV3YWl0IFNvY2tldCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgVENQIHNvY2tldCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGVjaWRlIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBhIHBhcnRpY3VsYXIgcHJvYmxlbSB0aGF0IEknbSB3b3JraW5nIHRocm91Z2guIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCBhbmQgYHRjcF9hYm9ydGAuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gaXMgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aW1ld2FpdCBzb2NrZXRzIGFyZSB1bHRpbWF0ZWx5IGhhbmRsZWQgYW5kIGNsZWFuZWQgdXAuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhIGJ1ZyBvciBwZXJmb3JtYW5jZSBpc3N1ZSBJIGFtIGZhY2luZy4gRmlyc3QsIEkgdGhpbmsgSSdsbCBmb2N1cyBvbiBgdGNwX2Fib3J0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDY6MDUuNDkzNTY3ODUxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAyNjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTExNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNjowNS41Njc2MDU5NzZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc3MzE5MDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBUQ1AncyBtYW5hZ2luZyBjb25nZXN0aW9uIGNvbnRyb2wsIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGl0IGhhbmRsZXMgcmV0cmFuc21pc3Npb25zLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBgbmV0L2lwdjQvdGNwLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTE1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zLiBJJ20gZ3Vlc3NpbmcgdGhhdCBhcmVhIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgbG9naWMuIE1pZ2h0IGFzIHdlbGwgdXNlIHRoYXQgdG8gZ3VpZGUgdGhlIG5leHQgZmV3IG1pbnV0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTowNjowOC4zNDA3OTk1MTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMTU6XFx0aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNTExNjpcXHR7XFxuNTExNzpcXHRcXHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xcbjUxMTg6XFx0XFxuNTExOTpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVikge1xcbjUxMjA6XFx0XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XFxuNTEyMTpcXHRcXG41MTIyOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTIzOlxcdFxcdFxcdGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XFxuNTEyNDpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTI1OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMjY6XFx0XFx0fVxcbjUxMjc6XFx0XFx0aWYgKHN0YXRlID09IFRDUF9USU1FX1dBSVQpIHtcXG41MTI4OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gaW5ldF90d3NrKHNrKTtcXG41MTI5OlxcdFxcbjUxMzA6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ0dy1cXHUwMDNldHdfcmVmY250KTtcXG41MTMxOlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG41MTMyOlxcdFxcdFxcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XFxuNTEzMzpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG41MTM0OlxcdFxcdFxcdHJldHVybiAwO1xcbjUxMzU6XFx0XFx0fVxcbjUxMzY6XFx0XFxuNTEzNzpcXHRcXHQvKiBCUEYgY29udGV4dCBlbnN1cmVzIHNvY2sgbG9ja2luZy4gKi9cXG41MTM4OlxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbjUxMzk6XFx0XFx0XFx0LyogRG9uJ3QgcmFjZSB3aXRoIHVzZXJzcGFjZSBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgdGNwX2Nsb3NlLiAqL1xcbjUxNDA6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG41MTQxOlxcdFxcbjUxNDI6XFx0XFx0LyogQXZvaWQgY2xvc2luZyB0aGUgc2FtZSBzb2NrZXQgdHdpY2UuICovXFxuNTE0MzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbjUxNDQ6XFx0XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTE0NTpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjUxNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuNTE0NzpcXHRcXHR9XFxuNTE0ODpcXHRcXG41MTQ5OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xcbjUxNTA6XFx0XFx0XFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG41MTUxOlxcdFxcdFxcdGluZXRfY3NrX2xpc3Rlbl9zdG9wKHNrKTtcXG41MTUyOlxcdFxcdH1cXG41MTUzOlxcdFxcbjUxNTQ6XFx0XFx0LyogRG9uJ3QgcmFjZSB3aXRoIEJIIHNvY2tldCBjbG9zZXMgc3VjaCBhcyBpbmV0X2Nza19saXN0ZW5fc3RvcC4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDY6MDguMzQxMDEyMTU5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0MTY4MjE4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBgYnBmX3NvY2tfZGVzdHJveWAsIHdoaWNoIHRha2VzIGEgYHNvY2tfY29tbW9uYCBwb2ludGVyLiAgUHJldmlvdXNseSwgaXQgd2FzIHJlYWRpbmcgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCBkaXJlY3RseS4gVGhlIHByb2JsZW0gaXMgdGhhdCBub3QgYWxsIHNvY2tldHMsIHNwZWNpZmljYWxseSB0aW1lLXdhaXQgb3IgcmVxdWVzdCBzb2NrZXRzIChgIXNrX2Z1bGxzb2NrKHNrKWApLCBhY3R1YWxseSBoYXZlIGBzay1cdTAwM2Vza19wcm90b2NvbGAgZGVmaW5lZCB3aXRoaW4gdGhlIGBzb2NrX2NvbW1vbmAgc3RydWN0dXJlLiBJdCdzIG9ubHkgd2l0aGluIHRoZSBmdWxsIGBzdHJ1Y3Qgc29ja2AuIFRoZSBjaGVjayBgc2stXHUwMDNlc2tfZnVsbHNvY2soc2spYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIGZ1bGwgc29ja2V0LiBJbiBvdGhlciB3b3JkcywgYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAgb24gdGltZS13YWl0IHNvY2tldHMgd2FzIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgb3IgcG90ZW50aWFsbHkgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgaXQgd2FzIGJsb2NraW5nIHRpbWUtd2FpdCBzb2NrZXRzIGZyb20gYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgdGhlIHByb3RvY29sIGNoZWNrLlxuXG5UaGUgcGF0Y2ggZml4ZXMgdGhpcy4gSXQgbm93IGNoZWNrcyBpZiB0aGUgc29ja2V0IGlzIGEgZnVsbCBzb2NrZXQgKmJlZm9yZSogYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAuICBJZiBpdCdzICpub3QqIGEgZnVsbCBzb2NrZXQgKGxpa2UgYSB0aW1lLXdhaXQgc29ja2V0KSwgaXQgc2tpcHMgdGhlIHByb3RvY29sIGNoZWNrIGVudGlyZWx5IGFuZCBwcm9jZWVkcyBkaXJlY3RseSB0byBjYWxsaW5nIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveWAuIFRoaXMgaXMgY29ycmVjdC4gVGhlIHByb3RvY29sLXNwZWNpZmljIGBkaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9uIChgdGNwX2Fib3J0YCBpbiB0aGUgY2FzZSBvZiBUQ1ApIGFscmVhZHkgaGFuZGxlcyB0aGUgdGltZS13YWl0IG9yIG5ldy1zeW4tcmVjdiBzdGF0ZXMgcHJvcGVybHkuICBUaGlzIHJlc29sdmVzIHRoZSBwcmV2aW91cyBpc3N1ZS5cblxuTm93LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSAqbmV3KiBwcm9ibGVtcy4gIExldCdzIGNvbnNpZGVyIHBvc3NpYmxlIGlzc3VlczpcbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqICBEb2VzIHRoZSBwYXRjaCBhbGxvY2F0ZSBhbnkgbmV3IGJ1ZmZlcnMgb3IgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSBwYXRjaCBhY3R1YWxseSAqcHJldmVudHMqIGFuIG91dC1vZi1ib3VuZHMgcmVhZC5cbiogICAqKkRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2U6KiogIERvZXMgdGhpcyBwYXRjaCBjb3B5IGFueSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBOby5cbiogICAqKlVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIG9yIG1lbW9yeSByZWFkczoqKiBEb2VzIGl0IGludHJvZHVjZSBhbnkgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSW4gZmFjdCwgaXQncyBzYWZlci5cbiogICAqKk1lbW9yeSBjb3JydXB0aW9uLCBsb2NraW5nLCBvciBsaWZldGltZSBpc3N1ZXM6KiogIEFueSByaXNrcz8gVGhlIG1haW4gY29uY2VybnMgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zLCBidXQgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIGxvY2tkZXAsIHJlc3BlY3RpdmVseS5cblxuVGhpcyBsZWFkcyB1cyB0byB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGNvZGUgY2hhbmdlIHdhcnJhbnQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKT8gIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZS4gV2Ugb25seSBuZWVkIGl0IGlmIHRoZSBjaGFuZ2UgZXhwb3NlcyAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHJpc2tzIHRoYXQgYXJlICpub3QqIGNhdWdodCBieSBLQVNBTiwgbG9ja2RlcCwgb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cblxuUmV2aWV3aW5nIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlOioqICBOby5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOby4gVGhlIHBhdGNoIGZpeGVkIGEgcG90ZW50aWFsIHJlYWQgb2YgdW5pbml0aWFsaXplZCBkYXRhLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOby5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIGNvZGUgY2hhbmdlIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbkEgZmluYWwgZG91YmxlLWNoZWNrIG9mIHRoZSB0b3VjaGVkIGZpbGVzICggYG5ldC9jb3JlL2ZpbHRlci5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4uLmApIGNvbmZpcm1zIHRoaXMgYW5hbHlzaXMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMuXG5cblRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3NSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6MDY6MTcuNzU3ODM2ODA5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBvbmx5IGNoZWNrIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBvbmx5IGNoZWNrIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIHdoZW4gYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZSwgYWxsb3dpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHdpdGggYSB2YWxpZCBgc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95YCBjYWxsYmFjayB0byBiZSBkZXN0cm95ZWQgdmlhIHRoZSBCUEYga2Z1bmMuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidWZmZXJzLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEluIGZhY3QsIGNoZWNraW5nIGBza19mdWxsc29jaygpYCBhdm9pZHMgcmVhZGluZyBmaWVsZHMgYmV5b25kIGBzb2NrX2NvbW1vbmAgZm9yIG1pbmlhdHVyZSBzb2NrZXRzLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGRlc3RydWN0aW9uIGxpZmVjeWNsZSBvciBsb2NraW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[1] Phase: Succeeded StartedAt: 2026-09-04 19:06:29 +0000 UTC FinishedAt: 2026-09-04 19:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 19:06:29 +0000 UTC FinishedAt: 2026-09-04 19:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2] Phase: Succeeded StartedAt: 2026-09-04 19:06:29 +0000 UTC FinishedAt: 2026-09-04 22:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 19:06:29 +0000 UTC FinishedAt: 2026-09-04 22:47:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 19:06:29 +0000 UTC FinishedAt: 2026-09-04 19:06:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 19:06:29 +0000 UTC FinishedAt: 2026-09-04 19:06:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow8ldmc/series-workflow8ldmc-convert-artifact-1492837160/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 19:06:39 +0000 UTC FinishedAt: 2026-09-04 19:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 19:06:39 +0000 UTC FinishedAt: 2026-09-04 19:23:19 +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:*8cf6ceb0-4fa4-48a2-8cb2-a6fa9f7bebbc,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-workflow8ldmc/series-workflow8ldmc-convert-artifact-1492837160/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": "bcd91a20-6450-4779-9117-b52d35b32f37", "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-workflow8ldmc/series-workflow8ldmc-build-action-3319486878/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 19:06:39 +0000 UTC FinishedAt: 2026-09-04 19:23:09 +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:*8cf6ceb0-4fa4-48a2-8cb2-a6fa9f7bebbc,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-workflow8ldmc/series-workflow8ldmc-convert-artifact-1492837160/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": "bcd91a20-6450-4779-9117-b52d35b32f37", "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-workflow8ldmc/series-workflow8ldmc-build-action-3319486878/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 19:23:19 +0000 UTC FinishedAt: 2026-09-04 19:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 19:23:19 +0000 UTC FinishedAt: 2026-09-04 19:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 19:23:19 +0000 UTC FinishedAt: 2026-09-04 19:23:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 19:23:19 +0000 UTC FinishedAt: 2026-09-04 19:23:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow8ldmc/series-workflow8ldmc-convert-artifact-3433787663/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 19:23:29 +0000 UTC FinishedAt: 2026-09-04 19:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 19:23:29 +0000 UTC FinishedAt: 2026-09-04 19:25:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bcd91a20-6450-4779-9117-b52d35b32f37,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-workflow8ldmc/series-workflow8ldmc-build-action-3319486878/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-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 19:25:40 +0000 UTC FinishedAt: 2026-09-04 19:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 19:25:40 +0000 UTC FinishedAt: 2026-09-04 19:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 19:25:40 +0000 UTC FinishedAt: 2026-09-04 19:42:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 19:25:40 +0000 UTC FinishedAt: 2026-09-04 19:42:25 +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:*8cf6ceb0-4fa4-48a2-8cb2-a6fa9f7bebbc,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-workflow8ldmc/series-workflow8ldmc-convert-artifact-3433787663/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": "bf7e2500-61d3-432a-a69f-4632f96e51fa", "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-workflow8ldmc/series-workflow8ldmc-build-action-1621381667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 19:25:40 +0000 UTC FinishedAt: 2026-09-04 19:42:15 +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:*8cf6ceb0-4fa4-48a2-8cb2-a6fa9f7bebbc,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-workflow8ldmc/series-workflow8ldmc-convert-artifact-3433787663/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": "bf7e2500-61d3-432a-a69f-4632f96e51fa", "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-workflow8ldmc/series-workflow8ldmc-build-action-1621381667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 19:42:25 +0000 UTC FinishedAt: 2026-09-04 19:42:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 19:42:25 +0000 UTC FinishedAt: 2026-09-04 19:42:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 19:42:25 +0000 UTC FinishedAt: 2026-09-04 19:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 19:42:25 +0000 UTC FinishedAt: 2026-09-04 19:44:02 +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:*bf7e2500-61d3-432a-a69f-4632f96e51fa,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-workflow8ldmc/series-workflow8ldmc-build-action-1621381667/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-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 19:44:12 +0000 UTC FinishedAt: 2026-09-04 22:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 19:44:12 +0000 UTC FinishedAt: 2026-09-04 22:47:01 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"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:*bcd91a20-6450-4779-9117-b52d35b32f37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf7e2500-61d3-432a-a69f-4632f96e51fa,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-workflow8ldmc/series-workflow8ldmc-build-action-3319486878/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-workflow8ldmc/series-workflow8ldmc-build-action-1621381667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 19:44:12 +0000 UTC FinishedAt: 2026-09-04 19:44:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 19:44:12 +0000 UTC FinishedAt: 2026-09-04 19:44:17 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"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-workflow8ldmc/series-workflow8ldmc-convert-artifact-3000198856/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 19:44:12 +0000 UTC FinishedAt: 2026-09-04 19:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 19:44:12 +0000 UTC FinishedAt: 2026-09-04 19:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 19:44:13 +0000 UTC FinishedAt: 2026-09-04 19:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 19:44:23 +0000 UTC FinishedAt: 2026-09-04 22:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8ldmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"e20e078a-0589-4df5-814b-a67cb42f8446","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 19:44:23 +0000 UTC FinishedAt: 2026-09-04 22:46:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bcd91a20-6450-4779-9117-b52d35b32f37,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf7e2500-61d3-432a-a69f-4632f96e51fa,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-workflow8ldmc/series-workflow8ldmc-build-action-3319486878/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-workflow8ldmc/series-workflow8ldmc-build-action-1621381667/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-workflow8ldmc/series-workflow8ldmc-convert-artifact-3000198856/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,}