Name: series-workflowpw82l Phase: Succeeded StartedAt: 2026-07-14 07:39:17 +0000 UTC FinishedAt: 2026-07-14 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[0] Phase: Succeeded StartedAt: 2026-07-14 07:39:17 +0000 UTC FinishedAt: 2026-07-14 08:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 07:39:17 +0000 UTC FinishedAt: 2026-07-14 08:03:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arch_bpf_timed_may_goto", "bpf_jit_supports_timed_may_goto" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90aW1lZF9tYXlfZ290byYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NDc2M2M5YmRmYjY3ZDY5NWY2YTQxOTYxZDFiMTk0YWEzZTkzMzM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMDg6MDI6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUgYi9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZVxuaW5kZXggOWExZTVmMGE5NGU1NTkuLjY0NThkNGQ1MTk5MGE3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXG5AQCAtMyw3ICYjNDM7Myw3IEBAXG4gb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvcmUub1xuIFxuIGlmZXEgKCQoQ09ORklHX0FSQ0hfUlY2NEkpLHkpXG4tXHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm9cbiYjNDM7XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbiBlbHNlXG4gXHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDMyLm9cbiBlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBjMDNjMWRlMTZiNzlhYy4uOTgzMmExOTIwMGM3NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMjE1NywzICYjNDM7MjE1Nyw4IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiYjNDM7XG4mIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUyBiL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1NGYzODlkOTIxZTA1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uU1xuQEAgLTAsMCAmIzQzOzEsNDQgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEZlbmcgSmlhbmcgXHUwMDNjamlhbmdmZW5nQGt5bGlub3MuY25cdTAwM2UgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyYW1wb2xpbmUgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZC4gQ3VzdG9tIGNhbGxpbmcgY29udmVudGlvbjpcbiYjNDM7ICpcdC0gaW5wdXQ6ICBzdGFjayBvZmZzZXQgaW4gQlBGX1JFR19BWCAodDApXG4mIzQzOyAqXHQtIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MClcbiYjNDM7ICpcbiYjNDM7ICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcbiYjNDM7ICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxuJiM0MzsgKiBhY3Jvc3MgdGhlIGNhbGw7IEJQRl9SRUdfRlAgKHM1KSBpcyBjYWxsZWUtc2F2ZWQgYW5kIG5lZWRzIG5vIHNhdmluZy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbiYjNDM7XHRhZGRpXHRzcCwgc3AsIC02NFxuJiM0MztcdHNkXHRyYSwgNTYoc3ApXG4mIzQzO1xuJiM0MztcdC8qIFNhdmUgQlBGIHJlZ2lzdGVycyBSMC1SNSAoYTUsIGEwLWE0KSAqL1xuJiM0MztcdHNkXHRhNSwgNDgoc3ApXG4mIzQzO1x0c2RcdGEwLCA0MChzcClcbiYjNDM7XHRzZFx0YTEsIDMyKHNwKVxuJiM0MztcdHNkXHRhMiwgMjQoc3ApXG4mIzQzO1x0c2RcdGEzLCAxNihzcClcbiYjNDM7XHRzZFx0YTQsIDgoc3ApXG4mIzQzO1xuJiM0MztcdGFkZFx0YTAsIHQwLCBzNVxuJiM0MztcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuJiM0MztcdG12XHR0MCwgYTBcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSBCUEYgcmVnaXN0ZXJzIFIwLVI1ICovXG4mIzQzO1x0bGRcdGE0LCA4KHNwKVxuJiM0MztcdGxkXHRhMywgMTYoc3ApXG4mIzQzO1x0bGRcdGEyLCAyNChzcClcbiYjNDM7XHRsZFx0YTEsIDMyKHNwKVxuJiM0MztcdGxkXHRhMCwgNDAoc3ApXG4mIzQzO1x0bGRcdGE1LCA0OChzcClcbiYjNDM7XG4mIzQzO1x0bGRcdHJhLCA1NihzcClcbiYjNDM7XHRhZGRpXHRzcCwgc3AsIDY0XG4mIzQzO1x0cmV0XG4mIzQzO1NZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDkyYmExZDcyZTBlY2U0Li44ZDhlNTNkMzcyNjZjZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5AQCAtNjQsNiAmIzQzOzY0LDcgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuIF9fYXJjaF9zMzkweFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIF9fc3RkZXJyKFwmIzM0O0VSUk9SOiBUaW1lb3V0IGRldGVjdGVkIGZvciBtYXlfZ290byBpbnN0cnVjdGlvblwmIzM0OylcbiBfX3N0ZGVycihcJiMzNDtDUFU6IHt7WzAtOV0mIzQzO319IFVJRDogMCBQSUQ6IHt7WzAtOV0mIzQzO319IENvbW06IHt7Lip9fVwmIzM0OylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuaW5kZXggNGJkZjQyNTZhNDFlNTEuLmY0N2I5ZDU0MGExNzU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7bWF5X2dvdG8gMFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX3MzOTB4XG4gX19hcmNoX2FybTY0XG4mIzQzO19fYXJjaF9yaXNjdjY0XG4gX194bGF0ZWQoXCYjMzQ7MDogcjAgPSAxXCYjMzQ7KVxuIF9feGxhdGVkKFwmIzM0OzE6IGV4aXRcJiMzNDspXG4gX19zdWNjZXNzXG5AQCAtMzEsNiAmIzQzOzMyLDcgQEAgX19kZXNjcmlwdGlvbihcJiMzNDtiYXRjaCAyIG9mIG1heV9nb3RvIDBcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9feGxhdGVkKFwmIzM0OzA6IHIwID0gMVwmIzM0OylcbiBfX3hsYXRlZChcJiMzNDsxOiBleGl0XCYjMzQ7KVxuIF9fc3VjY2Vzc1xuQEAgLTUzLDYgJiM0Mzs1NSw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7bWF5X2dvdG8gYmF0Y2ggd2l0aCBvZmZzZXRzIDIvMS8wXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfczM5MHhcbiBfX2FyY2hfYXJtNjRcbiYjNDM7X19hcmNoX3Jpc2N2NjRcbiBfX3hsYXRlZChcJiMzNDswOiByMCA9IDFcJiMzNDspXG4gX194bGF0ZWQoXCYjMzQ7MTogZXhpdFwmIzM0OylcbiBfX3N1Y2Nlc3NcbkBAIC03OSw2ICYjNDM7ODIsNyBAQCBfX2Rlc2NyaXB0aW9uKFwmIzM0O21heV9nb3RvIGJhdGNoIHdpdGggb2Zmc2V0cyAyLzBcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9feGxhdGVkKFwmIzM0OzA6ICoodTY0ICopKHIxMCAtMTYpID0gNjU1MzVcJiMzNDspXG4gX194bGF0ZWQoXCYjMzQ7MTogKih1NjQgKikocjEwIC04KSA9IDBcJiMzNDspXG4gX194bGF0ZWQoXCYjMzQ7MjogcjEyID0gKih1NjQgKikocjEwIC0xNilcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ3NjNjOWJkZmI2N2Q2OTVmNmE0MTk2MWQxYjE5NGFhM2U5MzMzNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDE0IDA4OjAyOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUgYi9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZQppbmRleCA5YTFlNWYwYTk0ZTU1OS4uNjQ1OGQ0ZDUxOTkwYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlCkBAIC0zLDcgJiM0MzszLDcgQEAKIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb3JlLm8KIAogaWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSkKLQlvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm8KJiM0MzsJb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXA2NC5vIGJwZl90aW1lZF9tYXlfZ290by5vCiBlbHNlCiAJb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAzMi5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggYzAzYzFkZTE2Yjc5YWMuLjk4MzJhMTkyMDBjNzVjIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKQEAgLTIxNTcsMyAmIzQzOzIxNTcsOCBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZCkKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KJiM0MzsKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8odm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TIGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1NGYzODlkOTIxZTA1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMKQEAgLTAsMCAmIzQzOzEsNDQgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBGZW5nIEppYW5nICZsdDtqaWFuZ2ZlbmdAa3lsaW5vcy5jbiZndDsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGlua2FnZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vYXNtLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUcmFtcG9saW5lIGZvciB0aGUgQlBGIHRpbWVkIG1heV9nb3RvIGxvb3AgYm91bmQuIEN1c3RvbSBjYWxsaW5nIGNvbnZlbnRpb246CiYjNDM7ICoJLSBpbnB1dDogIHN0YWNrIG9mZnNldCBpbiBCUEZfUkVHX0FYICh0MCkKJiM0MzsgKgktIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MCkKJiM0MzsgKgomIzQzOyAqIENhbGxzIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggdGhlIHN0YW5kYXJkIFJJU0MtViBBQkksIHdoZXJlCiYjNDM7ICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZAomIzQzOyAqIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCBhbmQgbmVlZHMgbm8gc2F2aW5nLgomIzQzOyAqLwomIzQzOwomIzQzO1NZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKQomIzQzOwlhZGRpCXNwLCBzcCwgLTY0CiYjNDM7CXNkCXJhLCA1NihzcCkKJiM0MzsKJiM0MzsJLyogU2F2ZSBCUEYgcmVnaXN0ZXJzIFIwLVI1IChhNSwgYTAtYTQpICovCiYjNDM7CXNkCWE1LCA0OChzcCkKJiM0MzsJc2QJYTAsIDQwKHNwKQomIzQzOwlzZAlhMSwgMzIoc3ApCiYjNDM7CXNkCWEyLCAyNChzcCkKJiM0MzsJc2QJYTMsIDE2KHNwKQomIzQzOwlzZAlhNCwgOChzcCkKJiM0MzsKJiM0MzsJYWRkCWEwLCB0MCwgczUKJiM0MzsJY2FsbAlicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8KJiM0MzsJbXYJdDAsIGEwCiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgQlBGIHJlZ2lzdGVycyBSMC1SNSAqLwomIzQzOwlsZAlhNCwgOChzcCkKJiM0MzsJbGQJYTMsIDE2KHNwKQomIzQzOwlsZAlhMiwgMjQoc3ApCiYjNDM7CWxkCWExLCAzMihzcCkKJiM0MzsJbGQJYTAsIDQwKHNwKQomIzQzOwlsZAlhNSwgNDgoc3ApCiYjNDM7CiYjNDM7CWxkCXJhLCA1NihzcCkKJiM0MzsJYWRkaQlzcCwgc3AsIDY0CiYjNDM7CXJldAomIzQzO1NZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwppbmRleCA5MmJhMWQ3MmUwZWNlNC4uOGQ4ZTUzZDM3MjY2Y2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKQEAgLTY0LDYgJiM0Mzs2NCw3IEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAogX19hcmNoX3MzOTB4CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogX19zdGRlcnIoJiMzNDtFUlJPUjogVGltZW91dCBkZXRlY3RlZCBmb3IgbWF5X2dvdG8gaW5zdHJ1Y3Rpb24mIzM0OykKIF9fc3RkZXJyKCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX0mIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tYXlfZ290b18xLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jCmluZGV4IDRiZGY0MjU2YTQxZTUxLi5mNDdiOWQ1NDBhMTc1OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7bWF5X2dvdG8gMCYjMzQ7KQogX19hcmNoX3g4Nl82NAogX19hcmNoX3MzOTB4CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX194bGF0ZWQoJiMzNDswOiByMCA9IDEmIzM0OykKIF9feGxhdGVkKCYjMzQ7MTogZXhpdCYjMzQ7KQogX19zdWNjZXNzCkBAIC0zMSw2ICYjNDM7MzIsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7YmF0Y2ggMiBvZiBtYXlfZ290byAwJiMzNDspCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfczM5MHgKIF9fYXJjaF9hcm02NAomIzQzO19fYXJjaF9yaXNjdjY0CiBfX3hsYXRlZCgmIzM0OzA6IHIwID0gMSYjMzQ7KQogX194bGF0ZWQoJiMzNDsxOiBleGl0JiMzNDspCiBfX3N1Y2Nlc3MKQEAgLTUzLDYgJiM0Mzs1NSw3IEBAIF9fZGVzY3JpcHRpb24oJiMzNDttYXlfZ290byBiYXRjaCB3aXRoIG9mZnNldHMgMi8xLzAmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9zMzkweAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9feGxhdGVkKCYjMzQ7MDogcjAgPSAxJiMzNDspCiBfX3hsYXRlZCgmIzM0OzE6IGV4aXQmIzM0OykKIF9fc3VjY2VzcwpAQCAtNzksNiAmIzQzOzgyLDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O21heV9nb3RvIGJhdGNoIHdpdGggb2Zmc2V0cyAyLzAmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9zMzkweAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9feGxhdGVkKCYjMzQ7MDogKih1NjQgKikocjEwIC0xNikgPSA2NTUzNSYjMzQ7KQogX194bGF0ZWQoJiMzNDsxOiAqKHU2NCAqKShyMTAgLTgpID0gMCYjMzQ7KQogX194bGF0ZWQoJiMzNDsyOiByMTIgPSAqKHU2NCAqKShyMTAgLTE2KSYjMzQ7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJJU0MtViBCUEYgSklUIFN1cHBvcnQgZm9yIGBicGZfdGltZWRfbWF5X2dvdG9gIC0gQ29uc2lkZXJhdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGBicGZfdGltZWRfbWF5X2dvdG9gIGluIHRoZSBSSVNDLVYgQlBGIEpJVC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFkZGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgYW4gZXhpc3RpbmcgZmVhdHVyZS4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYE1ha2VmaWxlYCB0byBpbmNsdWRlIHRoZSBuZXcgb2JqZWN0IGZpbGUsIGFuZCBpdCBhZGRzIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydGluZyBmdW5jdGlvbiBhbmQgYXNzZW1ibHkuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgJiMzNDtJcyB0aGlzIGdvaW5nIHRvIGJlIGZ1enplZCBlZmZlY3RpdmVseT8mIzM0Oy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBiZWluZyAqZXhlcmNpc2VkKi4gU3l6a2FsbGVyIGlzIHRoZSBnby10byB0b29sIGZvciBmdXp6aW5nIGFuZCB3aWxsIGNhdGNoIG1hbnkgcG90ZW50aWFsIGlzc3Vlcy4gR2l2ZW4gdGhhdCBTeXprYWxsZXIgZnV6emVzIFJJU0MtViwgdGhpcyBzaG91bGQsIGluIHByaW5jaXBsZSwgYmUgcmVhY2hhYmxlLiBUaGUgY29uZmlncyB0aGF0IGFyZSByZXF1aXJlZCAoYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19BUkNIX1JWNjRJYCkgYXJlIHByZXR0eSBzdGFuZGFyZCBmb3IgZW5hYmxpbmcgdGhlIEpJVCBhbmQgdGFyZ2V0aW5nIHRoZSA2NC1iaXQgUklTQy1WIGFyY2hpdGVjdHVyZS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBjb21wb25lbnRzIGhlcmU6IGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AsIHdoaWNoIGlzIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGF0IEMgY29kZSBhY3R1YWxseSAqY2FsbHMqIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlIHRoYXQgaXQgaXMgdXNlZCBhbmQgaGVuY2UsIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90aW1lZF9tYXlfZ290byYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjUzPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1Ny1cdFx0LypcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE2NTg6XHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1OS1cdFx0ICogdmVyaWZpZXIgYW5kIGNhbGxlZCB3aXRoIGN1c3RvbSBjYWxsaW5nIGNvbnZlbnRpb24gd2l0aFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE2NjEtXHRcdCAqL1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTY2MjpcdFx0aWYgKGZ1bmNfYWRkciAhPSAodTY0KWFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY2My1cdFx0XHRlbWl0KEE2NF9NT1YoMSwgcjAsIEE2NF9SKDApKSwgY3R4KTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01LVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NjpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTctXHQvKiBBbGxvY2F0ZSBzdGFjayBzcGFjZSBhbmQgZW1pdCBmcmFtZSByZWNvcmQgKi9cbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yMC1cdCAqXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyMTpcdCAqIEJlZm9yZSBnZW5lcmF0aW5nIHRoZSBjYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvLCB0aGUgdmVyaWZpZXJcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIyLVx0ICogZ2VuZXJhdGVzIGEgbG9hZCBpbnN0cnVjdGlvbiB1c2luZyBGUCwgaS5lLiBSRUdfQVggPSAqKHU2NCAqKShGUCAtXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXHRyZXRcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQwOlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc2OS1cdFx0XHQvKlxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjE3NzA6XHRcdFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc3MS1cdFx0XHQgKiB2ZXJpZmllciBhbmQgY2FsbGVkIHdpdGggY3VzdG9tIGNhbGxpbmcgY29udmVudGlvbiB3aXRoXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTE3ODItXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTc4MzpcdFx0XHRpZiAoZnVuY19hZGRyID09ICh1NjQpYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzg0LVx0XHRcdFx0cmV0ID0gMDtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTctLypcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6ODogKiBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIHRyYW1wb2xpbmUgZm9yIHBvd2VycGM2NFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy05LSAqXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xOS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MjA6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVx0LyogUHJvbG9ndWU6IHNhdmUgTFIsIGFsbG9jYXRlIGZyYW1lICovXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01Ni1cdGJsclxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo1NzpTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTYtXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNzpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE4LVx0YWRkaVx0c3AsIHNwLCAtNjRcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00My1cdHJldFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDQ6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9ODc2PXN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xODQxLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxODQyOlx0XHRpZiAoKHZvaWQgKilmdW5jID09IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKSB7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE4NDMtXHRcdFx0LypcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTg0NDpcdFx0XHQgKiBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGhhcyBhIHNwZWNpYWwgQUJJOiB0aGVcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTg0NS1cdFx0XHQgKiBwYXJhbWV0ZXJzIGFyZSBpbiBCUEZfUkVHX0FYIGFuZCBCUEZfUkVHXzEwOyB0aGVcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyMjpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjMtXHQvKlxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDQtXHRCUl9FWCAlcjFcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDU6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMC1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMTpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMi1cdEFOTk9UQVRFX05PRU5EQlJcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNTQtXHRSRVRcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo1NTpTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTk0PXZvaWQgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSwgdm9pZCAqY29va2llKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTE5NTp1NjQgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8odm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTExOTYtdTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICopO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMzMjU9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMzMjktXG5rZXJuZWwvYnBmL2NvcmUuYzozMzMwOnU2NCBfX3dlYWsgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMzEte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ4MT1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzY1LVx0XHRcdCAqIHVudGlsIHRoZSB2YWx1ZSBiZWNvbWVzIDAgaW4gQVggKHRodXMsIDEgaW4gc3RhY2spLFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzY2Olx0XHRcdCAqIGFmdGVyIHdoaWNoIHdlIGNhbGwgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8sIHdoaWNoXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NjctXHRcdFx0ICogZWl0aGVyIHNldHMgQVggdG8gMHhmZmZmIHRvIGtlZXAgbG9vcGluZywgb3IgdG8gMFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4My1cdFx0XHQgKiAodG8gYWRkIHRvIHIxMC9mcCksIGFuZCBhbHNvIGFzIHRoZSByZXR1cm4gdmFsdWUgb2Zcbmtlcm5lbC9icGYvZml4dXBzLmM6MTc4NDpcdFx0XHQgKiB0aGUgY2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290by5cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4NS1cdFx0XHQgKi9cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4Ni1cdFx0XHRpbnNuX2J1Zls0XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3ODc6XHRcdFx0aW5zbl9idWZbNV0gPSBCUEZfRU1JVF9DQUxMKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4OC1cdFx0XHRpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFJJU0MtViBCUEYgSklUIEhhbmRsaW5nIG9mIGBtYXlfZ290b2AqKgoKT2theSwgc28gdGhlIEJQRiBKSVQgY2FsbHMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCB3aGVuIGl0IGVuY291bnRlcnMgdGhvc2UgYG1heV9nb3RvYCBpbnN0cnVjdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBsb29raW5nIGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCwgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBleHBsaWNpdCBoYW5kbGluZyBvZiBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIGluIHRoYXQgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uICpzaG91bGQqIGJlIHV0aWxpemVkLCBhY2NvcmRpbmcgdG8gdGhlIGFyY2hpdGVjdHVyZS4gVGhhdCYjMzk7cyB1bnVzdWFsLiBJIGJldHRlciBkb3VibGUtY2hlY2sgYXJvdW5kIHRoZSB1c2Ugb2YgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCB3aXRoaW4gYGJwZl9qaXRfY29tcDY0LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBzb21ldGhpbmcgSSYjMzk7bSBtaXNzaW5nLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9icGZfdGltZWRfbWF5X2dvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTYtXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNzpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE4LVx0YWRkaVx0c3AsIHNwLCAtNjRcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00My1cdHJldFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDQ6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUklTQy1WIEJQRiBKSVQgYW5kIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AqKgoKT2theSwgc28gSSB3YXMgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBSSVNDLVYgSklUIGhhbmRsZXMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYC4gSW5pdGlhbGx5LCBJIGFzc3VtZWQgaXQgd291bGRuJiMzOTt0IHJlcXVpcmUgYW55IHNwZWNpYWwgdHJlYXRtZW50LCB0aGF0IGl0JiMzOTtkIHNpbXBseSBlbWl0IGEgc3RhbmRhcmQgY2FsbCB0byBpdC4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBpcyBhIEJQRiBoZWxwZXIgY2FsbC4gVGhlIHZlcmlmaWVyIGVtaXRzIGBCUEZfRU1JVF9DQUxMKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKWAsIHJpZ2h0PwoKU28sIHRoZSBKSVQgKnNob3VsZCoganVzdCBjb21waWxlIHRoYXQgYXMgYSBub3JtYWwgY2FsbC4gQnV0IGhhbmcgb24sIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaGFzIGEgKmN1c3RvbSogY2FsbGluZyBjb252ZW50aW9uISBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgSklUIGFjY291bnRzIGZvciB0aGlzLgoKTGV0JiMzOTtzIGxvb2sgYXQgYGFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TYC4gQWgsIHllcy4gSXQmIzM5O3MgYSB0cmFtcG9saW5lLiBUaGUgaW5wdXQgaXMgYSBzdGFjayBvZmZzZXQgaW4gYEJQRl9SRUdfQVhgICh0MCksIGFuZCB0aGUgb3V0cHV0IGlzIHRoZSB1cGRhdGVkIGNvdW50LCBhbHNvIGluIGBCUEZfUkVHX0FYYCAodDApLiBJdCBjYWxscyBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cilgLCB3aGVyZSBgcHRyYCBpcyB0aGUgcmVzdWx0IG9mIGBCUEZfUkVHX0ZQYCAoczUpICYjNDM7IGBCUEZfUkVHX0FYYCAodDApLiBCUEYgcmVnaXN0ZXJzIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZCBhY3Jvc3MgdGhlIGNhbGw7IEJQRl9SRUdfRlAgKHM1KSBpcyBjYWxsZWUtc2F2ZWQsIHNvIG5vIHNhdmluZyBpcyBuZWVkZWQuCgpTbywgdGhlIHZlcmlmaWVyIGVtaXRzIGEgY2FsbCB0byBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gLCBhbmQgdGhlIEpJVCB0cmFuc2xhdGVzIHRoaXMgdG8gYSBjYWxsIHRvIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AuIFRoaXMgYWxsIHNlZW1zIGNvcnJlY3QuIEJ1dCBob3cgZXhhY3RseSBkb2VzIHRoZSBKSVQgdHJhbnNsYXRlIGEgY2FsbCB0byBhIGZpeGVkIGFkZHJlc3MgaW4gUklTQy1WPyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzLiBMZXQmIzM5O3MgY2hlY2sgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIHRvIHNlZSBob3cgYEJQRl9DQUxMYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRldGFpbHMgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9DQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTQwNj1zdGF0aWMgdm9pZCBpbml0X3JlZ3ModTggKnJkLCB1OCAqcnMsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQxMi1cdGNhc2UgQlBGX0pNUCB8IEJQRl9KQTpcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NDEzOlx0Y2FzZSBCUEZfSk1QIHwgQlBGX0NBTEw6XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQxNC1cdGNhc2UgQlBGX0pNUCB8IEJQRl9FWElUOlxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTM2OT1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE3ODktXHQvKiBmdW5jdGlvbiBjYWxsICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE3OTA6XHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc5MS1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQ0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxhdGlvbiBmb3IgQ2FsbHMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgQlBGX0pNUCB8IEJQRl9DQUxMYCBpbnN0cnVjdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgaW1wbGVtZW50YXRpb24uIExldCBtZSBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgdHJhbnNsYXRpb24gcHJvY2VzcyB0aGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzcGVjaWZpYyBCUEYgb3Bjb2RlIGlzIG1hcHBlZCB0byBSSVNDLVYgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCB0aGUgaGFuZGxpbmcgb2YgZnVuY3Rpb24gYXJndW1lbnRzLCBhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGUgY2FsbCBpdHNlbGYuIFdoYXQgUklTQy1WIGluc3RydWN0aW9ucyBhcmUgYmVpbmcgdXNlZD8gSG93IGlzIHRoZSByZXR1cm4gYWRkcmVzcyBtYW5hZ2VkPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgYmVpbmcgZG9uZSBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZSBvZiBqdW1wPyBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgQlBGIG9uIHRoaXMgYXJjaGl0ZWN0dXJlIGFuZCBsZXQgbWUgc2VlIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhpcyBjcml0aWNhbCBwYXJ0IG9mIHRoZSBCUEYgZXhlY3V0aW9uIGVuZ2luZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzg5Olx0XHQvKiBmdW5jdGlvbiBjYWxsICovXG4xNzkwOlx0XHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcbjE3OTE6XHRcdHtcbjE3OTI6XHRcdFx0Ym9vbCBmaXhlZF9hZGRyO1xuMTc5MzpcdFx0XHR1NjQgYWRkcjtcbjE3OTQ6XHRcbjE3OTU6XHRcdFx0LyogSW5saW5lIGNhbGxzIHRvIGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpXG4xNzk2Olx0XHRcdCAqXG4xNzk3Olx0XHRcdCAqIFJWX1JFR19UUCBob2xkcyB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBDUFUmIzM5O3MgdGFza19zdHJ1Y3QgYW5kIHRocmVhZF9pbmZvIGlzXG4xNzk4Olx0XHRcdCAqIGF0IG9mZnNldCAwIGluIHRhc2tfc3RydWN0LlxuMTc5OTpcdFx0XHQgKiBMb2FkIGNwdSBmcm9tIHRocmVhZF9pbmZvOlxuMTgwMDpcdFx0XHQgKiAgICAgU2V0IFIwIHRvICgoc3RydWN0IHRocmVhZF9pbmZvICopKFJWX1JFR19UUCkpLVx1MDAzZWNwdVxuMTgwMTpcdFx0XHQgKlxuMTgwMjpcdFx0XHQgKiBUaGlzIHJlcGxpY2F0ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgb24gUklTQ1ZcbjE4MDM6XHRcdFx0ICovXG4xODA0Olx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gMCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X3NtcF9wcm9jZXNzb3JfaWQpIHtcbjE4MDU6XHRcdFx0XHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBSMCAqL1xuMTgwNjpcdFx0XHRcdGVtaXRfbHcoYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzAsIGN0eCksIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSxcbjE4MDc6XHRcdFx0XHRcdFJWX1JFR19UUCwgY3R4KTtcbjE4MDg6XHRcdFx0XHRicmVhaztcbjE4MDk6XHRcdFx0fVxuMTgxMDpcdFxuMTgxMTpcdFx0XHQvKiBJbXBsZW1lbnQgaGVscGVyIGNhbGwgdG8gYnBmX2dldF9jdXJyZW50X3Rhc2svX2J0ZigpIGlubGluZSAqL1xuMTgxMjpcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IDAgXHUwMDI2XHUwMDI2IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrIHx8XG4xODEzOlx0XHRcdFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmKSkge1xuMTgxNDpcdFx0XHRcdGVtaXRfbXYoYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzAsIGN0eCksIFJWX1JFR19UUCwgY3R4KTtcbjE4MTU6XHRcdFx0XHRicmVhaztcbjE4MTY6XHRcdFx0fVxuMTgxNzpcdFxuMTgxODpcdFx0XHRtYXJrX2NhbGwoY3R4KTtcbjE4MTk6XHRcdFx0cmV0ID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC1cdTAwM2Vwcm9nLCBpbnNuLCBleHRyYV9wYXNzLFxuMTgyMDpcdFx0XHRcdFx0XHQgICAgXHUwMDI2YWRkciwgXHUwMDI2Zml4ZWRfYWRkcik7XG4xODIxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xODIyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE4MjM6XHRcbjE4MjQ6XHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbjE4MjU6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuMTgyNjpcdFx0XHRcdGludCBpZHg7XG4xODI3Olx0XG4xODI4Olx0XHRcdFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuMTgyOTpcdFx0XHRcdGlmICghZm0pXG4xODMwOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4MzE6XHRcbjE4MzI6XHRcdFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgZm0tXHUwMDNlbnJfYXJnczsgaWR4JiM0MzsmIzQzOykge1xuMTgzMzpcdFx0XHRcdFx0dTggcmVnID0gYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzEgJiM0MzsgaWR4LCBjdHgpO1xuMTgzNDpcdFxuMTgzNTpcdFx0XHRcdFx0aWYgKGZtLVx1MDAzZWFyZ19zaXplW2lkeF0gPT0gc2l6ZW9mKGludCkpXG4xODM2Olx0XHRcdFx0XHRcdGVtaXRfc2V4dHcocmVnLCByZWcsIGN0eCk7XG4xODM3Olx0XHRcdFx0fVxuMTgzODpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRlY29kaW5nIHRoZSBCUEYgQ2FsbCBJbnN0cnVjdGlvbioqCgpPa2F5LCBzbyBgYnBmX2ppdF9nZXRfZnVuY19hZGRyYCBpcyBnb2luZyB0byBoYW5kIG1lIHRoYXQgYWRkcmVzcywgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0JiMzOTtzIGhvdyB0aGlzIGlzIGdvaW5nIHRvIHdvcmsuIFRoZSBzeXN0ZW0gaXMgc2V0IHVwIHRvIGlzc3VlIGEgY2FsbC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGZsb3cgY29ycmVjdGx5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYEJQRl9KTVAgfCBCUEZfQ0FMTGAuIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgYWxsIGhvb2tlZCB1cC4uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyLiBUaGlzIGluc3RydWN0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzOTpcdFxuMTg0MDpcdFx0XHRyZXQgPSBlbWl0X2NhbGwoYWRkciwgZml4ZWRfYWRkciwgY3R4KTtcbjE4NDE6XHRcdFx0aWYgKHJldClcbjE4NDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTg0MzpcdFxuMTg0NDpcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fQ0FMTClcbjE4NDU6XHRcdFx0XHRlbWl0X212KGJwZl90b19ydl9yZWcoQlBGX1JFR18wLCBjdHgpLCBSVl9SRUdfQTAsIGN0eCk7XG4xODQ2Olx0XHRcdGJyZWFrO1xuMTg0NzpcdFx0fVxuMTg0ODpcdFx0LyogdGFpbCBjYWxsICovXG4xODQ5Olx0XHRjYXNlIEJQRl9KTVAgfCBCUEZfVEFJTF9DQUxMOlxuMTg1MDpcdFx0XHRpZiAoZW1pdF9icGZfdGFpbF9jYWxsKGksIGN0eCkpXG4xODUxOlx0XHRcdFx0cmV0dXJuIC0xO1xuMTg1MjpcdFx0XHRicmVhaztcbjE4NTM6XHRcbjE4NTQ6XHRcdC8qIGZ1bmN0aW9uIHJldHVybiAqL1xuMTg1NTpcdFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XG4xODU2Olx0XHRcdGlmIChpID09IGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEpXG4xODU3Olx0XHRcdFx0YnJlYWs7XG4xODU4Olx0XG4xODU5Olx0XHRcdHJ2b2ZmID0gZXBpbG9ndWVfb2Zmc2V0KGN0eCk7XG4xODYwOlx0XHRcdHJldCA9IGVtaXRfanVtcF9hbmRfbGluayhSVl9SRUdfWkVSTywgcnZvZmYsIHRydWUsIGN0eCk7XG4xODYxOlx0XHRcdGlmIChyZXQpXG4xODYyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE4NjM6XHRcdFx0YnJlYWs7XG4xODY0Olx0XG4xODY1Olx0XHQvKiBkc3QgPSBpbW02NCAqL1xuMTg2NjpcdFx0Y2FzZSBCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXOlxuMTg2NzpcdFx0e1xuMTg2ODpcdFx0XHRzdHJ1Y3QgYnBmX2luc24gaW5zbjEgPSBpbnNuWzFdO1xuMTg2OTpcdFx0XHR1NjQgaW1tNjQ7XG4xODcwOlx0XG4xODcxOlx0XHRcdGltbTY0ID0gKHU2NClpbnNuMS5pbW0gXHUwMDNjXHUwMDNjIDMyIHwgKHUzMilpbW07XG4xODcyOlx0XHRcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcbjE4NzM6XHRcdFx0XHQvKiBmaXhlZC1sZW5ndGggaW5zbnMgZm9yIGV4dHJhIGppdCBwYXNzICovXG4xODc0Olx0XHRcdFx0cmV0ID0gZW1pdF9hZGRyKHJkLCBpbW02NCwgZXh0cmFfcGFzcywgY3R4KTtcbjE4NzU6XHRcdFx0XHRpZiAocmV0KVxuMTg3NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjE4Nzc6XHRcdFx0fSBlbHNlIHtcbjE4Nzg6XHRcdFx0XHRlbWl0X2ltbShyZCwgaW1tNjQsIGN0eCk7XG4xODc5Olx0XHRcdH1cbjE4ODA6XHRcbjE4ODE6XHRcdFx0cmV0dXJuIDE7XG4xODgyOlx0XHR9XG4xODgzOlx0XG4xODg0Olx0XHQvKiBMRFg6IGRzdCA9ICoodW5zaWduZWQgc2l6ZSAqKShzcmMgJiM0Mzsgb2ZmKSAqL1xuMTg4NTpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COlxuMTg4NjpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOlxuMTg4NzpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9XOlxuMTg4ODpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENhbGwgRW1pc3Npb24qKgoKT2theSwgc28gSSBzZWUgdGhpcyBjb2RlIGlzIHNpbXBseSBlbWl0dGluZyBhIGNhbGwgdG8gYGFkZHJgLiBTaW1wbGUgZW5vdWdoLCBidXQgYSByZWQgZmxhZyBqdXN0IHdlbnQgdXAuIEhhbmcgb24sIHRoZSBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIGZ1bmN0aW9uIGFjdHVhbGx5ICpleHBlY3RzKiB0aGUgc3RhY2sgb2Zmc2V0IGluIGBCUEZfUkVHX0FYYCwgd2hpY2ggdHJhbnNsYXRlcyB0byBgdDBgIGluIHRoZSBSSVNDLVYgQlBGIEpJVCwgYW5kIGl0ICphbHNvKiByZXR1cm5zIHRoZSB1cGRhdGVkIGNvdW50IGluIHRoYXQgdmVyeSBzYW1lIHJlZ2lzdGVyLCBgdDBgLiBUaGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIGNvbnRyb2wgZmxvdy4KCkJ1dCB3YWl0IGEgbWludXRl4oCmIHdvbiYjMzk7dCBgZW1pdF9jYWxsYCBwb3RlbnRpYWxseSBjbG9iYmVyIGB0MGA/IFRoYXQmIzM5O3MgYSBtYWpvciBwcm9ibGVtIGlmIGl0IGRvZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgYGVtaXRfY2FsbGAgcHJlc2VydmVzIGB0MGAuIEJldHRlciBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgcHVsbCB1cCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZW1pdF9jYWxsYCB0aGVyZS4gSSBoYXZlIHRvIGNvbmZpcm0gdGhlIHJlZ2lzdGVyIHVzYWdlIHNvIGFzIHRvIGF2b2lkIGEgbmFzdHksIHVuZXhwZWN0ZWQgYnVnLCB0aGF0IHdvdWxkIHRha2UgZm9yZXZlciB0byBkZWJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1pdF9jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTQ0Nz1zdGF0aWMgYm9vbCBpc19zaWduZWRfYnBmX2NvbmQodTggY29uZClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQ1Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NDUzOnN0YXRpYyBpbnQgZW1pdF9jYWxsKHU2NCBhZGRyLCBib29sIGZpeGVkX2FkZHIsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00NTQte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTM3PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk1Mi1cdGVtaXRfYWRkaShSVl9SRUdfQTEsIFJWX1JFR19GUCwgLXJ1bl9jdHhfb2ZmLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NTM6XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClicGZfdHJhbXBvbGluZV9lbnRlcihwKSwgdHJ1ZSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTU0LVx0aWYgKHJldClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk3MS1cdFx0ZW1pdF9pbW0oUlZfUkVHX0ExLCAoY29uc3QgczY0KXAtXHUwMDNlaW5zbnNpLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NzI6XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClwLVx1MDAzZWJwZl9mdW5jLCB0cnVlLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NzMtXHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTkzLVx0ZW1pdF9hZGRpKFJWX1JFR19BMiwgUlZfUkVHX0ZQLCAtcnVuX2N0eF9vZmYsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjk5NDpcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KWJwZl90cmFtcG9saW5lX2V4aXQocCksIHRydWUsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk5NS1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEwMjI9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTExODQtXHRcdGVtaXRfaW1tKFJWX1JFR19BMCwgY3R4LVx1MDAzZWluc25zID8gKGNvbnN0IHM2NClpbSA6IFJWX01BWF9DT1VOVF9JTU0sIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjExODU6XHRcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KV9fYnBmX3RyYW1wX2VudGVyLCB0cnVlLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTg2LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTIyMC1cdFx0cmVzdG9yZV9zdGFja19hcmdzKG5yX2FyZ19zbG90cyAtIFJWX01BWF9SRUdfQVJHUywgYXJnc19vZmYsIHN0a19hcmdfb2ZmLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjIxOlx0XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClvcmlnX2NhbGwsIHRydWUsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyMjItXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjUzLVx0XHRlbWl0X2ltbShSVl9SRUdfQTAsIGN0eC1cdTAwM2VpbnNucyA/IChjb25zdCBzNjQpaW0gOiBSVl9NQVhfQ09VTlRfSU1NLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjU0Olx0XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClfX2JwZl90cmFtcF9leGl0LCB0cnVlLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjU1LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTM2OT1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MzktXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE4NDA6XHRcdHJldCA9IGVtaXRfY2FsbChhZGRyLCBmaXhlZF9hZGRyLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODQxLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMxNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGVtaXRfY2FsbGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwYXJzZSB0aGUgbmFtZSBhbmQgd2hhdCB0aGUgaW5wdXRzIGFyZS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IEkgbWlnaHQgYmUgZXhwZWN0aW5nIGEgY2VydGFpbiBraW5kIG9mIGJlaGF2aW9yLCBidXQgSSByZWFsbHkgaGF2ZSB0byBsb29rIGFuZCBzZWUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgY29yZSBjb21wb25lbnQsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBpdCBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IGlzIHRoZSBpbnRlbmRlZCBvdXRwdXQ/IFRoaXMgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBkaXNwYXRjaGluZyBvciB0cmlnZ2VyaW5nIHNvbWV0aGluZywgc28gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhbiBpbnZlc3RpZ2F0aW9uIG9mIGhvdyB0aGUgY2FsbCYjMzk7cyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IHRoZXkgcmVsYXRlIHRvLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2UuIFByb3BlciBlcnJvciBoYW5kbGluZywgb3IgbGFjayB0aGVyZW9mLCBjYW4gYmUgYSBtYWpvciBzb3VyY2Ugb2Ygc3lzdGVtIHZ1bG5lcmFiaWxpdGllcywgc28gSSYjMzk7bSBwcmltZWQgdG8gbG9vayBmb3IgdGhhdCBpbW1lZGlhdGVseS4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGNsb3NlbHksIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGxpa2UgcmFjZSBjb25kaXRpb25zLCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgb3IgaW5lZmZpY2llbnQgY29kZS4gVGhlbiBhZ2FpbiwgaXQgY291bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8ganVkZ2UgdGhhdCBvbmNlIEkmIzM5O3ZlIGhhZCBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUzOlx0c3RhdGljIGludCBlbWl0X2NhbGwodTY0IGFkZHIsIGJvb2wgZml4ZWRfYWRkciwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4gNDU0Olx0e1xuIDQ1NTpcdFx0czY0IG9mZiA9IDA7XG4gNDU2Olx0XHR1NjQgaXA7XG4gNDU3Olx0XG4gNDU4Olx0XHRpZiAoYWRkciBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWluc25zIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlcm9faW5zbnMpIHtcbiA0NTk6XHRcdFx0LypcbiA0NjA6XHRcdFx0ICogVXNlIHRoZSByb19pbnNucyhSWCkgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgYXMgdGhlIEJQRlxuIDQ2MTpcdFx0XHQgKiBwcm9ncmFtIHdpbGwgZmluYWxseSBydW4gZnJvbSB0aGlzIG1lbW9yeSByZWdpb24uXG4gNDYyOlx0XHRcdCAqL1xuIDQ2MzpcdFx0XHRpcCA9ICh1NjQpKGxvbmcpKGN0eC1cdTAwM2Vyb19pbnNucyAmIzQzOyBjdHgtXHUwMDNlbmluc25zKTtcbiA0NjQ6XHRcdFx0b2ZmID0gYWRkciAtIGlwO1xuIDQ2NTpcdFx0fVxuIDQ2NjpcdFxuIDQ2NzpcdFx0cmV0dXJuIGVtaXRfanVtcF9hbmRfbGluayhSVl9SRUdfUkEsIG9mZiwgZml4ZWRfYWRkciwgY3R4KTtcbiA0Njg6XHR9XG4gNDY5Olx0XG4gNDcwOlx0c3RhdGljIGlubGluZSB2b2lkIGVtaXRfa2NmaSh1MzIgaGFzaCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4gNDcxOlx0e1xuIDQ3MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgYGVtaXRfanVtcF9hbmRfbGlua2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBlbWl0X2p1bXBfYW5kX2xpbmtgLiBJdCYjMzk7cyB1c2luZyBgUlZfUkVHX1JBYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIHRoZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlciwgZ29vZC4gQW5kIGl0JiMzOTtzIG5vdCBtZXNzaW5nIHdpdGggYHQwYCB3aGljaCBpcyBgUlZfUkVHX1QwYCwgc28gaXQmIzM5O3Mgbm90IHN0ZXBwaW5nIG9uIGFueXRoaW5nIHRoYXQgaXQgc2hvdWxkbiYjMzk7dC4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb24gdGhpcyAtIHdoYXQmIzM5O3MgYEJQRl9SRUdfQVhgIGFjdHVhbGx5ICptYXBwZWQqIHRvIGluIHRoZSBSSVNDLVYgcmVnaXN0ZXIgYXJjaGl0ZWN0dXJlPyBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBtYXBwaW5nLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gY2F1c2Ugc29tZSB3ZWlyZCBjb25mbGljdCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHRoaW5nIHRvIGdldCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUkVHX0FYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqRGVsdmluZyBpbnRvIFJJU0MtViBCUEYgSklUIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHJlZ2lzdGVyIGFsbG9jYXRpb24gd29ya3MgZm9yIEJQRiBKSVQgb24gUklTQy1WLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZnVuY3Rpb24gb3IgbWFjcm8gcmVzcG9uc2libGUgZm9yIHRyYW5zbGF0aW5nIEJQRiBpbnN0cnVjdGlvbnMgdG8gUklTQy1WIHJlZ2lzdGVyIGFzc2lnbm1lbnRzLiBUaGUgbmFtZSBgYnBmX3RvX3J2X3JlZ2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBzb21ldGhpbmcgd2l0aCBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24sIGFuZCBpdCYjMzk7cyBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiB0aGUgUklTQy1WIHNwZWNpZmljIG5ldHdvcmtpbmcgY29kZS4gVGhhdCBtZWFucyBJIHNob3VsZCBsb29rIGluIGVpdGhlciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYCwgd2hpY2ggd291bGQgY29udGFpbiB0aGUgZGVjbGFyYXRpb25zLCBvciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHdoaWNoIHdvdWxkIHByb2JhYmx5IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlIGxvY2F0aW9ucywgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBvZmZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmlydHVhbCByZWdpc3RlcnMgbWFwIHRvIHBoeXNpY2FsIFJJU0MtViByZWdpc3RlcnMgZHVyaW5nIEpJVCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUga2V5IHRvIHBlcmZvcm1hbmNlLCByZWFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9SRUdfQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz00Mz1lbnVtIHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU0LVx0QlBGX0FYX0xPLFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo1NTpcdC8qIFN0YWNrIHNwYWNlIGZvciBCUEZfUkVHXzYgdGhyb3VnaCBCUEZfUkVHXzkgYW5kIEJQRl9SRUdfQVguICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU2LVx0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz03MT1zdGF0aWMgY29uc3QgczggYnBmMnJ2MzJbXVsyXSA9IHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTkwLVx0LyogVGVtcG9yYXJ5IHJlZ2lzdGVyIGZvciBibGluZGluZyBjb25zdGFudHMuIFN0b3JlZCBvbiB0aGUgc3RhY2suICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjkxOlx0W0JQRl9SRUdfQVhdID0ge1NUQUNLX09GRlNFVChCUEZfQVhfSEkpLCBTVEFDS19PRkZTRVQoQlBGX0FYX0xPKX0sXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTkyLVx0Lypcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTI5PXN0YXRpYyBjb25zdCBpbnQgcmVnbWFwW10gPSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00MC1cdFtCUEZfUkVHX0ZQXSA9XHRSVl9SRUdfUzUsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjQxOlx0W0JQRl9SRUdfQVhdID1cdFJWX1JFR19UMCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNDItfTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy04LSAqIFRyYW1wb2xpbmUgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZC4gQ3VzdG9tIGNhbGxpbmcgY29udmVudGlvbjpcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjk6ICpcdC0gaW5wdXQ6ICBzdGFjayBvZmZzZXQgaW4gQlBGX1JFR19BWCAodDApXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMDogKlx0LSBvdXRwdXQ6IHVwZGF0ZWQgY291bnQgaW4gQlBGX1JFR19BWCAodDApXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMS0gKlxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTItICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjEzOiAqIHB0ciA9IEJQRl9SRUdfRlAgKHM1KSAmIzQzOyBCUEZfUkVHX0FYICh0MCkuIEJQRiBSMC1SNSAoYTUsIGEwLWE0KSBhcmUgc2F2ZWRcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE0LSAqIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCBhbmQgbmVlZHMgbm8gc2F2aW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSSVNDLVYgQlBGIGBtYXlfZ290b2AgSW1wbGVtZW50YXRpb24gQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIGRvd24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc2V0dGluZyB1cCB0aGUgYG1heV9nb3RvYCBsb29wIGJvdW5kIGNoZWNrIGZvciBSSVNDLVYuIFRoZSBgQlBGX1JFR19BWGAgcmVnaXN0ZXIgaXMgbWFwcGVkIHRvIGBSVl9SRUdfVDBgLCBzbyB0aGUgdmVyaWZpZXIgaXMgZW1pdHRpbmcgdGhpcyBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnM6CgoxLiAgYEJQRl9NT1Y2NF9JTU0oQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudClgOiBUaGlzIG1vdmVzIGFuIGltbWVkaWF0ZSB2YWx1ZSByZXByZXNlbnRpbmcgYW4gb2Zmc2V0IGNvdW50IG9udG8gYHQwYC4KMi4gIGBCUEZfRU1JVF9DQUxMKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKWA6IFRoaXMgaXMgdGhlIGtleS4gVGhlIEpJVCB3aWxsIHRyYW5zbGF0ZSB0aGlzIGludG8gYSBjYWxsIHRvIHRoZSBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIGZ1bmN0aW9uLgozLiAgYEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudClgOiBUaGlzIGluc3RydWN0aW9uIHN0b3JlcyBhIGRvdWJsZS13b3JkIHZhbHVlIGZyb20gYHQwYCB0byBhIG1lbW9yeSBsb2NhdGlvbi4KCk5vdywgdGhlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgYXNzZW1ibHkgaXMgd2hhdCYjMzk7cyByZWFsbHkgaW50ZXJlc3Rpbmc6CgpgYGBhc3NlbWJseQpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bykKCWFkZGkJc3AsIHNwLCAtNjQKCXNkCXJhLCA1NihzcCkKCgkvKiBTYXZlIEJQRiByZWdpc3RlcnMgUjAtUjUgKGE1LCBhMC1hNCkgKi8KCXNkCWE1LCA0OChzcCkKCXNkCWEwLCA0MChzcCkKCXNkCWExLCAzMihzcCkKCXNkCWEyLCAyNChzcCkKCXNkCWEzLCAxNihzcCkKCXNkCWE0LCA4KHNwKQoKCWFkZAlhMCwgdDAsIHM1CgljYWxsCWJwZl9jaGVja190aW1lZF9tYXlfZ290bwoJbXYJdDAsIGEwCgoJLyogUmVzdG9yZSBCUEYgcmVnaXN0ZXJzIFIwLVI1ICovCglsZAlhNCwgOChzcCkKCWxkCWEzLCAxNihzcCkKCWxkCWEyLCAyNChzcCkKCWxkCWExLCAzMihzcCkKCWxkCWEwLCA0MChzcCkKCWxkCWE1LCA0OChzcCkKCglsZAlyYSwgNTYoc3ApCglhZGRpCXNwLCBzcCwgNjQKCXJldApTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pCmBgYAoKVGhpcyBhc3NlbWJseSBzYXZlcyB0aGUgQlBGIHJlZ2lzdGVycyBgUjAtUjVgICh3aGljaCBhcmUgZXF1aXZhbGVudCB0byBgYTUsIGEwLWE0YCBpbiB0aGUgUklTQy1WIGNhbGxpbmcgY29udmVudGlvbikuIFRoZW4sIGl0IGNhbGN1bGF0ZXMgYSB2YWx1ZSwgYGEwID0gdDAgJiM0MzsgczVgLCB3aGljaCBlZmZlY3RpdmVseSBtZWFucyBhZGRpbmcgYEJQRl9SRUdfQVggJiM0MzsgQlBGX1JFR19GUGAsIHBhc3NlcyB0aGlzIHRvIHRoZSBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiwgYW5kIHB1dHMgdGhlIHJlc3VsdCBiYWNrIGludG8gYHQwYCwgYW5kIGZpbmFsbHkgcmVzdG9yZXMgdGhlIEJQRiByZWdpc3RlcnMgYW5kIHJldHVybnMuCgpUaGlzIGlzIGEgcHJldHR5IGNsZWFuIGltcGxlbWVudGF0aW9uIHRvIGVuYWJsZSB0aGUgYG1heV9nb3RvYCBsb29wIGJvdW5kIGNoZWNrIG9uIFJJU0MtViwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkIHRvIHNhZmVseSBleGVjdXRlIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wcyBpbiBCUEYgcHJvZ3JhbXMuCgpTbywgaXMgdGhpcyBjaGFuZ2UgYWN0dWFsbHkgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LCBhc3N1bWluZyB3ZSBsb2FkIGEgQlBGIHByb2dyYW0gdXRpbGl6aW5nIGBtYXlfZ290b2Agb24gYSBSSVNDLVYgc3lzdGVtLgoKQXMgZmFyIGFzIGNvbmZpZ3VyYXRpb25zIGdvLCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklUIGNvbXBpbGVyLCBhbmQgdGhlIHN0YW5kYXJkIFJJU0MtViBjb25maWd1cmF0aW9uIGBDT05GSUdfQVJDSF9SVjY0SWAuIFdlIGFjdHVhbGx5IGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYENPTkZJR19BUkNIX1JWNjRJYCBzaW5jZSBpdCBpcyB0aGUgZGVmYXVsdCA2NC1iaXQgYXJjaGl0ZWN0dXJlIGNvbmZpZywgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuIEFuZCwgb2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgdG8gYmUgYWJsZSB0byBsb2FkIGFueSBCUEYgcHJvZ3JhbXMgaW4gdGhlIGZpcnN0IHBsYWNlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgY2hlY2sgaW4gdGhlIGBhcmNoL3Jpc2N2L25ldC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIEJQRiBzdXBwb3J0LCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29yZS5vXG4gICA0Olx0XG4gICA1Olx0aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcbiAgIDY6XHRcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuICAgNzpcdGVsc2VcbiAgIDg6XHRcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuICAgOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTc3CgkJCQkJCQlvdXRwdXQ6IDE0NwoJCQkJCQkJdGhvdWdodHM6IDg0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQlBGIFRpbWVkIE1heV9Hb3RvIFBhdGNoIGZvciBSSVNDLVYqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIFJJU0MtViBzdXBwb3J0IGZvciB0aGUgYGJwZl90aW1lZF9tYXlfZ290b2AgbG9vcCBib3VuZC4gVGhlIG9ubHkgY29uZmlndXJhdGlvbnMgaW1wYWN0ZWQgaGVyZSBzZWVtIHRvIGJlIGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQVJDSF9SVjY0SWAsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciBhIFJJU0MtViBhZGRpdGlvbi4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBuZXcgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCBhc3NlbWJseS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGZ1enogYXNzZW1ibHkgd2VsbCB0aHJvdWdoIGNvdmVyYWdlLCB0aG91Z2ggaXQgY2FuIGZ1enogdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHRyaWdnZXIgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZXJlJiMzOTtzIGFsc28gYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gLCB3aGljaCB0aGUgcGF0Y2ggYWxzbyBhZGRzLgoKVGhlIHZlcmlmaWVyIGVtaXRzIGEgY2FsbCwgYW5kIHRoZSBKSVQgY29tcGlsZXMgaXQuIFRoZSBDIGZ1bmN0aW9uIGBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9gIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NlbWJseSwgYnV0IHRoaXMgaXNuJiMzOTt0IG1vZGlmaWVkIGluIHRoZSBwYXRjaC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGFkZGluZyBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvYCB0byBgRm9jdXNTeW1ib2xzYCwgYnV0IGl0JiMzOTtzIG5vdCBhY3R1YWxseSBjaGFuZ2VkIGluIHRoaXMgcGF0Y2guCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gIGFuZCBhZGRzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AuIFNpbmNlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaXMgaW4gYXNzZW1ibHksIGl0IG1pZ2h0IG5vdCBoYXZlIGNvdmVyYWdlLiBgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b2AgaXMganVzdCBgcmV0dXJuIHRydWU7YC4gSG1tLiBTbywgaXQmIzM5O3Mgbm90IGEgY29tcGxpY2F0ZWQgZnVuY3Rpb24uCgpObyBvdGhlciBmdW5jdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGZvciBvdGhlciBmaWxlIG1vZGlmaWNhdGlvbnMuIE9rYXksIEkgc2VlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY2AgYXJlIGFsc28gbW9kaWZpZWQuIFNvLCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCwgYWRkaW5nIFJJU0MtViBzdXBwb3J0IGZvciBgYnBmX3RpbWVkX21heV9nb3RvYC4KCkdpdmVuIHRoYXQsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKRm9yIGBFbmFibGVDb25maWdzYCwgYEJQRl9KSVRgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIGBBUkNIX1JWNjRJYCBpcyBzdGFuZGFyZCBmb3IgcmlzY3Y2NCwgc28gaXQmIzM5O3MgYSBnaXZlbi4gQWxzbywgYEJQRl9TWVNDQUxMYCBpcyBuZWNlc3NhcnkgdG8gdXNlIEJQRi4gSSYjMzk7bSBnb2luZyB0byBsaXN0IGp1c3QgYEJQRl9KSVRgLgoKRm9yIGBGb2N1c1N5bWJvbHNgLCBJIGhhdmUgdG8gYmUgc21hcnQgaGVyZS4gVGhlIHByb21wdCBzYXlzIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyB3aXRoIGNvbXBsZXggbG9naWMsIGJ1dCBhdm9pZCBnZW5lcmljIGhvdHBhdGhzLiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGhlcmUgYXJlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgKGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGFzc2VtYmx5LCBpdCYjMzk7cyB3b3J0aCBhIHNob3QsIG1pZ2h0IGhhdmUgc29tZSBpbnN0cnVtZW50YXRpb24pIGFuZCBgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b2AuIEkgd2lsbCBpbmNsdWRlIGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCBhbmQgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYC4KCkxldCBtZSBxdWlja2x5IHJlLWl0ZXJhdGU6IHVzdWFsbHkgYC5TYCBmaWxlcyBhcmUgbm90IGluc3RydW1lbnRlZCBieSBLQ09WIHVubGVzcyBleHBsaWNpdGx5IGVuYWJsZWQsIGFuZCBldmVuIHRoZW4sIGl0JiMzOTtzIHRyaWNreS4gQnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gaW5jbHVkZSBpdC4KCkJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlIHJlYXNvbmluZyBpcyAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgQlBGIHRpbWVkIG1heV9nb3RvIGxvb3AgYm91bmQgb24gUklTQy1WIDY0LWJpdC4gSXQgYWRkcyB0aGUgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8gYXNzZW1ibHkgdHJhbXBvbGluZSBhbmQgZW5hYmxlcyBpdCBpbiB0aGUgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgd2l0aCBtYXlfZ290byBpbnN0cnVjdGlvbnMgb24gUklTQy1WLiYjMzQ7CgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QVJDSF9SVjY0SSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBBcmNoaXRlY3R1cmUgSWRlbnRpZmllcioqCgpIbW0sIHNvIGBBUkNIX1JWNjRJYCBpc24mIzM5O3QgZGVmaW5lZCwgaXMgdGhhdCByaWdodD8gVGhhdCYjMzk7cy4uLiB1bmV4cGVjdGVkLiBPa2F5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGFyY2hpdGVjdHVyZSBjb25maWd1cmF0aW9uIGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uIG9yIHBvdGVudGlhbGx5IGFueSByZWxldmFudCBpbmNsdWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3ltYm9sIGlzIHVuZGVmaW5lZCBiZWZvcmUgSSBnbyBkb3duIGEgcmFiYml0IGhvbGUuIExldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBkZWZpbmVkIG9yIGlmIEkganVzdCBuZWVkIHRvIGFkZCBpdCB0aGVyZS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX1JWNjRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTQwNT1jb25maWcgQVJDSF9SVjMySVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00MTAtXG5hcmNoL3Jpc2N2L0tjb25maWc6NDExOmNvbmZpZyBBUkNIX1JWNjRJXG5hcmNoL3Jpc2N2L0tjb25maWctNDEyLVx0Ym9vbCBcJiMzNDtSVjY0SVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI2NQoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNeXN0ZXJ5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgY291bGQgaGF2ZSBzd29ybiBJIHNhdyB0aGlzIHRoaW5nIOKAkyB3aGF0ZXZlciAmIzM0O3RoaXMgdGhpbmcmIzM0OyBpcywgbGV0JiMzOTtzIGNhbGwgaXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIC0gaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgZmlsZXMuIFNwZWNpZmljYWxseSwgSSByZW1lbWJlciBzZWVpbmcgaXQgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFNvLCB3aGF0IGRpZCBgc2V0LXJlc3VsdHNgIHJlcG9ydD8gVGhhdCBpdCBkb2VzbiYjMzk7dCBleGlzdD8gVGhhdCYjMzk7c+KApiBzdHJhbmdlLiBTb21ldGhpbmcmIzM5O3MgY2xlYXJseSBub3QgcmlnaHQgaGVyZS4KCkFoYSEgUGVyaGFwcyB0aGUgaXNzdWUgaXNuJiMzOTt0IHdoZXRoZXIgdGhlIG9wdGlvbiAqZXhpc3RzKiwgYnV0IGhvdyB0aGUgdG9vbCBpcyBsb29raW5nIGZvciBpdC4gTWF5YmUgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBpc24mIzM5O3QgcHJlY2lzZWx5IHdoYXQgdGhlIHRvb2wgaXMgZXhwZWN0aW5nLiBJcyBpdCBwb3NzaWJsZSB0aGUgdG9vbCBpcyBjaGVja2luZyB0aGUgKmdsb2JhbCogS2NvbmZpZyBmaWxlLCBhbmQgaXTigJlzIGFjdHVhbGx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgZGVmaW5lZCB1bmRlciBzb21ldGhpbmcgbGlrZSBgQVJDSF9SVjY0SWA/IE9yLCBlcXVhbGx5IGxpa2VseSwgdGhpcyBjb3VsZCBiZSBhIHNpbXBsZSBidWcgaW4gdGhlIHRvb2wgaXRzZWxmLiBJ4oCZdmUgc2VlbiB3ZWlyZGVyIHRoaW5ncyBpbiB0aGVzZSBraW5kcyBvZiBlbnZpcm9ubWVudHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgbm90IHdhc3RlIGFueSBtb3JlIHRpbWUgd3Jlc3RsaW5nIHdpdGggdGhpcyByYWJiaXQgaG9sZS4gSSYjMzk7bGwganVzdCBmYWxsIGJhY2sgdG8gdGhlIHRyaWVkIGFuZCB0cnVlIGFwcHJvYWNoIG9mIHVzaW5nIGBCUEZfSklUYC4gVGhhdCBzaG91bGQgd29yay4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgbGF0ZXIgdG8gc2VlIGlmIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjIzLjMxMjQzOTc1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTc4MjI0Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90aW1lZF9tYXlfZ290b1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjIzLjMxMjQ0NjM2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MTkxMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDQ3NjNjOWJkZmI2N2Q2OTVmNmE0MTk2MWQxYjE5NGFhM2U5MzMzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAxNCAwODowMjoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZSBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXFxuaW5kZXggOWExZTVmMGE5NGU1NTkuLjY0NThkNGQ1MTk5MGE3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcXG5AQCAtMyw3ICszLDcgQEBcXG4gb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29yZS5vXFxuIFxcbiBpZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbi1cXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wNjQub1xcbitcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xcbiBlbHNlXFxuIFxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuIGVuZGlmXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggYzAzYzFkZTE2Yjc5YWMuLjk4MzJhMTkyMDBjNzVjIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTIxNTcsMyArMjE1Nyw4IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuK1xcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8odm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUyBiL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU0ZjM4OWQ5MjFlMDVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlNcXG5AQCAtMCwwICsxLDQ0IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBGZW5nIEppYW5nIFxcdTAwM2NqaWFuZ2ZlbmdAa3lsaW5vcy5jblxcdTAwM2UgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW5rYWdlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYXNtLmhcXHUwMDNlXFxuK1xcbisvKlxcbisgKiBUcmFtcG9saW5lIGZvciB0aGUgQlBGIHRpbWVkIG1heV9nb3RvIGxvb3AgYm91bmQuIEN1c3RvbSBjYWxsaW5nIGNvbnZlbnRpb246XFxuKyAqXFx0LSBpbnB1dDogIHN0YWNrIG9mZnNldCBpbiBCUEZfUkVHX0FYICh0MClcXG4rICpcXHQtIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MClcXG4rICpcXG4rICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcXG4rICogcHRyID0gQlBGX1JFR19GUCAoczUpICsgQlBGX1JFR19BWCAodDApLiBCUEYgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkXFxuKyAqIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCBhbmQgbmVlZHMgbm8gc2F2aW5nLlxcbisgKi9cXG4rXFxuK1NZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbitcXHRhZGRpXFx0c3AsIHNwLCAtNjRcXG4rXFx0c2RcXHRyYSwgNTYoc3ApXFxuK1xcbitcXHQvKiBTYXZlIEJQRiByZWdpc3RlcnMgUjAtUjUgKGE1LCBhMC1hNCkgKi9cXG4rXFx0c2RcXHRhNSwgNDgoc3ApXFxuK1xcdHNkXFx0YTAsIDQwKHNwKVxcbitcXHRzZFxcdGExLCAzMihzcClcXG4rXFx0c2RcXHRhMiwgMjQoc3ApXFxuK1xcdHNkXFx0YTMsIDE2KHNwKVxcbitcXHRzZFxcdGE0LCA4KHNwKVxcbitcXG4rXFx0YWRkXFx0YTAsIHQwLCBzNVxcbitcXHRjYWxsXFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuK1xcdG12XFx0dDAsIGEwXFxuK1xcbitcXHQvKiBSZXN0b3JlIEJQRiByZWdpc3RlcnMgUjAtUjUgKi9cXG4rXFx0bGRcXHRhNCwgOChzcClcXG4rXFx0bGRcXHRhMywgMTYoc3ApXFxuK1xcdGxkXFx0YTIsIDI0KHNwKVxcbitcXHRsZFxcdGExLCAzMihzcClcXG4rXFx0bGRcXHRhMCwgNDAoc3ApXFxuK1xcdGxkXFx0YTUsIDQ4KHNwKVxcbitcXG4rXFx0bGRcXHRyYSwgNTYoc3ApXFxuK1xcdGFkZGlcXHRzcCwgc3AsIDY0XFxuK1xcdHJldFxcbitTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbmluZGV4IDkyYmExZDcyZTBlY2U0Li44ZDhlNTNkMzcyNjZjZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG5AQCAtNjQsNiArNjQsNyBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcbiBfX2FyY2hfczM5MHhcXG4rX19hcmNoX3Jpc2N2NjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIF9fc3RkZXJyKFxcXCJFUlJPUjogVGltZW91dCBkZXRlY3RlZCBmb3IgbWF5X2dvdG8gaW5zdHJ1Y3Rpb25cXFwiKVxcbiBfX3N0ZGVycihcXFwiQ1BVOiB7e1swLTldK319IFVJRDogMCBQSUQ6IHt7WzAtOV0rfX0gQ29tbToge3suKn19XFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tYXlfZ290b18xLmNcXG5pbmRleCA0YmRmNDI1NmE0MWU1MS4uZjQ3YjlkNTQwYTE3NTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tYXlfZ290b18xLmNcXG5AQCAtMTEsNiArMTEsNyBAQCBfX2Rlc2NyaXB0aW9uKFxcXCJtYXlfZ290byAwXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbiBfX2FyY2hfczM5MHhcXG4gX19hcmNoX2FybTY0XFxuK19fYXJjaF9yaXNjdjY0XFxuIF9feGxhdGVkKFxcXCIwOiByMCA9IDFcXFwiKVxcbiBfX3hsYXRlZChcXFwiMTogZXhpdFxcXCIpXFxuIF9fc3VjY2Vzc1xcbkBAIC0zMSw2ICszMiw3IEBAIF9fZGVzY3JpcHRpb24oXFxcImJhdGNoIDIgb2YgbWF5X2dvdG8gMFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4gX19hcmNoX3MzOTB4XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX3hsYXRlZChcXFwiMDogcjAgPSAxXFxcIilcXG4gX194bGF0ZWQoXFxcIjE6IGV4aXRcXFwiKVxcbiBfX3N1Y2Nlc3NcXG5AQCAtNTMsNiArNTUsNyBAQCBfX2Rlc2NyaXB0aW9uKFxcXCJtYXlfZ290byBiYXRjaCB3aXRoIG9mZnNldHMgMi8xLzBcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9zMzkweFxcbiBfX2FyY2hfYXJtNjRcXG4rX19hcmNoX3Jpc2N2NjRcXG4gX194bGF0ZWQoXFxcIjA6IHIwID0gMVxcXCIpXFxuIF9feGxhdGVkKFxcXCIxOiBleGl0XFxcIilcXG4gX19zdWNjZXNzXFxuQEAgLTc5LDYgKzgyLDcgQEAgX19kZXNjcmlwdGlvbihcXFwibWF5X2dvdG8gYmF0Y2ggd2l0aCBvZmZzZXRzIDIvMFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4gX19hcmNoX3MzOTB4XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX3hsYXRlZChcXFwiMDogKih1NjQgKikocjEwIC0xNikgPSA2NTUzNVxcXCIpXFxuIF9feGxhdGVkKFxcXCIxOiAqKHU2NCAqKShyMTAgLTgpID0gMFxcXCIpXFxuIF9feGxhdGVkKFxcXCIyOiByMTIgPSAqKHU2NCAqKShyMTAgLTE2KVxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjI0LjA4MjExMzM2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0MDg1MzYxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfYnBmX3RpbWVkX21heV9nb3RvXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDc2M2M5YmRmYjY3ZDY5NWY2YTQxOTYxZDFiMTk0YWEzZTkzMzM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMDg6MDI6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZSBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXG5pbmRleCA5YTFlNWYwYTk0ZTU1OS4uNjQ1OGQ0ZDUxOTkwYTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZVxuKysrIGIvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcbkBAIC0zLDcgKzMsNyBAQFxuIG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xuIFxuIGlmZXEgKCQoQ09ORklHX0FSQ0hfUlY2NEkpLHkpXG4tXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wNjQub1xuK1x0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbiBlbHNlXG4gXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wMzIub1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGMwM2MxZGUxNmI3OWFjLi45ODMyYTE5MjAwYzc1YyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0yMTU3LDMgKzIxNTcsOCBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TIGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU0ZjM4OWQ5MjFlMDVcbi0tLSAvZGV2L251bGxcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TXG5AQCAtMCwwICsxLDQ0IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRmVuZyBKaWFuZyBcdTAwM2NqaWFuZ2ZlbmdAa3lsaW5vcy5jblx1MDAzZSAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9hc20uaFx1MDAzZVxuK1xuKy8qXG4rICogVHJhbXBvbGluZSBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kLiBDdXN0b20gY2FsbGluZyBjb252ZW50aW9uOlxuKyAqXHQtIGlucHV0OiAgc3RhY2sgb2Zmc2V0IGluIEJQRl9SRUdfQVggKHQwKVxuKyAqXHQtIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MClcbisgKlxuKyAqIENhbGxzIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggdGhlIHN0YW5kYXJkIFJJU0MtViBBQkksIHdoZXJlXG4rICogcHRyID0gQlBGX1JFR19GUCAoczUpICsgQlBGX1JFR19BWCAodDApLiBCUEYgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkXG4rICogYWNyb3NzIHRoZSBjYWxsOyBCUEZfUkVHX0ZQIChzNSkgaXMgY2FsbGVlLXNhdmVkIGFuZCBuZWVkcyBubyBzYXZpbmcuXG4rICovXG4rXG4rU1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG4rXHRhZGRpXHRzcCwgc3AsIC02NFxuK1x0c2RcdHJhLCA1NihzcClcbitcbitcdC8qIFNhdmUgQlBGIHJlZ2lzdGVycyBSMC1SNSAoYTUsIGEwLWE0KSAqL1xuK1x0c2RcdGE1LCA0OChzcClcbitcdHNkXHRhMCwgNDAoc3ApXG4rXHRzZFx0YTEsIDMyKHNwKVxuK1x0c2RcdGEyLCAyNChzcClcbitcdHNkXHRhMywgMTYoc3ApXG4rXHRzZFx0YTQsIDgoc3ApXG4rXG4rXHRhZGRcdGEwLCB0MCwgczVcbitcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuK1x0bXZcdHQwLCBhMFxuK1xuK1x0LyogUmVzdG9yZSBCUEYgcmVnaXN0ZXJzIFIwLVI1ICovXG4rXHRsZFx0YTQsIDgoc3ApXG4rXHRsZFx0YTMsIDE2KHNwKVxuK1x0bGRcdGEyLCAyNChzcClcbitcdGxkXHRhMSwgMzIoc3ApXG4rXHRsZFx0YTAsIDQwKHNwKVxuK1x0bGRcdGE1LCA0OChzcClcbitcbitcdGxkXHRyYSwgNTYoc3ApXG4rXHRhZGRpXHRzcCwgc3AsIDY0XG4rXHRyZXRcbitTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCA5MmJhMWQ3MmUwZWNlNC4uOGQ4ZTUzZDM3MjY2Y2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTY0LDYgKzY0LDcgQEAgU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiBfX2FyY2hfczM5MHhcbitfX2FyY2hfcmlzY3Y2NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIF9fc3RkZXJyKFwiRVJST1I6IFRpbWVvdXQgZGV0ZWN0ZWQgZm9yIG1heV9nb3RvIGluc3RydWN0aW9uXCIpXG4gX19zdGRlcnIoXCJDUFU6IHt7WzAtOV0rfX0gVUlEOiAwIFBJRDoge3tbMC05XSt9fSBDb21tOiB7ey4qfX1cIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuaW5kZXggNGJkZjQyNTZhNDFlNTEuLmY0N2I5ZDU0MGExNzU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuQEAgLTExLDYgKzExLDcgQEAgX19kZXNjcmlwdGlvbihcIm1heV9nb3RvIDBcIilcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX3MzOTB4XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX3hsYXRlZChcIjA6IHIwID0gMVwiKVxuIF9feGxhdGVkKFwiMTogZXhpdFwiKVxuIF9fc3VjY2Vzc1xuQEAgLTMxLDYgKzMyLDcgQEAgX19kZXNjcmlwdGlvbihcImJhdGNoIDIgb2YgbWF5X2dvdG8gMFwiKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfczM5MHhcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9feGxhdGVkKFwiMDogcjAgPSAxXCIpXG4gX194bGF0ZWQoXCIxOiBleGl0XCIpXG4gX19zdWNjZXNzXG5AQCAtNTMsNiArNTUsNyBAQCBfX2Rlc2NyaXB0aW9uKFwibWF5X2dvdG8gYmF0Y2ggd2l0aCBvZmZzZXRzIDIvMS8wXCIpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuK19fYXJjaF9yaXNjdjY0XG4gX194bGF0ZWQoXCIwOiByMCA9IDFcIilcbiBfX3hsYXRlZChcIjE6IGV4aXRcIilcbiBfX3N1Y2Nlc3NcbkBAIC03OSw2ICs4Miw3IEBAIF9fZGVzY3JpcHRpb24oXCJtYXlfZ290byBiYXRjaCB3aXRoIG9mZnNldHMgMi8wXCIpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuK19fYXJjaF9yaXNjdjY0XG4gX194bGF0ZWQoXCIwOiAqKHU2NCAqKShyMTAgLTE2KSA9IDY1NTM1XCIpXG4gX194bGF0ZWQoXCIxOiAqKHU2NCAqKShyMTAgLTgpID0gMFwiKVxuIF9feGxhdGVkKFwiMjogcjEyID0gKih1NjQgKikocjEwIC0xNilcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjI0LjA4MjExNzI0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDkwNDIzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUklTQy1WIEJQRiBKSVQgU3VwcG9ydCBmb3IgYGJwZl90aW1lZF9tYXlfZ290b2AgLSBDb25zaWRlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGBicGZfdGltZWRfbWF5X2dvdG9gIGluIHRoZSBSSVNDLVYgQlBGIEpJVC4gRXNzZW50aWFsbHksIGl0J3MgYWRkaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdXBwb3J0IGZvciBhbiBleGlzdGluZyBmZWF0dXJlLiBMZXQncyBicmVhayBpdCBkb3duOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBNYWtlZmlsZWAgdG8gaW5jbHVkZSB0aGUgbmV3IG9iamVjdCBmaWxlLCBhbmQgaXQgYWRkcyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnRpbmcgZnVuY3Rpb24gYW5kIGFzc2VtYmx5LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgXCJJcyB0aGlzIGdvaW5nIHRvIGJlIGZ1enplZCBlZmZlY3RpdmVseT9cIi5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nICpleGVyY2lzZWQqLiBTeXprYWxsZXIgaXMgdGhlIGdvLXRvIHRvb2wgZm9yIGZ1enppbmcgYW5kIHdpbGwgY2F0Y2ggbWFueSBwb3RlbnRpYWwgaXNzdWVzLiBHaXZlbiB0aGF0IFN5emthbGxlciBmdXp6ZXMgUklTQy1WLCB0aGlzIHNob3VsZCwgaW4gcHJpbmNpcGxlLCBiZSByZWFjaGFibGUuIFRoZSBjb25maWdzIHRoYXQgYXJlIHJlcXVpcmVkIChgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0FSQ0hfUlY2NElgKSBhcmUgcHJldHR5IHN0YW5kYXJkIGZvciBlbmFibGluZyB0aGUgSklUIGFuZCB0YXJnZXRpbmcgdGhlIDY0LWJpdCBSSVNDLVYgYXJjaGl0ZWN0dXJlLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBjb21wb25lbnRzIGhlcmU6IGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AsIHdoaWNoIGlzIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGF0IEMgY29kZSBhY3R1YWxseSAqY2FsbHMqIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEknbSBnb2luZyB0byBxdWlja2x5IHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyB1c2VkIGFuZCBoZW5jZSwgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6MzEuNTMxMTYyMzU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ0ODUxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9icGZfdGltZWRfbWF5X2dvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTI1Mz1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1Ny1cXHRcXHQvKlxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE2NTg6XFx0XFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1OS1cXHRcXHQgKiB2ZXJpZmllciBhbmQgY2FsbGVkIHdpdGggY3VzdG9tIGNhbGxpbmcgY29udmVudGlvbiB3aXRoXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xNjYxLVxcdFxcdCAqL1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE2NjI6XFx0XFx0aWYgKGZ1bmNfYWRkciAhPSAodTY0KWFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE2NjMtXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDEsIHIwLCBBNjRfUigwKSksIGN0eCk7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjY6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNy1cXHQvKiBBbGxvY2F0ZSBzdGFjayBzcGFjZSBhbmQgZW1pdCBmcmFtZSByZWNvcmQgKi9cXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIwLVxcdCAqXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MjE6XFx0ICogQmVmb3JlIGdlbmVyYXRpbmcgdGhlIGNhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8sIHRoZSB2ZXJpZmllclxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIyLVxcdCAqIGdlbmVyYXRlcyBhIGxvYWQgaW5zdHJ1Y3Rpb24gdXNpbmcgRlAsIGkuZS4gUkVHX0FYID0gKih1NjQgKikoRlAgLVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXFx0cmV0XFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDA6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk2Nz1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc2OS1cXHRcXHRcXHQvKlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxNzcwOlxcdFxcdFxcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzcxLVxcdFxcdFxcdCAqIHZlcmlmaWVyIGFuZCBjYWxsZWQgd2l0aCBjdXN0b20gY2FsbGluZyBjb252ZW50aW9uIHdpdGhcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzgyLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxNzgzOlxcdFxcdFxcdGlmIChmdW5jX2FkZHIgPT0gKHU2NClhcmNoX2JwZl90aW1lZF9tYXlfZ290bykge1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzg0LVxcdFxcdFxcdFxcdHJldCA9IDA7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTctLypcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjg6ICogYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSB0cmFtcG9saW5lIGZvciBwb3dlcnBjNjRcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTktICpcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTktXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyMDpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVxcdC8qIFByb2xvZ3VlOiBzYXZlIExSLCBhbGxvY2F0ZSBmcmFtZSAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01Ni1cXHRibHJcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjU3OlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE2LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjE3OlNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE4LVxcdGFkZGlcXHRzcCwgc3AsIC02NFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDMtXFx0cmV0XFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDQ6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz04NzY9c3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTg0MS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE4NDI6XFx0XFx0aWYgKCh2b2lkICopZnVuYyA9PSBhcmNoX2JwZl90aW1lZF9tYXlfZ290bykge1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTg0My1cXHRcXHRcXHQvKlxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTg0NDpcXHRcXHRcXHQgKiBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGhhcyBhIHNwZWNpYWwgQUJJOiB0aGVcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE4NDUtXFx0XFx0XFx0ICogcGFyYW1ldGVycyBhcmUgaW4gQlBGX1JFR19BWCBhbmQgQlBGX1JFR18xMDsgdGhlXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVxcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MjI6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yMy1cXHQvKlxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00NC1cXHRCUl9FWCAlcjFcXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQ1OlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMC1cXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MTE6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEyLVxcdEFOTk9UQVRFX05PRU5EQlJcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01NC1cXHRSRVRcXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NTU6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTk0PXZvaWQgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSwgdm9pZCAqY29va2llKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExOTU6dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5Ni11NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzI1PWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8odm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMjktXFxua2VybmVsL2JwZi9jb3JlLmM6MzMzMDp1NjQgX193ZWFrIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpXFxua2VybmVsL2JwZi9jb3JlLmMtMzMzMS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0ODE9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzY1LVxcdFxcdFxcdCAqIHVudGlsIHRoZSB2YWx1ZSBiZWNvbWVzIDAgaW4gQVggKHRodXMsIDEgaW4gc3RhY2spLFxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTc2NjpcXHRcXHRcXHQgKiBhZnRlciB3aGljaCB3ZSBjYWxsIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvLCB3aGljaFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc2Ny1cXHRcXHRcXHQgKiBlaXRoZXIgc2V0cyBBWCB0byAweGZmZmYgdG8ga2VlcCBsb29waW5nLCBvciB0byAwXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3ODMtXFx0XFx0XFx0ICogKHRvIGFkZCB0byByMTAvZnApLCBhbmQgYWxzbyBhcyB0aGUgcmV0dXJuIHZhbHVlIG9mXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzg0OlxcdFxcdFxcdCAqIHRoZSBjYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4NS1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3ODYtXFx0XFx0XFx0aW5zbl9idWZbNF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTc4NzpcXHRcXHRcXHRpbnNuX2J1Zls1XSA9IEJQRl9FTUlUX0NBTEwoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4OC1cXHRcXHRcXHRpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjM2LjMzNTY1OTI5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjU0NzA3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBSSVNDLVYgQlBGIEpJVCBIYW5kbGluZyBvZiBgbWF5X2dvdG9gKipcblxuT2theSwgc28gdGhlIEJQRiBKSVQgY2FsbHMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCB3aGVuIGl0IGVuY291bnRlcnMgdGhvc2UgYG1heV9nb3RvYCBpbnN0cnVjdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBsb29raW5nIGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCwgSSdtIG5vdCBzZWVpbmcgYW55IGV4cGxpY2l0IGhhbmRsaW5nIG9mIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaW4gdGhhdCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24gKnNob3VsZCogYmUgdXRpbGl6ZWQsIGFjY29yZGluZyB0byB0aGUgYXJjaGl0ZWN0dXJlLiBUaGF0J3MgdW51c3VhbC4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGFyb3VuZCB0aGUgdXNlIG9mIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2Agd2l0aGluIGBicGZfaml0X2NvbXA2NC5jYCB0byBzZWUgaWYgdGhlcmUncyBzb21ldGhpbmcgSSdtIG1pc3NpbmcuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo0MC4zMDExMzI0NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MjYxMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfYnBmX3RpbWVkX21heV9nb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNzpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xOC1cXHRhZGRpXFx0c3AsIHNwLCAtNjRcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQzLVxcdHJldFxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQ0OlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6NDAuNDkwNDAxMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM2MjY5OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBCUEYgSklUIGFuZCBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gKipcblxuT2theSwgc28gSSB3YXMgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBSSVNDLVYgSklUIGhhbmRsZXMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYC4gSW5pdGlhbGx5LCBJIGFzc3VtZWQgaXQgd291bGRuJ3QgcmVxdWlyZSBhbnkgc3BlY2lhbCB0cmVhdG1lbnQsIHRoYXQgaXQnZCBzaW1wbHkgZW1pdCBhIHN0YW5kYXJkIGNhbGwgdG8gaXQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaXMgYSBCUEYgaGVscGVyIGNhbGwuIFRoZSB2ZXJpZmllciBlbWl0cyBgQlBGX0VNSVRfQ0FMTChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylgLCByaWdodD9cblxuU28sIHRoZSBKSVQgKnNob3VsZCoganVzdCBjb21waWxlIHRoYXQgYXMgYSBub3JtYWwgY2FsbC4gQnV0IGhhbmcgb24sIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaGFzIGEgKmN1c3RvbSogY2FsbGluZyBjb252ZW50aW9uISBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgSklUIGFjY291bnRzIGZvciB0aGlzLlxuXG5MZXQncyBsb29rIGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uU2AuIEFoLCB5ZXMuIEl0J3MgYSB0cmFtcG9saW5lLiBUaGUgaW5wdXQgaXMgYSBzdGFjayBvZmZzZXQgaW4gYEJQRl9SRUdfQVhgICh0MCksIGFuZCB0aGUgb3V0cHV0IGlzIHRoZSB1cGRhdGVkIGNvdW50LCBhbHNvIGluIGBCUEZfUkVHX0FYYCAodDApLiBJdCBjYWxscyBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cilgLCB3aGVyZSBgcHRyYCBpcyB0aGUgcmVzdWx0IG9mIGBCUEZfUkVHX0ZQYCAoczUpICsgYEJQRl9SRUdfQVhgICh0MCkuIEJQRiByZWdpc3RlcnMgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCwgc28gbm8gc2F2aW5nIGlzIG5lZWRlZC5cblxuU28sIHRoZSB2ZXJpZmllciBlbWl0cyBhIGNhbGwgdG8gYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCwgYW5kIHRoZSBKSVQgdHJhbnNsYXRlcyB0aGlzIHRvIGEgY2FsbCB0byBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gLiBUaGlzIGFsbCBzZWVtcyBjb3JyZWN0LiBCdXQgaG93IGV4YWN0bHkgZG9lcyB0aGUgSklUIHRyYW5zbGF0ZSBhIGNhbGwgdG8gYSBmaXhlZCBhZGRyZXNzIGluIFJJU0MtVj8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcy4gTGV0J3MgY2hlY2sgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIHRvIHNlZSBob3cgYEJQRl9DQUxMYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXRhaWxzIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI5MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo0Ny42MjY2NzMwMzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNjU5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz00MDY9c3RhdGljIHZvaWQgaW5pdF9yZWdzKHU4ICpyZCwgdTggKnJzLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQxMi1cXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkE6XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo0MTM6XFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0NBTEw6XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00MTQtXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE3ODktXFx0LyogZnVuY3Rpb24gY2FsbCAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTc5MDpcXHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE3OTEtXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo0OC4xNTczNDE3MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk1NDY4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGF0aW9uIGZvciBDYWxscyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYEJQRl9KTVAgfCBCUEZfQ0FMTGAgaW5zdHJ1Y3Rpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFJJU0MtViBCUEYgSklUIGNvbXBpbGVyLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQgbWUgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MgdGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3BlY2lmaWMgQlBGIG9wY29kZSBpcyBtYXBwZWQgdG8gUklTQy1WIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgdGhlIGhhbmRsaW5nIG9mIGZ1bmN0aW9uIGFyZ3VtZW50cywgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGNhbGwgaXRzZWxmLiBXaGF0IFJJU0MtViBpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIHVzZWQ/IEhvdyBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgbWFuYWdlZD8gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIGJlaW5nIGRvbmUgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHR5cGUgb2YganVtcD8gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIEJQRiBvbiB0aGlzIGFyY2hpdGVjdHVyZSBhbmQgbGV0IG1lIHNlZSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQncyBzZWUgaG93IHRoZXkndmUgYXBwcm9hY2hlZCB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIEJQRiBleGVjdXRpb24gZW5naW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQ0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6NTIuMDUyODEzMDU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3ODksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3ODk6XFx0XFx0LyogZnVuY3Rpb24gY2FsbCAqL1xcbjE3OTA6XFx0XFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0NBTEw6XFxuMTc5MTpcXHRcXHR7XFxuMTc5MjpcXHRcXHRcXHRib29sIGZpeGVkX2FkZHI7XFxuMTc5MzpcXHRcXHRcXHR1NjQgYWRkcjtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0XFx0LyogSW5saW5lIGNhbGxzIHRvIGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpXFxuMTc5NjpcXHRcXHRcXHQgKlxcbjE3OTc6XFx0XFx0XFx0ICogUlZfUkVHX1RQIGhvbGRzIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IENQVSdzIHRhc2tfc3RydWN0IGFuZCB0aHJlYWRfaW5mbyBpc1xcbjE3OTg6XFx0XFx0XFx0ICogYXQgb2Zmc2V0IDAgaW4gdGFza19zdHJ1Y3QuXFxuMTc5OTpcXHRcXHRcXHQgKiBMb2FkIGNwdSBmcm9tIHRocmVhZF9pbmZvOlxcbjE4MDA6XFx0XFx0XFx0ICogICAgIFNldCBSMCB0byAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShSVl9SRUdfVFApKS1cXHUwMDNlY3B1XFxuMTgwMTpcXHRcXHRcXHQgKlxcbjE4MDI6XFx0XFx0XFx0ICogVGhpcyByZXBsaWNhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIG9uIFJJU0NWXFxuMTgwMzpcXHRcXHRcXHQgKi9cXG4xODA0OlxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IDAgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkKSB7XFxuMTgwNTpcXHRcXHRcXHRcXHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBSMCAqL1xcbjE4MDY6XFx0XFx0XFx0XFx0ZW1pdF9sdyhicGZfdG9fcnZfcmVnKEJQRl9SRUdfMCwgY3R4KSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLFxcbjE4MDc6XFx0XFx0XFx0XFx0XFx0UlZfUkVHX1RQLCBjdHgpO1xcbjE4MDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTgwOTpcXHRcXHRcXHR9XFxuMTgxMDpcXHRcXG4xODExOlxcdFxcdFxcdC8qIEltcGxlbWVudCBoZWxwZXIgY2FsbCB0byBicGZfZ2V0X2N1cnJlbnRfdGFzay9fYnRmKCkgaW5saW5lICovXFxuMTgxMjpcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSAwIFxcdTAwMjZcXHUwMDI2IChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X2N1cnJlbnRfdGFzayB8fFxcbjE4MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmKSkge1xcbjE4MTQ6XFx0XFx0XFx0XFx0ZW1pdF9tdihicGZfdG9fcnZfcmVnKEJQRl9SRUdfMCwgY3R4KSwgUlZfUkVHX1RQLCBjdHgpO1xcbjE4MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTgxNjpcXHRcXHRcXHR9XFxuMTgxNzpcXHRcXG4xODE4OlxcdFxcdFxcdG1hcmtfY2FsbChjdHgpO1xcbjE4MTk6XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC1cXHUwMDNlcHJvZywgaW5zbiwgZXh0cmFfcGFzcyxcXG4xODIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWRkciwgXFx1MDAyNmZpeGVkX2FkZHIpO1xcbjE4MjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTgyMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MjM6XFx0XFxuMTgyNDpcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcXG4xODI1OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XFxuMTgyNjpcXHRcXHRcXHRcXHRpbnQgaWR4O1xcbjE4Mjc6XFx0XFxuMTgyODpcXHRcXHRcXHRcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXFx1MDAzZXByb2csIGluc24pO1xcbjE4Mjk6XFx0XFx0XFx0XFx0aWYgKCFmbSlcXG4xODMwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIGZtLVxcdTAwM2Vucl9hcmdzOyBpZHgrKykge1xcbjE4MzM6XFx0XFx0XFx0XFx0XFx0dTggcmVnID0gYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzEgKyBpZHgsIGN0eCk7XFxuMTgzNDpcXHRcXG4xODM1OlxcdFxcdFxcdFxcdFxcdGlmIChmbS1cXHUwMDNlYXJnX3NpemVbaWR4XSA9PSBzaXplb2YoaW50KSlcXG4xODM2OlxcdFxcdFxcdFxcdFxcdFxcdGVtaXRfc2V4dHcocmVnLCByZWcsIGN0eCk7XFxuMTgzNzpcXHRcXHRcXHRcXHR9XFxuMTgzODpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjUyLjA1MzA2ODI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA3MTg4NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29kaW5nIHRoZSBCUEYgQ2FsbCBJbnN0cnVjdGlvbioqXG5cbk9rYXksIHNvIGBicGZfaml0X2dldF9mdW5jX2FkZHJgIGlzIGdvaW5nIHRvIGhhbmQgbWUgdGhhdCBhZGRyZXNzLCB0aGF0J3MgdGhlIGtleS4gVGhhdCdzIGhvdyB0aGlzIGlzIGdvaW5nIHRvIHdvcmsuIFRoZSBzeXN0ZW0gaXMgc2V0IHVwIHRvIGlzc3VlIGEgY2FsbC4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBmbG93IGNvcnJlY3RseS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBCUEZfSk1QIHwgQlBGX0NBTExgLiBMZXQncyBzZWUgaG93IHRoYXQncyBhbGwgaG9va2VkIHVwLi4uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgY29tZXMgdG9nZXRoZXIuIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxOCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6NTUuMTYwMjU5NjQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4Mzk6XFx0XFxuMTg0MDpcXHRcXHRcXHRyZXQgPSBlbWl0X2NhbGwoYWRkciwgZml4ZWRfYWRkciwgY3R4KTtcXG4xODQxOlxcdFxcdFxcdGlmIChyZXQpXFxuMTg0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4NDM6XFx0XFxuMTg0NDpcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0NBTEwpXFxuMTg0NTpcXHRcXHRcXHRcXHRlbWl0X212KGJwZl90b19ydl9yZWcoQlBGX1JFR18wLCBjdHgpLCBSVl9SRUdfQTAsIGN0eCk7XFxuMTg0NjpcXHRcXHRcXHRicmVhaztcXG4xODQ3OlxcdFxcdH1cXG4xODQ4OlxcdFxcdC8qIHRhaWwgY2FsbCAqL1xcbjE4NDk6XFx0XFx0Y2FzZSBCUEZfSk1QIHwgQlBGX1RBSUxfQ0FMTDpcXG4xODUwOlxcdFxcdFxcdGlmIChlbWl0X2JwZl90YWlsX2NhbGwoaSwgY3R4KSlcXG4xODUxOlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4xODUyOlxcdFxcdFxcdGJyZWFrO1xcbjE4NTM6XFx0XFxuMTg1NDpcXHRcXHQvKiBmdW5jdGlvbiByZXR1cm4gKi9cXG4xODU1OlxcdFxcdGNhc2UgQlBGX0pNUCB8IEJQRl9FWElUOlxcbjE4NTY6XFx0XFx0XFx0aWYgKGkgPT0gY3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gLSAxKVxcbjE4NTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTg1ODpcXHRcXG4xODU5OlxcdFxcdFxcdHJ2b2ZmID0gZXBpbG9ndWVfb2Zmc2V0KGN0eCk7XFxuMTg2MDpcXHRcXHRcXHRyZXQgPSBlbWl0X2p1bXBfYW5kX2xpbmsoUlZfUkVHX1pFUk8sIHJ2b2ZmLCB0cnVlLCBjdHgpO1xcbjE4NjE6XFx0XFx0XFx0aWYgKHJldClcXG4xODYyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTg2MzpcXHRcXHRcXHRicmVhaztcXG4xODY0OlxcdFxcbjE4NjU6XFx0XFx0LyogZHN0ID0gaW1tNjQgKi9cXG4xODY2OlxcdFxcdGNhc2UgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVzpcXG4xODY3OlxcdFxcdHtcXG4xODY4OlxcdFxcdFxcdHN0cnVjdCBicGZfaW5zbiBpbnNuMSA9IGluc25bMV07XFxuMTg2OTpcXHRcXHRcXHR1NjQgaW1tNjQ7XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdFxcdGltbTY0ID0gKHU2NClpbnNuMS5pbW0gXFx1MDAzY1xcdTAwM2MgMzIgfCAodTMyKWltbTtcXG4xODcyOlxcdFxcdFxcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcXG4xODczOlxcdFxcdFxcdFxcdC8qIGZpeGVkLWxlbmd0aCBpbnNucyBmb3IgZXh0cmEgaml0IHBhc3MgKi9cXG4xODc0OlxcdFxcdFxcdFxcdHJldCA9IGVtaXRfYWRkcihyZCwgaW1tNjQsIGV4dHJhX3Bhc3MsIGN0eCk7XFxuMTg3NTpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjE4NzY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xODc3OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTg3ODpcXHRcXHRcXHRcXHRlbWl0X2ltbShyZCwgaW1tNjQsIGN0eCk7XFxuMTg3OTpcXHRcXHRcXHR9XFxuMTg4MDpcXHRcXG4xODgxOlxcdFxcdFxcdHJldHVybiAxO1xcbjE4ODI6XFx0XFx0fVxcbjE4ODM6XFx0XFxuMTg4NDpcXHRcXHQvKiBMRFg6IGRzdCA9ICoodW5zaWduZWQgc2l6ZSAqKShzcmMgKyBvZmYpICovXFxuMTg4NTpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0I6XFxuMTg4NjpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6XFxuMTg4NzpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6XFxuMTg4ODpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo1NS4xNjA1Mjc5MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNzc5MTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ2FsbCBFbWlzc2lvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSBpcyBzaW1wbHkgZW1pdHRpbmcgYSBjYWxsIHRvIGBhZGRyYC4gU2ltcGxlIGVub3VnaCwgYnV0IGEgcmVkIGZsYWcganVzdCB3ZW50IHVwLiBIYW5nIG9uLCB0aGUgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiBhY3R1YWxseSAqZXhwZWN0cyogdGhlIHN0YWNrIG9mZnNldCBpbiBgQlBGX1JFR19BWGAsIHdoaWNoIHRyYW5zbGF0ZXMgdG8gYHQwYCBpbiB0aGUgUklTQy1WIEJQRiBKSVQsIGFuZCBpdCAqYWxzbyogcmV0dXJucyB0aGUgdXBkYXRlZCBjb3VudCBpbiB0aGF0IHZlcnkgc2FtZSByZWdpc3RlciwgYHQwYC4gVGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIGNvbnRyb2wgZmxvdy5cblxuQnV0IHdhaXQgYSBtaW51dGXigKYgd29uJ3QgYGVtaXRfY2FsbGAgcG90ZW50aWFsbHkgY2xvYmJlciBgdDBgPyBUaGF0J3MgYSBtYWpvciBwcm9ibGVtIGlmIGl0IGRvZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgYGVtaXRfY2FsbGAgcHJlc2VydmVzIGB0MGAuIEJldHRlciBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQncyBwdWxsIHVwIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBlbWl0X2NhbGxgIHRoZXJlLiBJIGhhdmUgdG8gY29uZmlybSB0aGUgcmVnaXN0ZXIgdXNhZ2Ugc28gYXMgdG8gYXZvaWQgYSBuYXN0eSwgdW5leHBlY3RlZCBidWcsIHRoYXQgd291bGQgdGFrZSBmb3JldmVyIHRvIGRlYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjU5LjU3ODMyMTkwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNTU5NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtaXRfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9NDQ3PXN0YXRpYyBib29sIGlzX3NpZ25lZF9icGZfY29uZCh1OCBjb25kKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00NTItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo0NTM6c3RhdGljIGludCBlbWl0X2NhbGwodTY0IGFkZHIsIGJvb2wgZml4ZWRfYWRkciwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00NTQte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz05Mzc9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLCBpbnQgYXJnc19vZmYsIGludCByZXR2YWxfb2ZmLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NTItXFx0ZW1pdF9hZGRpKFJWX1JFR19BMSwgUlZfUkVHX0ZQLCAtcnVuX2N0eF9vZmYsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NTM6XFx0cmV0ID0gZW1pdF9jYWxsKChjb25zdCB1NjQpYnBmX3RyYW1wb2xpbmVfZW50ZXIocCksIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NTQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTcxLVxcdFxcdGVtaXRfaW1tKFJWX1JFR19BMSwgKGNvbnN0IHM2NClwLVxcdTAwM2VpbnNuc2ksIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NzI6XFx0cmV0ID0gZW1pdF9jYWxsKChjb25zdCB1NjQpcC1cXHUwMDNlYnBmX2Z1bmMsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NzMtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTkzLVxcdGVtaXRfYWRkaShSVl9SRUdfQTIsIFJWX1JFR19GUCwgLXJ1bl9jdHhfb2ZmLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6OTk0OlxcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KWJwZl90cmFtcG9saW5lX2V4aXQocCksIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05OTUtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEwMjI9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE4NC1cXHRcXHRlbWl0X2ltbShSVl9SRUdfQTAsIGN0eC1cXHUwMDNlaW5zbnMgPyAoY29uc3QgczY0KWltIDogUlZfTUFYX0NPVU5UX0lNTSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjExODU6XFx0XFx0cmV0ID0gZW1pdF9jYWxsKChjb25zdCB1NjQpX19icGZfdHJhbXBfZW50ZXIsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTg2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyMjAtXFx0XFx0cmVzdG9yZV9zdGFja19hcmdzKG5yX2FyZ19zbG90cyAtIFJWX01BWF9SRUdfQVJHUywgYXJnc19vZmYsIHN0a19hcmdfb2ZmLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTIyMTpcXHRcXHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClvcmlnX2NhbGwsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjIyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyNTMtXFx0XFx0ZW1pdF9pbW0oUlZfUkVHX0EwLCBjdHgtXFx1MDAzZWluc25zID8gKGNvbnN0IHM2NClpbSA6IFJWX01BWF9DT1VOVF9JTU0sIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjU0OlxcdFxcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KV9fYnBmX3RyYW1wX2V4aXQsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjU1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MzktXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxODQwOlxcdFxcdHJldCA9IGVtaXRfY2FsbChhZGRyLCBmaXhlZF9hZGRyLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTg0MS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo1OS44MTA4ODY5MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzMTM2NzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBlbWl0X2NhbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgcGFyc2UgdGhlIG5hbWUgYW5kIHdoYXQgdGhlIGlucHV0cyBhcmUuIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCBJIG1pZ2h0IGJlIGV4cGVjdGluZyBhIGNlcnRhaW4ga2luZCBvZiBiZWhhdmlvciwgYnV0IEkgcmVhbGx5IGhhdmUgdG8gbG9vayBhbmQgc2VlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgY29yZSBjb21wb25lbnQsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBpdCBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IGlzIHRoZSBpbnRlbmRlZCBvdXRwdXQ/IFRoaXMgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIGRpc3BhdGNoaW5nIG9yIHRyaWdnZXJpbmcgc29tZXRoaW5nLCBzbyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYW4gaW52ZXN0aWdhdGlvbiBvZiBob3cgdGhlIGNhbGwncyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IHRoZXkgcmVsYXRlIHRvLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBmb3IgZXJyb3IgaGFuZGxpbmcsIG9mIGNvdXJzZS4gUHJvcGVyIGVycm9yIGhhbmRsaW5nLCBvciBsYWNrIHRoZXJlb2YsIGNhbiBiZSBhIG1ham9yIHNvdXJjZSBvZiBzeXN0ZW0gdnVsbmVyYWJpbGl0aWVzLCBzbyBJJ20gcHJpbWVkIHRvIGxvb2sgZm9yIHRoYXQgaW1tZWRpYXRlbHkuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGNsb3NlbHksIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGxpa2UgcmFjZSBjb25kaXRpb25zLCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgb3IgaW5lZmZpY2llbnQgY29kZS4gVGhlbiBhZ2FpbiwgaXQgY291bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBqdWRnZSB0aGF0IG9uY2UgSSd2ZSBoYWQgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMxNCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MDMuNjQyMjU3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTM6XFx0c3RhdGljIGludCBlbWl0X2NhbGwodTY0IGFkZHIsIGJvb2wgZml4ZWRfYWRkciwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuIDQ1NDpcXHR7XFxuIDQ1NTpcXHRcXHRzNjQgb2ZmID0gMDtcXG4gNDU2OlxcdFxcdHU2NCBpcDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0aWYgKGFkZHIgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VpbnNucyBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZXJvX2luc25zKSB7XFxuIDQ1OTpcXHRcXHRcXHQvKlxcbiA0NjA6XFx0XFx0XFx0ICogVXNlIHRoZSByb19pbnNucyhSWCkgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgYXMgdGhlIEJQRlxcbiA0NjE6XFx0XFx0XFx0ICogcHJvZ3JhbSB3aWxsIGZpbmFsbHkgcnVuIGZyb20gdGhpcyBtZW1vcnkgcmVnaW9uLlxcbiA0NjI6XFx0XFx0XFx0ICovXFxuIDQ2MzpcXHRcXHRcXHRpcCA9ICh1NjQpKGxvbmcpKGN0eC1cXHUwMDNlcm9faW5zbnMgKyBjdHgtXFx1MDAzZW5pbnNucyk7XFxuIDQ2NDpcXHRcXHRcXHRvZmYgPSBhZGRyIC0gaXA7XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdHJldHVybiBlbWl0X2p1bXBfYW5kX2xpbmsoUlZfUkVHX1JBLCBvZmYsIGZpeGVkX2FkZHIsIGN0eCk7XFxuIDQ2ODpcXHR9XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X2tjZmkodTMyIGhhc2gsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbiA0NzE6XFx0e1xcbiA0NzI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAzOjAzLjY0MjQ3MTc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzY0MjY4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBlbWl0X2p1bXBfYW5kX2xpbmtgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGVtaXRfanVtcF9hbmRfbGlua2AuIEl0J3MgdXNpbmcgYFJWX1JFR19SQWAsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGUgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIsIGdvb2QuIEFuZCBpdCdzIG5vdCBtZXNzaW5nIHdpdGggYHQwYCB3aGljaCBpcyBgUlZfUkVHX1QwYCwgc28gaXQncyBub3Qgc3RlcHBpbmcgb24gYW55dGhpbmcgdGhhdCBpdCBzaG91bGRuJ3QuIE1ha2VzIHNlbnNlLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9uIHRoaXMgLSB3aGF0J3MgYEJQRl9SRUdfQVhgIGFjdHVhbGx5ICptYXBwZWQqIHRvIGluIHRoZSBSSVNDLVYgcmVnaXN0ZXIgYXJjaGl0ZWN0dXJlPyBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBtYXBwaW5nLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCdzIG5vdCBnb2luZyB0byBjYXVzZSBzb21lIHdlaXJkIGNvbmZsaWN0IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gVGhhdCdzIGEgY3J1Y2lhbCB0aGluZyB0byBnZXQgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzowNy42MTg5MDI0MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDUxODc5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1JFR19BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAzOjA3Ljc4MzQzNTA1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3Nzk4NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqRGVsdmluZyBpbnRvIFJJU0MtViBCUEYgSklUIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyByZWdpc3RlciBhbGxvY2F0aW9uIHdvcmtzIGZvciBCUEYgSklUIG9uIFJJU0MtVi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZ1bmN0aW9uIG9yIG1hY3JvIHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIFJJU0MtViByZWdpc3RlciBhc3NpZ25tZW50cy4gVGhlIG5hbWUgYGJwZl90b19ydl9yZWdgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9uLCBhbmQgaXQncyBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiB0aGUgUklTQy1WIHNwZWNpZmljIG5ldHdvcmtpbmcgY29kZS4gVGhhdCBtZWFucyBJIHNob3VsZCBsb29rIGluIGVpdGhlciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYCwgd2hpY2ggd291bGQgY29udGFpbiB0aGUgZGVjbGFyYXRpb25zLCBvciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHdoaWNoIHdvdWxkIHByb2JhYmx5IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHN0YXJ0IHdpdGggdGhvc2UgbG9jYXRpb25zLCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiB2aXJ0dWFsIHJlZ2lzdGVycyBtYXAgdG8gcGh5c2ljYWwgUklTQy1WIHJlZ2lzdGVycyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBrZXkgdG8gcGVyZm9ybWFuY2UsIHJlYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzoxMS40NTEyMzY5MzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYzMDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfUkVHX0FYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTQzPWVudW0ge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy01NC1cXHRCUEZfQVhfTE8sXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo1NTpcXHQvKiBTdGFjayBzcGFjZSBmb3IgQlBGX1JFR182IHRocm91Z2ggQlBGX1JFR185IGFuZCBCUEZfUkVHX0FYLiAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtNTYtXFx0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTcxPXN0YXRpYyBjb25zdCBzOCBicGYycnYzMltdWzJdID0ge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy05MC1cXHQvKiBUZW1wb3JhcnkgcmVnaXN0ZXIgZm9yIGJsaW5kaW5nIGNvbnN0YW50cy4gU3RvcmVkIG9uIHRoZSBzdGFjay4gKi9cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjkxOlxcdFtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgU1RBQ0tfT0ZGU0VUKEJQRl9BWF9MTyl9LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtOTItXFx0LypcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9Mjk9c3RhdGljIGNvbnN0IGludCByZWdtYXBbXSA9IHtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNDAtXFx0W0JQRl9SRUdfRlBdID1cXHRSVl9SRUdfUzUsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo0MTpcXHRbQlBGX1JFR19BWF0gPVxcdFJWX1JFR19UMCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQyLX07XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy04LSAqIFRyYW1wb2xpbmUgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZC4gQ3VzdG9tIGNhbGxpbmcgY29udmVudGlvbjpcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo5OiAqXFx0LSBpbnB1dDogIHN0YWNrIG9mZnNldCBpbiBCUEZfUkVHX0FYICh0MClcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMDogKlxcdC0gb3V0cHV0OiB1cGRhdGVkIGNvdW50IGluIEJQRl9SRUdfQVggKHQwKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTExLSAqXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTItICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMzogKiBwdHIgPSBCUEZfUkVHX0ZQIChzNSkgKyBCUEZfUkVHX0FYICh0MCkuIEJQRiBSMC1SNSAoYTUsIGEwLWE0KSBhcmUgc2F2ZWRcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xNC0gKiBhY3Jvc3MgdGhlIGNhbGw7IEJQRl9SRUdfRlAgKHM1KSBpcyBjYWxsZWUtc2F2ZWQgYW5kIG5lZWRzIG5vIHNhdmluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MTEuNjA5ODc3MTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjI0MTQ0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBCUEYgYG1heV9nb3RvYCBJbXBsZW1lbnRhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBzZXR0aW5nIHVwIHRoZSBgbWF5X2dvdG9gIGxvb3AgYm91bmQgY2hlY2sgZm9yIFJJU0MtVi4gVGhlIGBCUEZfUkVHX0FYYCByZWdpc3RlciBpcyBtYXBwZWQgdG8gYFJWX1JFR19UMGAsIHNvIHRoZSB2ZXJpZmllciBpcyBlbWl0dGluZyB0aGlzIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uczpcblxuMS4gIGBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpYDogVGhpcyBtb3ZlcyBhbiBpbW1lZGlhdGUgdmFsdWUgcmVwcmVzZW50aW5nIGFuIG9mZnNldCBjb3VudCBvbnRvIGB0MGAuXG4yLiAgYEJQRl9FTUlUX0NBTEwoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pYDogVGhpcyBpcyB0aGUga2V5LiBUaGUgSklUIHdpbGwgdHJhbnNsYXRlIHRoaXMgaW50byBhIGNhbGwgdG8gdGhlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgZnVuY3Rpb24uXG4zLiAgYEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudClgOiBUaGlzIGluc3RydWN0aW9uIHN0b3JlcyBhIGRvdWJsZS13b3JkIHZhbHVlIGZyb20gYHQwYCB0byBhIG1lbW9yeSBsb2NhdGlvbi5cblxuTm93LCB0aGUgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBhc3NlbWJseSBpcyB3aGF0J3MgcmVhbGx5IGludGVyZXN0aW5nOlxuXG5gYGBhc3NlbWJseVxuU1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5cdGFkZGlcdHNwLCBzcCwgLTY0XG5cdHNkXHRyYSwgNTYoc3ApXG5cblx0LyogU2F2ZSBCUEYgcmVnaXN0ZXJzIFIwLVI1IChhNSwgYTAtYTQpICovXG5cdHNkXHRhNSwgNDgoc3ApXG5cdHNkXHRhMCwgNDAoc3ApXG5cdHNkXHRhMSwgMzIoc3ApXG5cdHNkXHRhMiwgMjQoc3ApXG5cdHNkXHRhMywgMTYoc3ApXG5cdHNkXHRhNCwgOChzcClcblxuXHRhZGRcdGEwLCB0MCwgczVcblx0Y2FsbFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5cdG12XHR0MCwgYTBcblxuXHQvKiBSZXN0b3JlIEJQRiByZWdpc3RlcnMgUjAtUjUgKi9cblx0bGRcdGE0LCA4KHNwKVxuXHRsZFx0YTMsIDE2KHNwKVxuXHRsZFx0YTIsIDI0KHNwKVxuXHRsZFx0YTEsIDMyKHNwKVxuXHRsZFx0YTAsIDQwKHNwKVxuXHRsZFx0YTUsIDQ4KHNwKVxuXG5cdGxkXHRyYSwgNTYoc3ApXG5cdGFkZGlcdHNwLCBzcCwgNjRcblx0cmV0XG5TWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5gYGBcblxuVGhpcyBhc3NlbWJseSBzYXZlcyB0aGUgQlBGIHJlZ2lzdGVycyBgUjAtUjVgICh3aGljaCBhcmUgZXF1aXZhbGVudCB0byBgYTUsIGEwLWE0YCBpbiB0aGUgUklTQy1WIGNhbGxpbmcgY29udmVudGlvbikuIFRoZW4sIGl0IGNhbGN1bGF0ZXMgYSB2YWx1ZSwgYGEwID0gdDAgKyBzNWAsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW5zIGFkZGluZyBgQlBGX1JFR19BWCArIEJQRl9SRUdfRlBgLCBwYXNzZXMgdGhpcyB0byB0aGUgYGJwZl9jaGVja190aW1lZF9tYXlfZ290b2AgZnVuY3Rpb24sIGFuZCBwdXRzIHRoZSByZXN1bHQgYmFjayBpbnRvIGB0MGAsIGFuZCBmaW5hbGx5IHJlc3RvcmVzIHRoZSBCUEYgcmVnaXN0ZXJzIGFuZCByZXR1cm5zLlxuXG5UaGlzIGlzIGEgcHJldHR5IGNsZWFuIGltcGxlbWVudGF0aW9uIHRvIGVuYWJsZSB0aGUgYG1heV9nb3RvYCBsb29wIGJvdW5kIGNoZWNrIG9uIFJJU0MtViwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkIHRvIHNhZmVseSBleGVjdXRlIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wcyBpbiBCUEYgcHJvZ3JhbXMuXG5cblNvLCBpcyB0aGlzIGNoYW5nZSBhY3R1YWxseSByZWFjaGFibGU/IEFic29sdXRlbHksIGFzc3VtaW5nIHdlIGxvYWQgYSBCUEYgcHJvZ3JhbSB1dGlsaXppbmcgYG1heV9nb3RvYCBvbiBhIFJJU0MtViBzeXN0ZW0uXG5cbkFzIGZhciBhcyBjb25maWd1cmF0aW9ucyBnbywgd2UnbGwgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklUIGNvbXBpbGVyLCBhbmQgdGhlIHN0YW5kYXJkIFJJU0MtViBjb25maWd1cmF0aW9uIGBDT05GSUdfQVJDSF9SVjY0SWAuIFdlIGFjdHVhbGx5IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBgQ09ORklHX0FSQ0hfUlY2NElgIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IDY0LWJpdCBhcmNoaXRlY3R1cmUgY29uZmlnLCBidXQgaXQgZG9lc24ndCBodXJ0IHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBBbmQsIG9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsIHRvIGJlIGFibGUgdG8gbG9hZCBhbnkgQlBGIHByb2dyYW1zIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuTGV0J3MgZG8gYSBxdWljayBjaGVjayBpbiB0aGUgYGFyY2gvcmlzY3YvbmV0L01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgQlBGIHN1cHBvcnQsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MjIuMjM0MDI0NTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvcmlzY3YvbmV0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRpZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbiAgIDY6XFx0XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG4gICA3OlxcdGVsc2VcXG4gICA4OlxcdFxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuICAgOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzoyMi4yMzQxMjE2ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NTgwMTg2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEJQRiBUaW1lZCBNYXlfR290byBQYXRjaCBmb3IgUklTQy1WKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgUklTQy1WIHN1cHBvcnQgZm9yIHRoZSBgYnBmX3RpbWVkX21heV9nb3RvYCBsb29wIGJvdW5kLiBUaGUgb25seSBjb25maWd1cmF0aW9ucyBpbXBhY3RlZCBoZXJlIHNlZW0gdG8gYmUgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19BUkNIX1JWNjRJYCwgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIGEgUklTQy1WIGFkZGl0aW9uLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBuZXcgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCBhc3NlbWJseS4gU3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgZnV6eiBhc3NlbWJseSB3ZWxsIHRocm91Z2ggY292ZXJhZ2UsIHRob3VnaCBpdCBjYW4gZnV6eiB0aGUgQlBGIHByb2dyYW1zIHRoYXQgdHJpZ2dlciB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlcmUncyBhbHNvIGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCwgd2hpY2ggdGhlIHBhdGNoIGFsc28gYWRkcy5cblxuVGhlIHZlcmlmaWVyIGVtaXRzIGEgY2FsbCwgYW5kIHRoZSBKSVQgY29tcGlsZXMgaXQuIFRoZSBDIGZ1bmN0aW9uIGBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9gIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NlbWJseSwgYnV0IHRoaXMgaXNuJ3QgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYWRkaW5nIGBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9gIHRvIGBGb2N1c1N5bWJvbHNgLCBidXQgaXQncyBub3QgYWN0dWFsbHkgY2hhbmdlZCBpbiB0aGlzIHBhdGNoLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gIGFuZCBhZGRzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AuIFNpbmNlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaXMgaW4gYXNzZW1ibHksIGl0IG1pZ2h0IG5vdCBoYXZlIGNvdmVyYWdlLiBgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b2AgaXMganVzdCBgcmV0dXJuIHRydWU7YC4gSG1tLiBTbywgaXQncyBub3QgYSBjb21wbGljYXRlZCBmdW5jdGlvbi5cblxuTm8gb3RoZXIgZnVuY3Rpb25zIGFyZSBhZGRlZCBpbiB0aGUgcGF0Y2guIEknbGwgZG91YmxlLWNoZWNrIGZvciBvdGhlciBmaWxlIG1vZGlmaWNhdGlvbnMuIE9rYXksIEkgc2VlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY2AgYXJlIGFsc28gbW9kaWZpZWQuIFNvLCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCwgYWRkaW5nIFJJU0MtViBzdXBwb3J0IGZvciBgYnBmX3RpbWVkX21heV9nb3RvYC5cblxuR2l2ZW4gdGhhdCwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuXG5cbkZvciBgRW5hYmxlQ29uZmlnc2AsIGBCUEZfSklUYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBgQVJDSF9SVjY0SWAgaXMgc3RhbmRhcmQgZm9yIHJpc2N2NjQsIHNvIGl0J3MgYSBnaXZlbi4gQWxzbywgYEJQRl9TWVNDQUxMYCBpcyBuZWNlc3NhcnkgdG8gdXNlIEJQRi4gSSdtIGdvaW5nIHRvIGxpc3QganVzdCBgQlBGX0pJVGAuXG5cbkZvciBgRm9jdXNTeW1ib2xzYCwgSSBoYXZlIHRvIGJlIHNtYXJ0IGhlcmUuIFRoZSBwcm9tcHQgc2F5cyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgd2l0aCBjb21wbGV4IGxvZ2ljLCBidXQgYXZvaWQgZ2VuZXJpYyBob3RwYXRocy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGFyZSBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIChldmVuIHRob3VnaCBpdCdzIGFzc2VtYmx5LCBpdCdzIHdvcnRoIGEgc2hvdCwgbWlnaHQgaGF2ZSBzb21lIGluc3RydW1lbnRhdGlvbikgYW5kIGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYC4gSSB3aWxsIGluY2x1ZGUgYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gIGFuZCBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gLlxuXG5MZXQgbWUgcXVpY2tseSByZS1pdGVyYXRlOiB1c3VhbGx5IGAuU2AgZmlsZXMgYXJlIG5vdCBpbnN0cnVtZW50ZWQgYnkgS0NPViB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkLCBhbmQgZXZlbiB0aGVuLCBpdCdzIHRyaWNreS4gQnV0IGl0IGRvZXNuJ3QgaHVydCB0byBpbmNsdWRlIGl0LlxuXG5CYXNlZCBvbiB0aGUgcGF0Y2gsIHRoZSByZWFzb25pbmcgaXMgXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi5cIlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzcsIk91dHB1dFRva2VucyI6MTQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MzUuNzkyMTQzODI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzOTA4NDcyLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkFSQ0hfUlY2NElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90aW1lZF9tYXlfZ290b1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEFSQ0hfUlY2NElcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MzYuMDI2MDY3MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NTY1Mjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIEFyY2hpdGVjdHVyZSBJZGVudGlmaWVyKipcblxuSG1tLCBzbyBgQVJDSF9SVjY0SWAgaXNuJ3QgZGVmaW5lZCwgaXMgdGhhdCByaWdodD8gVGhhdCdzLi4uIHVuZXhwZWN0ZWQuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYXJjaGl0ZWN0dXJlIGNvbmZpZ3VyYXRpb24gaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFRoYXQncyB0aGUgZmlyc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvciBwb3RlbnRpYWxseSBhbnkgcmVsZXZhbnQgaW5jbHVkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHN5bWJvbCBpcyB1bmRlZmluZWQgYmVmb3JlIEkgZ28gZG93biBhIHJhYmJpdCBob2xlLiBMZXQncyBzZWUgaWYgaXQncyBjb25kaXRpb25hbGx5IGRlZmluZWQgb3IgaWYgSSBqdXN0IG5lZWQgdG8gYWRkIGl0IHRoZXJlLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzo0MC4zMDE3MjM1MjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzU5MTYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L0tjb25maWc9NDA1PWNvbmZpZyBBUkNIX1JWMzJJXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNDEwLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTE6Y29uZmlnIEFSQ0hfUlY2NElcXG5hcmNoL3Jpc2N2L0tjb25maWctNDEyLVxcdGJvb2wgXFxcIlJWNjRJXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzo0MC44NzkzMjUxODhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MTU2NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNeXN0ZXJ5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHRoaXMgdGhpbmcg4oCTIHdoYXRldmVyIFwidGhpcyB0aGluZ1wiIGlzLCBsZXQncyBjYWxsIGl0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiAtIGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBTbywgd2hhdCBkaWQgYHNldC1yZXN1bHRzYCByZXBvcnQ/IFRoYXQgaXQgZG9lc24ndCBleGlzdD8gVGhhdCdz4oCmIHN0cmFuZ2UuIFNvbWV0aGluZydzIGNsZWFybHkgbm90IHJpZ2h0IGhlcmUuXG5cbkFoYSEgUGVyaGFwcyB0aGUgaXNzdWUgaXNuJ3Qgd2hldGhlciB0aGUgb3B0aW9uICpleGlzdHMqLCBidXQgaG93IHRoZSB0b29sIGlzIGxvb2tpbmcgZm9yIGl0LiBNYXliZSB0aGUgY29uZmlndXJhdGlvbiBuYW1lIGlzbid0IHByZWNpc2VseSB3aGF0IHRoZSB0b29sIGlzIGV4cGVjdGluZy4gSXMgaXQgcG9zc2libGUgdGhlIHRvb2wgaXMgY2hlY2tpbmcgdGhlICpnbG9iYWwqIEtjb25maWcgZmlsZSwgYW5kIGl04oCZcyBhY3R1YWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIGRlZmluZWQgdW5kZXIgc29tZXRoaW5nIGxpa2UgYEFSQ0hfUlY2NElgPyBPciwgZXF1YWxseSBsaWtlbHksIHRoaXMgY291bGQgYmUgYSBzaW1wbGUgYnVnIGluIHRoZSB0b29sIGl0c2VsZi4gSeKAmXZlIHNlZW4gd2VpcmRlciB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2YgZW52aXJvbm1lbnRzLlxuXG5BbHJpZ2h0LCBsZXQncyBub3Qgd2FzdGUgYW55IG1vcmUgdGltZSB3cmVzdGxpbmcgd2l0aCB0aGlzIHJhYmJpdCBob2xlLiBJJ2xsIGp1c3QgZmFsbCBiYWNrIHRvIHRoZSB0cmllZCBhbmQgdHJ1ZSBhcHByb2FjaCBvZiB1c2luZyBgQlBGX0pJVGAuIFRoYXQgc2hvdWxkIHdvcmsuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgbGF0ZXIgdG8gc2VlIGlmIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI2NSwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzo0Ni4yNTA4OTQxMDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk3NDc1NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90aW1lZF9tYXlfZ290b1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfYnBmX3RpbWVkX21heV9nb3RvXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowpw82l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 07:39:17 +0000 UTC FinishedAt: 2026-07-14 08:03:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arch_bpf_timed_may_goto", "bpf_jit_supports_timed_may_goto" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90aW1lZF9tYXlfZ290byYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NDc2M2M5YmRmYjY3ZDY5NWY2YTQxOTYxZDFiMTk0YWEzZTkzMzM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMDg6MDI6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUgYi9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZVxuaW5kZXggOWExZTVmMGE5NGU1NTkuLjY0NThkNGQ1MTk5MGE3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXG5AQCAtMyw3ICYjNDM7Myw3IEBAXG4gb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvcmUub1xuIFxuIGlmZXEgKCQoQ09ORklHX0FSQ0hfUlY2NEkpLHkpXG4tXHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm9cbiYjNDM7XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbiBlbHNlXG4gXHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDMyLm9cbiBlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBjMDNjMWRlMTZiNzlhYy4uOTgzMmExOTIwMGM3NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMjE1NywzICYjNDM7MjE1Nyw4IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiYjNDM7XG4mIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUyBiL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1NGYzODlkOTIxZTA1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uU1xuQEAgLTAsMCAmIzQzOzEsNDQgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEZlbmcgSmlhbmcgXHUwMDNjamlhbmdmZW5nQGt5bGlub3MuY25cdTAwM2UgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyYW1wb2xpbmUgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZC4gQ3VzdG9tIGNhbGxpbmcgY29udmVudGlvbjpcbiYjNDM7ICpcdC0gaW5wdXQ6ICBzdGFjayBvZmZzZXQgaW4gQlBGX1JFR19BWCAodDApXG4mIzQzOyAqXHQtIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MClcbiYjNDM7ICpcbiYjNDM7ICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcbiYjNDM7ICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZFxuJiM0MzsgKiBhY3Jvc3MgdGhlIGNhbGw7IEJQRl9SRUdfRlAgKHM1KSBpcyBjYWxsZWUtc2F2ZWQgYW5kIG5lZWRzIG5vIHNhdmluZy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbiYjNDM7XHRhZGRpXHRzcCwgc3AsIC02NFxuJiM0MztcdHNkXHRyYSwgNTYoc3ApXG4mIzQzO1xuJiM0MztcdC8qIFNhdmUgQlBGIHJlZ2lzdGVycyBSMC1SNSAoYTUsIGEwLWE0KSAqL1xuJiM0MztcdHNkXHRhNSwgNDgoc3ApXG4mIzQzO1x0c2RcdGEwLCA0MChzcClcbiYjNDM7XHRzZFx0YTEsIDMyKHNwKVxuJiM0MztcdHNkXHRhMiwgMjQoc3ApXG4mIzQzO1x0c2RcdGEzLCAxNihzcClcbiYjNDM7XHRzZFx0YTQsIDgoc3ApXG4mIzQzO1xuJiM0MztcdGFkZFx0YTAsIHQwLCBzNVxuJiM0MztcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuJiM0MztcdG12XHR0MCwgYTBcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSBCUEYgcmVnaXN0ZXJzIFIwLVI1ICovXG4mIzQzO1x0bGRcdGE0LCA4KHNwKVxuJiM0MztcdGxkXHRhMywgMTYoc3ApXG4mIzQzO1x0bGRcdGEyLCAyNChzcClcbiYjNDM7XHRsZFx0YTEsIDMyKHNwKVxuJiM0MztcdGxkXHRhMCwgNDAoc3ApXG4mIzQzO1x0bGRcdGE1LCA0OChzcClcbiYjNDM7XG4mIzQzO1x0bGRcdHJhLCA1NihzcClcbiYjNDM7XHRhZGRpXHRzcCwgc3AsIDY0XG4mIzQzO1x0cmV0XG4mIzQzO1NZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDkyYmExZDcyZTBlY2U0Li44ZDhlNTNkMzcyNjZjZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5AQCAtNjQsNiAmIzQzOzY0LDcgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuIF9fYXJjaF9zMzkweFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIF9fc3RkZXJyKFwmIzM0O0VSUk9SOiBUaW1lb3V0IGRldGVjdGVkIGZvciBtYXlfZ290byBpbnN0cnVjdGlvblwmIzM0OylcbiBfX3N0ZGVycihcJiMzNDtDUFU6IHt7WzAtOV0mIzQzO319IFVJRDogMCBQSUQ6IHt7WzAtOV0mIzQzO319IENvbW06IHt7Lip9fVwmIzM0OylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuaW5kZXggNGJkZjQyNTZhNDFlNTEuLmY0N2I5ZDU0MGExNzU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7bWF5X2dvdG8gMFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX3MzOTB4XG4gX19hcmNoX2FybTY0XG4mIzQzO19fYXJjaF9yaXNjdjY0XG4gX194bGF0ZWQoXCYjMzQ7MDogcjAgPSAxXCYjMzQ7KVxuIF9feGxhdGVkKFwmIzM0OzE6IGV4aXRcJiMzNDspXG4gX19zdWNjZXNzXG5AQCAtMzEsNiAmIzQzOzMyLDcgQEAgX19kZXNjcmlwdGlvbihcJiMzNDtiYXRjaCAyIG9mIG1heV9nb3RvIDBcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9feGxhdGVkKFwmIzM0OzA6IHIwID0gMVwmIzM0OylcbiBfX3hsYXRlZChcJiMzNDsxOiBleGl0XCYjMzQ7KVxuIF9fc3VjY2Vzc1xuQEAgLTUzLDYgJiM0Mzs1NSw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7bWF5X2dvdG8gYmF0Y2ggd2l0aCBvZmZzZXRzIDIvMS8wXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfczM5MHhcbiBfX2FyY2hfYXJtNjRcbiYjNDM7X19hcmNoX3Jpc2N2NjRcbiBfX3hsYXRlZChcJiMzNDswOiByMCA9IDFcJiMzNDspXG4gX194bGF0ZWQoXCYjMzQ7MTogZXhpdFwmIzM0OylcbiBfX3N1Y2Nlc3NcbkBAIC03OSw2ICYjNDM7ODIsNyBAQCBfX2Rlc2NyaXB0aW9uKFwmIzM0O21heV9nb3RvIGJhdGNoIHdpdGggb2Zmc2V0cyAyLzBcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9feGxhdGVkKFwmIzM0OzA6ICoodTY0ICopKHIxMCAtMTYpID0gNjU1MzVcJiMzNDspXG4gX194bGF0ZWQoXCYjMzQ7MTogKih1NjQgKikocjEwIC04KSA9IDBcJiMzNDspXG4gX194bGF0ZWQoXCYjMzQ7MjogcjEyID0gKih1NjQgKikocjEwIC0xNilcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ3NjNjOWJkZmI2N2Q2OTVmNmE0MTk2MWQxYjE5NGFhM2U5MzMzNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDE0IDA4OjAyOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUgYi9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZQppbmRleCA5YTFlNWYwYTk0ZTU1OS4uNjQ1OGQ0ZDUxOTkwYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlCkBAIC0zLDcgJiM0MzszLDcgQEAKIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb3JlLm8KIAogaWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSkKLQlvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm8KJiM0MzsJb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXA2NC5vIGJwZl90aW1lZF9tYXlfZ290by5vCiBlbHNlCiAJb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAzMi5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggYzAzYzFkZTE2Yjc5YWMuLjk4MzJhMTkyMDBjNzVjIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKQEAgLTIxNTcsMyAmIzQzOzIxNTcsOCBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZCkKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KJiM0MzsKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8odm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TIGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1NGYzODlkOTIxZTA1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMKQEAgLTAsMCAmIzQzOzEsNDQgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBGZW5nIEppYW5nICZsdDtqaWFuZ2ZlbmdAa3lsaW5vcy5jbiZndDsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGlua2FnZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vYXNtLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUcmFtcG9saW5lIGZvciB0aGUgQlBGIHRpbWVkIG1heV9nb3RvIGxvb3AgYm91bmQuIEN1c3RvbSBjYWxsaW5nIGNvbnZlbnRpb246CiYjNDM7ICoJLSBpbnB1dDogIHN0YWNrIG9mZnNldCBpbiBCUEZfUkVHX0FYICh0MCkKJiM0MzsgKgktIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MCkKJiM0MzsgKgomIzQzOyAqIENhbGxzIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggdGhlIHN0YW5kYXJkIFJJU0MtViBBQkksIHdoZXJlCiYjNDM7ICogcHRyID0gQlBGX1JFR19GUCAoczUpICYjNDM7IEJQRl9SRUdfQVggKHQwKS4gQlBGIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZAomIzQzOyAqIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCBhbmQgbmVlZHMgbm8gc2F2aW5nLgomIzQzOyAqLwomIzQzOwomIzQzO1NZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKQomIzQzOwlhZGRpCXNwLCBzcCwgLTY0CiYjNDM7CXNkCXJhLCA1NihzcCkKJiM0MzsKJiM0MzsJLyogU2F2ZSBCUEYgcmVnaXN0ZXJzIFIwLVI1IChhNSwgYTAtYTQpICovCiYjNDM7CXNkCWE1LCA0OChzcCkKJiM0MzsJc2QJYTAsIDQwKHNwKQomIzQzOwlzZAlhMSwgMzIoc3ApCiYjNDM7CXNkCWEyLCAyNChzcCkKJiM0MzsJc2QJYTMsIDE2KHNwKQomIzQzOwlzZAlhNCwgOChzcCkKJiM0MzsKJiM0MzsJYWRkCWEwLCB0MCwgczUKJiM0MzsJY2FsbAlicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8KJiM0MzsJbXYJdDAsIGEwCiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgQlBGIHJlZ2lzdGVycyBSMC1SNSAqLwomIzQzOwlsZAlhNCwgOChzcCkKJiM0MzsJbGQJYTMsIDE2KHNwKQomIzQzOwlsZAlhMiwgMjQoc3ApCiYjNDM7CWxkCWExLCAzMihzcCkKJiM0MzsJbGQJYTAsIDQwKHNwKQomIzQzOwlsZAlhNSwgNDgoc3ApCiYjNDM7CiYjNDM7CWxkCXJhLCA1NihzcCkKJiM0MzsJYWRkaQlzcCwgc3AsIDY0CiYjNDM7CXJldAomIzQzO1NZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwppbmRleCA5MmJhMWQ3MmUwZWNlNC4uOGQ4ZTUzZDM3MjY2Y2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKQEAgLTY0LDYgJiM0Mzs2NCw3IEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAogX19hcmNoX3MzOTB4CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogX19zdGRlcnIoJiMzNDtFUlJPUjogVGltZW91dCBkZXRlY3RlZCBmb3IgbWF5X2dvdG8gaW5zdHJ1Y3Rpb24mIzM0OykKIF9fc3RkZXJyKCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX0mIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tYXlfZ290b18xLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jCmluZGV4IDRiZGY0MjU2YTQxZTUxLi5mNDdiOWQ1NDBhMTc1OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7bWF5X2dvdG8gMCYjMzQ7KQogX19hcmNoX3g4Nl82NAogX19hcmNoX3MzOTB4CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX194bGF0ZWQoJiMzNDswOiByMCA9IDEmIzM0OykKIF9feGxhdGVkKCYjMzQ7MTogZXhpdCYjMzQ7KQogX19zdWNjZXNzCkBAIC0zMSw2ICYjNDM7MzIsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7YmF0Y2ggMiBvZiBtYXlfZ290byAwJiMzNDspCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfczM5MHgKIF9fYXJjaF9hcm02NAomIzQzO19fYXJjaF9yaXNjdjY0CiBfX3hsYXRlZCgmIzM0OzA6IHIwID0gMSYjMzQ7KQogX194bGF0ZWQoJiMzNDsxOiBleGl0JiMzNDspCiBfX3N1Y2Nlc3MKQEAgLTUzLDYgJiM0Mzs1NSw3IEBAIF9fZGVzY3JpcHRpb24oJiMzNDttYXlfZ290byBiYXRjaCB3aXRoIG9mZnNldHMgMi8xLzAmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9zMzkweAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9feGxhdGVkKCYjMzQ7MDogcjAgPSAxJiMzNDspCiBfX3hsYXRlZCgmIzM0OzE6IGV4aXQmIzM0OykKIF9fc3VjY2VzcwpAQCAtNzksNiAmIzQzOzgyLDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O21heV9nb3RvIGJhdGNoIHdpdGggb2Zmc2V0cyAyLzAmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9zMzkweAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9feGxhdGVkKCYjMzQ7MDogKih1NjQgKikocjEwIC0xNikgPSA2NTUzNSYjMzQ7KQogX194bGF0ZWQoJiMzNDsxOiAqKHU2NCAqKShyMTAgLTgpID0gMCYjMzQ7KQogX194bGF0ZWQoJiMzNDsyOiByMTIgPSAqKHU2NCAqKShyMTAgLTE2KSYjMzQ7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJJU0MtViBCUEYgSklUIFN1cHBvcnQgZm9yIGBicGZfdGltZWRfbWF5X2dvdG9gIC0gQ29uc2lkZXJhdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGBicGZfdGltZWRfbWF5X2dvdG9gIGluIHRoZSBSSVNDLVYgQlBGIEpJVC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFkZGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgYW4gZXhpc3RpbmcgZmVhdHVyZS4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYE1ha2VmaWxlYCB0byBpbmNsdWRlIHRoZSBuZXcgb2JqZWN0IGZpbGUsIGFuZCBpdCBhZGRzIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydGluZyBmdW5jdGlvbiBhbmQgYXNzZW1ibHkuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgJiMzNDtJcyB0aGlzIGdvaW5nIHRvIGJlIGZ1enplZCBlZmZlY3RpdmVseT8mIzM0Oy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBiZWluZyAqZXhlcmNpc2VkKi4gU3l6a2FsbGVyIGlzIHRoZSBnby10byB0b29sIGZvciBmdXp6aW5nIGFuZCB3aWxsIGNhdGNoIG1hbnkgcG90ZW50aWFsIGlzc3Vlcy4gR2l2ZW4gdGhhdCBTeXprYWxsZXIgZnV6emVzIFJJU0MtViwgdGhpcyBzaG91bGQsIGluIHByaW5jaXBsZSwgYmUgcmVhY2hhYmxlLiBUaGUgY29uZmlncyB0aGF0IGFyZSByZXF1aXJlZCAoYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19BUkNIX1JWNjRJYCkgYXJlIHByZXR0eSBzdGFuZGFyZCBmb3IgZW5hYmxpbmcgdGhlIEpJVCBhbmQgdGFyZ2V0aW5nIHRoZSA2NC1iaXQgUklTQy1WIGFyY2hpdGVjdHVyZS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBjb21wb25lbnRzIGhlcmU6IGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AsIHdoaWNoIGlzIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGF0IEMgY29kZSBhY3R1YWxseSAqY2FsbHMqIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlIHRoYXQgaXQgaXMgdXNlZCBhbmQgaGVuY2UsIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90aW1lZF9tYXlfZ290byYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjUzPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1Ny1cdFx0LypcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE2NTg6XHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1OS1cdFx0ICogdmVyaWZpZXIgYW5kIGNhbGxlZCB3aXRoIGN1c3RvbSBjYWxsaW5nIGNvbnZlbnRpb24gd2l0aFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE2NjEtXHRcdCAqL1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTY2MjpcdFx0aWYgKGZ1bmNfYWRkciAhPSAodTY0KWFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY2My1cdFx0XHRlbWl0KEE2NF9NT1YoMSwgcjAsIEE2NF9SKDApKSwgY3R4KTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01LVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NjpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTctXHQvKiBBbGxvY2F0ZSBzdGFjayBzcGFjZSBhbmQgZW1pdCBmcmFtZSByZWNvcmQgKi9cbi0tXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yMC1cdCAqXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyMTpcdCAqIEJlZm9yZSBnZW5lcmF0aW5nIHRoZSBjYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvLCB0aGUgdmVyaWZpZXJcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIyLVx0ICogZ2VuZXJhdGVzIGEgbG9hZCBpbnN0cnVjdGlvbiB1c2luZyBGUCwgaS5lLiBSRUdfQVggPSAqKHU2NCAqKShGUCAtXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXHRyZXRcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQwOlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc2OS1cdFx0XHQvKlxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjE3NzA6XHRcdFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc3MS1cdFx0XHQgKiB2ZXJpZmllciBhbmQgY2FsbGVkIHdpdGggY3VzdG9tIGNhbGxpbmcgY29udmVudGlvbiB3aXRoXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTE3ODItXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTc4MzpcdFx0XHRpZiAoZnVuY19hZGRyID09ICh1NjQpYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzg0LVx0XHRcdFx0cmV0ID0gMDtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTctLypcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6ODogKiBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIHRyYW1wb2xpbmUgZm9yIHBvd2VycGM2NFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy05LSAqXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xOS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MjA6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVx0LyogUHJvbG9ndWU6IHNhdmUgTFIsIGFsbG9jYXRlIGZyYW1lICovXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01Ni1cdGJsclxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo1NzpTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTYtXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNzpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE4LVx0YWRkaVx0c3AsIHNwLCAtNjRcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00My1cdHJldFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDQ6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9ODc2PXN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xODQxLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxODQyOlx0XHRpZiAoKHZvaWQgKilmdW5jID09IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKSB7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE4NDMtXHRcdFx0LypcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTg0NDpcdFx0XHQgKiBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGhhcyBhIHNwZWNpYWwgQUJJOiB0aGVcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTg0NS1cdFx0XHQgKiBwYXJhbWV0ZXJzIGFyZSBpbiBCUEZfUkVHX0FYIGFuZCBCUEZfUkVHXzEwOyB0aGVcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyMjpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMjMtXHQvKlxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDQtXHRCUl9FWCAlcjFcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDU6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuLS1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMC1cbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMTpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMi1cdEFOTk9UQVRFX05PRU5EQlJcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNTQtXHRSRVRcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo1NTpTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTk0PXZvaWQgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSwgdm9pZCAqY29va2llKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTE5NTp1NjQgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8odm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTExOTYtdTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICopO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMzMjU9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290byh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMzMjktXG5rZXJuZWwvYnBmL2NvcmUuYzozMzMwOnU2NCBfX3dlYWsgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMzEte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ4MT1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzY1LVx0XHRcdCAqIHVudGlsIHRoZSB2YWx1ZSBiZWNvbWVzIDAgaW4gQVggKHRodXMsIDEgaW4gc3RhY2spLFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzY2Olx0XHRcdCAqIGFmdGVyIHdoaWNoIHdlIGNhbGwgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8sIHdoaWNoXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NjctXHRcdFx0ICogZWl0aGVyIHNldHMgQVggdG8gMHhmZmZmIHRvIGtlZXAgbG9vcGluZywgb3IgdG8gMFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4My1cdFx0XHQgKiAodG8gYWRkIHRvIHIxMC9mcCksIGFuZCBhbHNvIGFzIHRoZSByZXR1cm4gdmFsdWUgb2Zcbmtlcm5lbC9icGYvZml4dXBzLmM6MTc4NDpcdFx0XHQgKiB0aGUgY2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290by5cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4NS1cdFx0XHQgKi9cbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4Ni1cdFx0XHRpbnNuX2J1Zls0XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3ODc6XHRcdFx0aW5zbl9idWZbNV0gPSBCUEZfRU1JVF9DQUxMKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4OC1cdFx0XHRpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFJJU0MtViBCUEYgSklUIEhhbmRsaW5nIG9mIGBtYXlfZ290b2AqKgoKT2theSwgc28gdGhlIEJQRiBKSVQgY2FsbHMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCB3aGVuIGl0IGVuY291bnRlcnMgdGhvc2UgYG1heV9nb3RvYCBpbnN0cnVjdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBsb29raW5nIGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCwgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBleHBsaWNpdCBoYW5kbGluZyBvZiBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIGluIHRoYXQgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uICpzaG91bGQqIGJlIHV0aWxpemVkLCBhY2NvcmRpbmcgdG8gdGhlIGFyY2hpdGVjdHVyZS4gVGhhdCYjMzk7cyB1bnVzdWFsLiBJIGJldHRlciBkb3VibGUtY2hlY2sgYXJvdW5kIHRoZSB1c2Ugb2YgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCB3aXRoaW4gYGJwZl9qaXRfY29tcDY0LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBzb21ldGhpbmcgSSYjMzk7bSBtaXNzaW5nLiBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9icGZfdGltZWRfbWF5X2dvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTYtXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNzpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE4LVx0YWRkaVx0c3AsIHNwLCAtNjRcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00My1cdHJldFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDQ6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUklTQy1WIEJQRiBKSVQgYW5kIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AqKgoKT2theSwgc28gSSB3YXMgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBSSVNDLVYgSklUIGhhbmRsZXMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYC4gSW5pdGlhbGx5LCBJIGFzc3VtZWQgaXQgd291bGRuJiMzOTt0IHJlcXVpcmUgYW55IHNwZWNpYWwgdHJlYXRtZW50LCB0aGF0IGl0JiMzOTtkIHNpbXBseSBlbWl0IGEgc3RhbmRhcmQgY2FsbCB0byBpdC4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBpcyBhIEJQRiBoZWxwZXIgY2FsbC4gVGhlIHZlcmlmaWVyIGVtaXRzIGBCUEZfRU1JVF9DQUxMKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKWAsIHJpZ2h0PwoKU28sIHRoZSBKSVQgKnNob3VsZCoganVzdCBjb21waWxlIHRoYXQgYXMgYSBub3JtYWwgY2FsbC4gQnV0IGhhbmcgb24sIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaGFzIGEgKmN1c3RvbSogY2FsbGluZyBjb252ZW50aW9uISBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgSklUIGFjY291bnRzIGZvciB0aGlzLgoKTGV0JiMzOTtzIGxvb2sgYXQgYGFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TYC4gQWgsIHllcy4gSXQmIzM5O3MgYSB0cmFtcG9saW5lLiBUaGUgaW5wdXQgaXMgYSBzdGFjayBvZmZzZXQgaW4gYEJQRl9SRUdfQVhgICh0MCksIGFuZCB0aGUgb3V0cHV0IGlzIHRoZSB1cGRhdGVkIGNvdW50LCBhbHNvIGluIGBCUEZfUkVHX0FYYCAodDApLiBJdCBjYWxscyBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cilgLCB3aGVyZSBgcHRyYCBpcyB0aGUgcmVzdWx0IG9mIGBCUEZfUkVHX0ZQYCAoczUpICYjNDM7IGBCUEZfUkVHX0FYYCAodDApLiBCUEYgcmVnaXN0ZXJzIFIwLVI1IChhNSwgYTAtYTQpIGFyZSBzYXZlZCBhY3Jvc3MgdGhlIGNhbGw7IEJQRl9SRUdfRlAgKHM1KSBpcyBjYWxsZWUtc2F2ZWQsIHNvIG5vIHNhdmluZyBpcyBuZWVkZWQuCgpTbywgdGhlIHZlcmlmaWVyIGVtaXRzIGEgY2FsbCB0byBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gLCBhbmQgdGhlIEpJVCB0cmFuc2xhdGVzIHRoaXMgdG8gYSBjYWxsIHRvIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AuIFRoaXMgYWxsIHNlZW1zIGNvcnJlY3QuIEJ1dCBob3cgZXhhY3RseSBkb2VzIHRoZSBKSVQgdHJhbnNsYXRlIGEgY2FsbCB0byBhIGZpeGVkIGFkZHJlc3MgaW4gUklTQy1WPyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzLiBMZXQmIzM5O3MgY2hlY2sgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIHRvIHNlZSBob3cgYEJQRl9DQUxMYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRldGFpbHMgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9DQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTQwNj1zdGF0aWMgdm9pZCBpbml0X3JlZ3ModTggKnJkLCB1OCAqcnMsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQxMi1cdGNhc2UgQlBGX0pNUCB8IEJQRl9KQTpcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NDEzOlx0Y2FzZSBCUEZfSk1QIHwgQlBGX0NBTEw6XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQxNC1cdGNhc2UgQlBGX0pNUCB8IEJQRl9FWElUOlxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTM2OT1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE3ODktXHQvKiBmdW5jdGlvbiBjYWxsICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE3OTA6XHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc5MS1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQ0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxhdGlvbiBmb3IgQ2FsbHMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgQlBGX0pNUCB8IEJQRl9DQUxMYCBpbnN0cnVjdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgaW1wbGVtZW50YXRpb24uIExldCBtZSBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgdHJhbnNsYXRpb24gcHJvY2VzcyB0aGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzcGVjaWZpYyBCUEYgb3Bjb2RlIGlzIG1hcHBlZCB0byBSSVNDLVYgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCB0aGUgaGFuZGxpbmcgb2YgZnVuY3Rpb24gYXJndW1lbnRzLCBhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGUgY2FsbCBpdHNlbGYuIFdoYXQgUklTQy1WIGluc3RydWN0aW9ucyBhcmUgYmVpbmcgdXNlZD8gSG93IGlzIHRoZSByZXR1cm4gYWRkcmVzcyBtYW5hZ2VkPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgYmVpbmcgZG9uZSBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZSBvZiBqdW1wPyBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgQlBGIG9uIHRoaXMgYXJjaGl0ZWN0dXJlIGFuZCBsZXQgbWUgc2VlIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhpcyBjcml0aWNhbCBwYXJ0IG9mIHRoZSBCUEYgZXhlY3V0aW9uIGVuZ2luZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzg5Olx0XHQvKiBmdW5jdGlvbiBjYWxsICovXG4xNzkwOlx0XHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcbjE3OTE6XHRcdHtcbjE3OTI6XHRcdFx0Ym9vbCBmaXhlZF9hZGRyO1xuMTc5MzpcdFx0XHR1NjQgYWRkcjtcbjE3OTQ6XHRcbjE3OTU6XHRcdFx0LyogSW5saW5lIGNhbGxzIHRvIGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpXG4xNzk2Olx0XHRcdCAqXG4xNzk3Olx0XHRcdCAqIFJWX1JFR19UUCBob2xkcyB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBDUFUmIzM5O3MgdGFza19zdHJ1Y3QgYW5kIHRocmVhZF9pbmZvIGlzXG4xNzk4Olx0XHRcdCAqIGF0IG9mZnNldCAwIGluIHRhc2tfc3RydWN0LlxuMTc5OTpcdFx0XHQgKiBMb2FkIGNwdSBmcm9tIHRocmVhZF9pbmZvOlxuMTgwMDpcdFx0XHQgKiAgICAgU2V0IFIwIHRvICgoc3RydWN0IHRocmVhZF9pbmZvICopKFJWX1JFR19UUCkpLVx1MDAzZWNwdVxuMTgwMTpcdFx0XHQgKlxuMTgwMjpcdFx0XHQgKiBUaGlzIHJlcGxpY2F0ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgb24gUklTQ1ZcbjE4MDM6XHRcdFx0ICovXG4xODA0Olx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gMCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X3NtcF9wcm9jZXNzb3JfaWQpIHtcbjE4MDU6XHRcdFx0XHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBSMCAqL1xuMTgwNjpcdFx0XHRcdGVtaXRfbHcoYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzAsIGN0eCksIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSxcbjE4MDc6XHRcdFx0XHRcdFJWX1JFR19UUCwgY3R4KTtcbjE4MDg6XHRcdFx0XHRicmVhaztcbjE4MDk6XHRcdFx0fVxuMTgxMDpcdFxuMTgxMTpcdFx0XHQvKiBJbXBsZW1lbnQgaGVscGVyIGNhbGwgdG8gYnBmX2dldF9jdXJyZW50X3Rhc2svX2J0ZigpIGlubGluZSAqL1xuMTgxMjpcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IDAgXHUwMDI2XHUwMDI2IChpbnNuLVx1MDAzZWltbSA9PSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrIHx8XG4xODEzOlx0XHRcdFx0XHRcdCAgIGluc24tXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmKSkge1xuMTgxNDpcdFx0XHRcdGVtaXRfbXYoYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzAsIGN0eCksIFJWX1JFR19UUCwgY3R4KTtcbjE4MTU6XHRcdFx0XHRicmVhaztcbjE4MTY6XHRcdFx0fVxuMTgxNzpcdFxuMTgxODpcdFx0XHRtYXJrX2NhbGwoY3R4KTtcbjE4MTk6XHRcdFx0cmV0ID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC1cdTAwM2Vwcm9nLCBpbnNuLCBleHRyYV9wYXNzLFxuMTgyMDpcdFx0XHRcdFx0XHQgICAgXHUwMDI2YWRkciwgXHUwMDI2Zml4ZWRfYWRkcik7XG4xODIxOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xODIyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE4MjM6XHRcbjE4MjQ6XHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbjE4MjU6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuMTgyNjpcdFx0XHRcdGludCBpZHg7XG4xODI3Olx0XG4xODI4Olx0XHRcdFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuMTgyOTpcdFx0XHRcdGlmICghZm0pXG4xODMwOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4MzE6XHRcbjE4MzI6XHRcdFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgZm0tXHUwMDNlbnJfYXJnczsgaWR4JiM0MzsmIzQzOykge1xuMTgzMzpcdFx0XHRcdFx0dTggcmVnID0gYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzEgJiM0MzsgaWR4LCBjdHgpO1xuMTgzNDpcdFxuMTgzNTpcdFx0XHRcdFx0aWYgKGZtLVx1MDAzZWFyZ19zaXplW2lkeF0gPT0gc2l6ZW9mKGludCkpXG4xODM2Olx0XHRcdFx0XHRcdGVtaXRfc2V4dHcocmVnLCByZWcsIGN0eCk7XG4xODM3Olx0XHRcdFx0fVxuMTgzODpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRlY29kaW5nIHRoZSBCUEYgQ2FsbCBJbnN0cnVjdGlvbioqCgpPa2F5LCBzbyBgYnBmX2ppdF9nZXRfZnVuY19hZGRyYCBpcyBnb2luZyB0byBoYW5kIG1lIHRoYXQgYWRkcmVzcywgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0JiMzOTtzIGhvdyB0aGlzIGlzIGdvaW5nIHRvIHdvcmsuIFRoZSBzeXN0ZW0gaXMgc2V0IHVwIHRvIGlzc3VlIGEgY2FsbC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGZsb3cgY29ycmVjdGx5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYEJQRl9KTVAgfCBCUEZfQ0FMTGAuIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgYWxsIGhvb2tlZCB1cC4uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgaXQgYWxsIGNvbWVzIHRvZ2V0aGVyLiBUaGlzIGluc3RydWN0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzOTpcdFxuMTg0MDpcdFx0XHRyZXQgPSBlbWl0X2NhbGwoYWRkciwgZml4ZWRfYWRkciwgY3R4KTtcbjE4NDE6XHRcdFx0aWYgKHJldClcbjE4NDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTg0MzpcdFxuMTg0NDpcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fQ0FMTClcbjE4NDU6XHRcdFx0XHRlbWl0X212KGJwZl90b19ydl9yZWcoQlBGX1JFR18wLCBjdHgpLCBSVl9SRUdfQTAsIGN0eCk7XG4xODQ2Olx0XHRcdGJyZWFrO1xuMTg0NzpcdFx0fVxuMTg0ODpcdFx0LyogdGFpbCBjYWxsICovXG4xODQ5Olx0XHRjYXNlIEJQRl9KTVAgfCBCUEZfVEFJTF9DQUxMOlxuMTg1MDpcdFx0XHRpZiAoZW1pdF9icGZfdGFpbF9jYWxsKGksIGN0eCkpXG4xODUxOlx0XHRcdFx0cmV0dXJuIC0xO1xuMTg1MjpcdFx0XHRicmVhaztcbjE4NTM6XHRcbjE4NTQ6XHRcdC8qIGZ1bmN0aW9uIHJldHVybiAqL1xuMTg1NTpcdFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XG4xODU2Olx0XHRcdGlmIChpID09IGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEpXG4xODU3Olx0XHRcdFx0YnJlYWs7XG4xODU4Olx0XG4xODU5Olx0XHRcdHJ2b2ZmID0gZXBpbG9ndWVfb2Zmc2V0KGN0eCk7XG4xODYwOlx0XHRcdHJldCA9IGVtaXRfanVtcF9hbmRfbGluayhSVl9SRUdfWkVSTywgcnZvZmYsIHRydWUsIGN0eCk7XG4xODYxOlx0XHRcdGlmIChyZXQpXG4xODYyOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE4NjM6XHRcdFx0YnJlYWs7XG4xODY0Olx0XG4xODY1Olx0XHQvKiBkc3QgPSBpbW02NCAqL1xuMTg2NjpcdFx0Y2FzZSBCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXOlxuMTg2NzpcdFx0e1xuMTg2ODpcdFx0XHRzdHJ1Y3QgYnBmX2luc24gaW5zbjEgPSBpbnNuWzFdO1xuMTg2OTpcdFx0XHR1NjQgaW1tNjQ7XG4xODcwOlx0XG4xODcxOlx0XHRcdGltbTY0ID0gKHU2NClpbnNuMS5pbW0gXHUwMDNjXHUwMDNjIDMyIHwgKHUzMilpbW07XG4xODcyOlx0XHRcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcbjE4NzM6XHRcdFx0XHQvKiBmaXhlZC1sZW5ndGggaW5zbnMgZm9yIGV4dHJhIGppdCBwYXNzICovXG4xODc0Olx0XHRcdFx0cmV0ID0gZW1pdF9hZGRyKHJkLCBpbW02NCwgZXh0cmFfcGFzcywgY3R4KTtcbjE4NzU6XHRcdFx0XHRpZiAocmV0KVxuMTg3NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjE4Nzc6XHRcdFx0fSBlbHNlIHtcbjE4Nzg6XHRcdFx0XHRlbWl0X2ltbShyZCwgaW1tNjQsIGN0eCk7XG4xODc5Olx0XHRcdH1cbjE4ODA6XHRcbjE4ODE6XHRcdFx0cmV0dXJuIDE7XG4xODgyOlx0XHR9XG4xODgzOlx0XG4xODg0Olx0XHQvKiBMRFg6IGRzdCA9ICoodW5zaWduZWQgc2l6ZSAqKShzcmMgJiM0Mzsgb2ZmKSAqL1xuMTg4NTpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COlxuMTg4NjpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOlxuMTg4NzpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9XOlxuMTg4ODpcdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENhbGwgRW1pc3Npb24qKgoKT2theSwgc28gSSBzZWUgdGhpcyBjb2RlIGlzIHNpbXBseSBlbWl0dGluZyBhIGNhbGwgdG8gYGFkZHJgLiBTaW1wbGUgZW5vdWdoLCBidXQgYSByZWQgZmxhZyBqdXN0IHdlbnQgdXAuIEhhbmcgb24sIHRoZSBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIGZ1bmN0aW9uIGFjdHVhbGx5ICpleHBlY3RzKiB0aGUgc3RhY2sgb2Zmc2V0IGluIGBCUEZfUkVHX0FYYCwgd2hpY2ggdHJhbnNsYXRlcyB0byBgdDBgIGluIHRoZSBSSVNDLVYgQlBGIEpJVCwgYW5kIGl0ICphbHNvKiByZXR1cm5zIHRoZSB1cGRhdGVkIGNvdW50IGluIHRoYXQgdmVyeSBzYW1lIHJlZ2lzdGVyLCBgdDBgLiBUaGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIGNvbnRyb2wgZmxvdy4KCkJ1dCB3YWl0IGEgbWludXRl4oCmIHdvbiYjMzk7dCBgZW1pdF9jYWxsYCBwb3RlbnRpYWxseSBjbG9iYmVyIGB0MGA/IFRoYXQmIzM5O3MgYSBtYWpvciBwcm9ibGVtIGlmIGl0IGRvZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgYGVtaXRfY2FsbGAgcHJlc2VydmVzIGB0MGAuIEJldHRlciBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgcHVsbCB1cCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZW1pdF9jYWxsYCB0aGVyZS4gSSBoYXZlIHRvIGNvbmZpcm0gdGhlIHJlZ2lzdGVyIHVzYWdlIHNvIGFzIHRvIGF2b2lkIGEgbmFzdHksIHVuZXhwZWN0ZWQgYnVnLCB0aGF0IHdvdWxkIHRha2UgZm9yZXZlciB0byBkZWJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1pdF9jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTQ0Nz1zdGF0aWMgYm9vbCBpc19zaWduZWRfYnBmX2NvbmQodTggY29uZClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQ1Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NDUzOnN0YXRpYyBpbnQgZW1pdF9jYWxsKHU2NCBhZGRyLCBib29sIGZpeGVkX2FkZHIsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00NTQte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTM3PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk1Mi1cdGVtaXRfYWRkaShSVl9SRUdfQTEsIFJWX1JFR19GUCwgLXJ1bl9jdHhfb2ZmLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NTM6XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClicGZfdHJhbXBvbGluZV9lbnRlcihwKSwgdHJ1ZSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTU0LVx0aWYgKHJldClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk3MS1cdFx0ZW1pdF9pbW0oUlZfUkVHX0ExLCAoY29uc3QgczY0KXAtXHUwMDNlaW5zbnNpLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NzI6XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClwLVx1MDAzZWJwZl9mdW5jLCB0cnVlLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NzMtXHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTkzLVx0ZW1pdF9hZGRpKFJWX1JFR19BMiwgUlZfUkVHX0ZQLCAtcnVuX2N0eF9vZmYsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjk5NDpcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KWJwZl90cmFtcG9saW5lX2V4aXQocCksIHRydWUsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk5NS1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEwMjI9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTExODQtXHRcdGVtaXRfaW1tKFJWX1JFR19BMCwgY3R4LVx1MDAzZWluc25zID8gKGNvbnN0IHM2NClpbSA6IFJWX01BWF9DT1VOVF9JTU0sIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjExODU6XHRcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KV9fYnBmX3RyYW1wX2VudGVyLCB0cnVlLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTg2LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTIyMC1cdFx0cmVzdG9yZV9zdGFja19hcmdzKG5yX2FyZ19zbG90cyAtIFJWX01BWF9SRUdfQVJHUywgYXJnc19vZmYsIHN0a19hcmdfb2ZmLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjIxOlx0XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClvcmlnX2NhbGwsIHRydWUsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyMjItXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjUzLVx0XHRlbWl0X2ltbShSVl9SRUdfQTAsIGN0eC1cdTAwM2VpbnNucyA/IChjb25zdCBzNjQpaW0gOiBSVl9NQVhfQ09VTlRfSU1NLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjU0Olx0XHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClfX2JwZl90cmFtcF9leGl0LCB0cnVlLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjU1LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTM2OT1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MzktXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE4NDA6XHRcdHJldCA9IGVtaXRfY2FsbChhZGRyLCBmaXhlZF9hZGRyLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODQxLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMxNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGVtaXRfY2FsbGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwYXJzZSB0aGUgbmFtZSBhbmQgd2hhdCB0aGUgaW5wdXRzIGFyZS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IEkgbWlnaHQgYmUgZXhwZWN0aW5nIGEgY2VydGFpbiBraW5kIG9mIGJlaGF2aW9yLCBidXQgSSByZWFsbHkgaGF2ZSB0byBsb29rIGFuZCBzZWUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgY29yZSBjb21wb25lbnQsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBpdCBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IGlzIHRoZSBpbnRlbmRlZCBvdXRwdXQ/IFRoaXMgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBkaXNwYXRjaGluZyBvciB0cmlnZ2VyaW5nIHNvbWV0aGluZywgc28gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhbiBpbnZlc3RpZ2F0aW9uIG9mIGhvdyB0aGUgY2FsbCYjMzk7cyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IHRoZXkgcmVsYXRlIHRvLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2UuIFByb3BlciBlcnJvciBoYW5kbGluZywgb3IgbGFjayB0aGVyZW9mLCBjYW4gYmUgYSBtYWpvciBzb3VyY2Ugb2Ygc3lzdGVtIHZ1bG5lcmFiaWxpdGllcywgc28gSSYjMzk7bSBwcmltZWQgdG8gbG9vayBmb3IgdGhhdCBpbW1lZGlhdGVseS4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGNsb3NlbHksIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGxpa2UgcmFjZSBjb25kaXRpb25zLCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgb3IgaW5lZmZpY2llbnQgY29kZS4gVGhlbiBhZ2FpbiwgaXQgY291bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8ganVkZ2UgdGhhdCBvbmNlIEkmIzM5O3ZlIGhhZCBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUzOlx0c3RhdGljIGludCBlbWl0X2NhbGwodTY0IGFkZHIsIGJvb2wgZml4ZWRfYWRkciwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4gNDU0Olx0e1xuIDQ1NTpcdFx0czY0IG9mZiA9IDA7XG4gNDU2Olx0XHR1NjQgaXA7XG4gNDU3Olx0XG4gNDU4Olx0XHRpZiAoYWRkciBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWluc25zIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlcm9faW5zbnMpIHtcbiA0NTk6XHRcdFx0LypcbiA0NjA6XHRcdFx0ICogVXNlIHRoZSByb19pbnNucyhSWCkgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgYXMgdGhlIEJQRlxuIDQ2MTpcdFx0XHQgKiBwcm9ncmFtIHdpbGwgZmluYWxseSBydW4gZnJvbSB0aGlzIG1lbW9yeSByZWdpb24uXG4gNDYyOlx0XHRcdCAqL1xuIDQ2MzpcdFx0XHRpcCA9ICh1NjQpKGxvbmcpKGN0eC1cdTAwM2Vyb19pbnNucyAmIzQzOyBjdHgtXHUwMDNlbmluc25zKTtcbiA0NjQ6XHRcdFx0b2ZmID0gYWRkciAtIGlwO1xuIDQ2NTpcdFx0fVxuIDQ2NjpcdFxuIDQ2NzpcdFx0cmV0dXJuIGVtaXRfanVtcF9hbmRfbGluayhSVl9SRUdfUkEsIG9mZiwgZml4ZWRfYWRkciwgY3R4KTtcbiA0Njg6XHR9XG4gNDY5Olx0XG4gNDcwOlx0c3RhdGljIGlubGluZSB2b2lkIGVtaXRfa2NmaSh1MzIgaGFzaCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4gNDcxOlx0e1xuIDQ3MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgYGVtaXRfanVtcF9hbmRfbGlua2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBlbWl0X2p1bXBfYW5kX2xpbmtgLiBJdCYjMzk7cyB1c2luZyBgUlZfUkVHX1JBYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIHRoZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlciwgZ29vZC4gQW5kIGl0JiMzOTtzIG5vdCBtZXNzaW5nIHdpdGggYHQwYCB3aGljaCBpcyBgUlZfUkVHX1QwYCwgc28gaXQmIzM5O3Mgbm90IHN0ZXBwaW5nIG9uIGFueXRoaW5nIHRoYXQgaXQgc2hvdWxkbiYjMzk7dC4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb24gdGhpcyAtIHdoYXQmIzM5O3MgYEJQRl9SRUdfQVhgIGFjdHVhbGx5ICptYXBwZWQqIHRvIGluIHRoZSBSSVNDLVYgcmVnaXN0ZXIgYXJjaGl0ZWN0dXJlPyBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBtYXBwaW5nLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gY2F1c2Ugc29tZSB3ZWlyZCBjb25mbGljdCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHRoaW5nIHRvIGdldCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUkVHX0FYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqRGVsdmluZyBpbnRvIFJJU0MtViBCUEYgSklUIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHJlZ2lzdGVyIGFsbG9jYXRpb24gd29ya3MgZm9yIEJQRiBKSVQgb24gUklTQy1WLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZnVuY3Rpb24gb3IgbWFjcm8gcmVzcG9uc2libGUgZm9yIHRyYW5zbGF0aW5nIEJQRiBpbnN0cnVjdGlvbnMgdG8gUklTQy1WIHJlZ2lzdGVyIGFzc2lnbm1lbnRzLiBUaGUgbmFtZSBgYnBmX3RvX3J2X3JlZ2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBzb21ldGhpbmcgd2l0aCBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24sIGFuZCBpdCYjMzk7cyBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiB0aGUgUklTQy1WIHNwZWNpZmljIG5ldHdvcmtpbmcgY29kZS4gVGhhdCBtZWFucyBJIHNob3VsZCBsb29rIGluIGVpdGhlciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYCwgd2hpY2ggd291bGQgY29udGFpbiB0aGUgZGVjbGFyYXRpb25zLCBvciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHdoaWNoIHdvdWxkIHByb2JhYmx5IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlIGxvY2F0aW9ucywgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBvZmZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmlydHVhbCByZWdpc3RlcnMgbWFwIHRvIHBoeXNpY2FsIFJJU0MtViByZWdpc3RlcnMgZHVyaW5nIEpJVCBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUga2V5IHRvIHBlcmZvcm1hbmNlLCByZWFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9SRUdfQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz00Mz1lbnVtIHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU0LVx0QlBGX0FYX0xPLFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo1NTpcdC8qIFN0YWNrIHNwYWNlIGZvciBCUEZfUkVHXzYgdGhyb3VnaCBCUEZfUkVHXzkgYW5kIEJQRl9SRUdfQVguICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTU2LVx0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz03MT1zdGF0aWMgY29uc3QgczggYnBmMnJ2MzJbXVsyXSA9IHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTkwLVx0LyogVGVtcG9yYXJ5IHJlZ2lzdGVyIGZvciBibGluZGluZyBjb25zdGFudHMuIFN0b3JlZCBvbiB0aGUgc3RhY2suICovXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjkxOlx0W0JQRl9SRUdfQVhdID0ge1NUQUNLX09GRlNFVChCUEZfQVhfSEkpLCBTVEFDS19PRkZTRVQoQlBGX0FYX0xPKX0sXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTkyLVx0Lypcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTI5PXN0YXRpYyBjb25zdCBpbnQgcmVnbWFwW10gPSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00MC1cdFtCUEZfUkVHX0ZQXSA9XHRSVl9SRUdfUzUsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjQxOlx0W0JQRl9SRUdfQVhdID1cdFJWX1JFR19UMCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNDItfTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy04LSAqIFRyYW1wb2xpbmUgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZC4gQ3VzdG9tIGNhbGxpbmcgY29udmVudGlvbjpcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjk6ICpcdC0gaW5wdXQ6ICBzdGFjayBvZmZzZXQgaW4gQlBGX1JFR19BWCAodDApXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMDogKlx0LSBvdXRwdXQ6IHVwZGF0ZWQgY291bnQgaW4gQlBGX1JFR19BWCAodDApXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMS0gKlxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTItICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjEzOiAqIHB0ciA9IEJQRl9SRUdfRlAgKHM1KSAmIzQzOyBCUEZfUkVHX0FYICh0MCkuIEJQRiBSMC1SNSAoYTUsIGEwLWE0KSBhcmUgc2F2ZWRcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE0LSAqIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCBhbmQgbmVlZHMgbm8gc2F2aW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSSVNDLVYgQlBGIGBtYXlfZ290b2AgSW1wbGVtZW50YXRpb24gQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIGRvd24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc2V0dGluZyB1cCB0aGUgYG1heV9nb3RvYCBsb29wIGJvdW5kIGNoZWNrIGZvciBSSVNDLVYuIFRoZSBgQlBGX1JFR19BWGAgcmVnaXN0ZXIgaXMgbWFwcGVkIHRvIGBSVl9SRUdfVDBgLCBzbyB0aGUgdmVyaWZpZXIgaXMgZW1pdHRpbmcgdGhpcyBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnM6CgoxLiAgYEJQRl9NT1Y2NF9JTU0oQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudClgOiBUaGlzIG1vdmVzIGFuIGltbWVkaWF0ZSB2YWx1ZSByZXByZXNlbnRpbmcgYW4gb2Zmc2V0IGNvdW50IG9udG8gYHQwYC4KMi4gIGBCUEZfRU1JVF9DQUxMKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKWA6IFRoaXMgaXMgdGhlIGtleS4gVGhlIEpJVCB3aWxsIHRyYW5zbGF0ZSB0aGlzIGludG8gYSBjYWxsIHRvIHRoZSBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIGZ1bmN0aW9uLgozLiAgYEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudClgOiBUaGlzIGluc3RydWN0aW9uIHN0b3JlcyBhIGRvdWJsZS13b3JkIHZhbHVlIGZyb20gYHQwYCB0byBhIG1lbW9yeSBsb2NhdGlvbi4KCk5vdywgdGhlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgYXNzZW1ibHkgaXMgd2hhdCYjMzk7cyByZWFsbHkgaW50ZXJlc3Rpbmc6CgpgYGBhc3NlbWJseQpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bykKCWFkZGkJc3AsIHNwLCAtNjQKCXNkCXJhLCA1NihzcCkKCgkvKiBTYXZlIEJQRiByZWdpc3RlcnMgUjAtUjUgKGE1LCBhMC1hNCkgKi8KCXNkCWE1LCA0OChzcCkKCXNkCWEwLCA0MChzcCkKCXNkCWExLCAzMihzcCkKCXNkCWEyLCAyNChzcCkKCXNkCWEzLCAxNihzcCkKCXNkCWE0LCA4KHNwKQoKCWFkZAlhMCwgdDAsIHM1CgljYWxsCWJwZl9jaGVja190aW1lZF9tYXlfZ290bwoJbXYJdDAsIGEwCgoJLyogUmVzdG9yZSBCUEYgcmVnaXN0ZXJzIFIwLVI1ICovCglsZAlhNCwgOChzcCkKCWxkCWEzLCAxNihzcCkKCWxkCWEyLCAyNChzcCkKCWxkCWExLCAzMihzcCkKCWxkCWEwLCA0MChzcCkKCWxkCWE1LCA0OChzcCkKCglsZAlyYSwgNTYoc3ApCglhZGRpCXNwLCBzcCwgNjQKCXJldApTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pCmBgYAoKVGhpcyBhc3NlbWJseSBzYXZlcyB0aGUgQlBGIHJlZ2lzdGVycyBgUjAtUjVgICh3aGljaCBhcmUgZXF1aXZhbGVudCB0byBgYTUsIGEwLWE0YCBpbiB0aGUgUklTQy1WIGNhbGxpbmcgY29udmVudGlvbikuIFRoZW4sIGl0IGNhbGN1bGF0ZXMgYSB2YWx1ZSwgYGEwID0gdDAgJiM0MzsgczVgLCB3aGljaCBlZmZlY3RpdmVseSBtZWFucyBhZGRpbmcgYEJQRl9SRUdfQVggJiM0MzsgQlBGX1JFR19GUGAsIHBhc3NlcyB0aGlzIHRvIHRoZSBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiwgYW5kIHB1dHMgdGhlIHJlc3VsdCBiYWNrIGludG8gYHQwYCwgYW5kIGZpbmFsbHkgcmVzdG9yZXMgdGhlIEJQRiByZWdpc3RlcnMgYW5kIHJldHVybnMuCgpUaGlzIGlzIGEgcHJldHR5IGNsZWFuIGltcGxlbWVudGF0aW9uIHRvIGVuYWJsZSB0aGUgYG1heV9nb3RvYCBsb29wIGJvdW5kIGNoZWNrIG9uIFJJU0MtViwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkIHRvIHNhZmVseSBleGVjdXRlIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wcyBpbiBCUEYgcHJvZ3JhbXMuCgpTbywgaXMgdGhpcyBjaGFuZ2UgYWN0dWFsbHkgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LCBhc3N1bWluZyB3ZSBsb2FkIGEgQlBGIHByb2dyYW0gdXRpbGl6aW5nIGBtYXlfZ290b2Agb24gYSBSSVNDLVYgc3lzdGVtLgoKQXMgZmFyIGFzIGNvbmZpZ3VyYXRpb25zIGdvLCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklUIGNvbXBpbGVyLCBhbmQgdGhlIHN0YW5kYXJkIFJJU0MtViBjb25maWd1cmF0aW9uIGBDT05GSUdfQVJDSF9SVjY0SWAuIFdlIGFjdHVhbGx5IGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYENPTkZJR19BUkNIX1JWNjRJYCBzaW5jZSBpdCBpcyB0aGUgZGVmYXVsdCA2NC1iaXQgYXJjaGl0ZWN0dXJlIGNvbmZpZywgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuIEFuZCwgb2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgdG8gYmUgYWJsZSB0byBsb2FkIGFueSBCUEYgcHJvZ3JhbXMgaW4gdGhlIGZpcnN0IHBsYWNlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgY2hlY2sgaW4gdGhlIGBhcmNoL3Jpc2N2L25ldC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIEJQRiBzdXBwb3J0LCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29yZS5vXG4gICA0Olx0XG4gICA1Olx0aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcbiAgIDY6XHRcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuICAgNzpcdGVsc2VcbiAgIDg6XHRcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuICAgOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTc3CgkJCQkJCQlvdXRwdXQ6IDE0NwoJCQkJCQkJdGhvdWdodHM6IDg0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQlBGIFRpbWVkIE1heV9Hb3RvIFBhdGNoIGZvciBSSVNDLVYqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIFJJU0MtViBzdXBwb3J0IGZvciB0aGUgYGJwZl90aW1lZF9tYXlfZ290b2AgbG9vcCBib3VuZC4gVGhlIG9ubHkgY29uZmlndXJhdGlvbnMgaW1wYWN0ZWQgaGVyZSBzZWVtIHRvIGJlIGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQVJDSF9SVjY0SWAsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciBhIFJJU0MtViBhZGRpdGlvbi4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBuZXcgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCBhc3NlbWJseS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGZ1enogYXNzZW1ibHkgd2VsbCB0aHJvdWdoIGNvdmVyYWdlLCB0aG91Z2ggaXQgY2FuIGZ1enogdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHRyaWdnZXIgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZXJlJiMzOTtzIGFsc28gYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gLCB3aGljaCB0aGUgcGF0Y2ggYWxzbyBhZGRzLgoKVGhlIHZlcmlmaWVyIGVtaXRzIGEgY2FsbCwgYW5kIHRoZSBKSVQgY29tcGlsZXMgaXQuIFRoZSBDIGZ1bmN0aW9uIGBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9gIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NlbWJseSwgYnV0IHRoaXMgaXNuJiMzOTt0IG1vZGlmaWVkIGluIHRoZSBwYXRjaC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGFkZGluZyBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvYCB0byBgRm9jdXNTeW1ib2xzYCwgYnV0IGl0JiMzOTtzIG5vdCBhY3R1YWxseSBjaGFuZ2VkIGluIHRoaXMgcGF0Y2guCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gIGFuZCBhZGRzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AuIFNpbmNlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaXMgaW4gYXNzZW1ibHksIGl0IG1pZ2h0IG5vdCBoYXZlIGNvdmVyYWdlLiBgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b2AgaXMganVzdCBgcmV0dXJuIHRydWU7YC4gSG1tLiBTbywgaXQmIzM5O3Mgbm90IGEgY29tcGxpY2F0ZWQgZnVuY3Rpb24uCgpObyBvdGhlciBmdW5jdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGZvciBvdGhlciBmaWxlIG1vZGlmaWNhdGlvbnMuIE9rYXksIEkgc2VlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY2AgYXJlIGFsc28gbW9kaWZpZWQuIFNvLCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCwgYWRkaW5nIFJJU0MtViBzdXBwb3J0IGZvciBgYnBmX3RpbWVkX21heV9nb3RvYC4KCkdpdmVuIHRoYXQsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKRm9yIGBFbmFibGVDb25maWdzYCwgYEJQRl9KSVRgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIGBBUkNIX1JWNjRJYCBpcyBzdGFuZGFyZCBmb3IgcmlzY3Y2NCwgc28gaXQmIzM5O3MgYSBnaXZlbi4gQWxzbywgYEJQRl9TWVNDQUxMYCBpcyBuZWNlc3NhcnkgdG8gdXNlIEJQRi4gSSYjMzk7bSBnb2luZyB0byBsaXN0IGp1c3QgYEJQRl9KSVRgLgoKRm9yIGBGb2N1c1N5bWJvbHNgLCBJIGhhdmUgdG8gYmUgc21hcnQgaGVyZS4gVGhlIHByb21wdCBzYXlzIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyB3aXRoIGNvbXBsZXggbG9naWMsIGJ1dCBhdm9pZCBnZW5lcmljIGhvdHBhdGhzLiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGhlcmUgYXJlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgKGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGFzc2VtYmx5LCBpdCYjMzk7cyB3b3J0aCBhIHNob3QsIG1pZ2h0IGhhdmUgc29tZSBpbnN0cnVtZW50YXRpb24pIGFuZCBgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b2AuIEkgd2lsbCBpbmNsdWRlIGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCBhbmQgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYC4KCkxldCBtZSBxdWlja2x5IHJlLWl0ZXJhdGU6IHVzdWFsbHkgYC5TYCBmaWxlcyBhcmUgbm90IGluc3RydW1lbnRlZCBieSBLQ09WIHVubGVzcyBleHBsaWNpdGx5IGVuYWJsZWQsIGFuZCBldmVuIHRoZW4sIGl0JiMzOTtzIHRyaWNreS4gQnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gaW5jbHVkZSBpdC4KCkJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlIHJlYXNvbmluZyBpcyAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgQlBGIHRpbWVkIG1heV9nb3RvIGxvb3AgYm91bmQgb24gUklTQy1WIDY0LWJpdC4gSXQgYWRkcyB0aGUgYXJjaF9icGZfdGltZWRfbWF5X2dvdG8gYXNzZW1ibHkgdHJhbXBvbGluZSBhbmQgZW5hYmxlcyBpdCBpbiB0aGUgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgd2l0aCBtYXlfZ290byBpbnN0cnVjdGlvbnMgb24gUklTQy1WLiYjMzQ7CgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QVJDSF9SVjY0SSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBBcmNoaXRlY3R1cmUgSWRlbnRpZmllcioqCgpIbW0sIHNvIGBBUkNIX1JWNjRJYCBpc24mIzM5O3QgZGVmaW5lZCwgaXMgdGhhdCByaWdodD8gVGhhdCYjMzk7cy4uLiB1bmV4cGVjdGVkLiBPa2F5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGFyY2hpdGVjdHVyZSBjb25maWd1cmF0aW9uIGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uIG9yIHBvdGVudGlhbGx5IGFueSByZWxldmFudCBpbmNsdWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3ltYm9sIGlzIHVuZGVmaW5lZCBiZWZvcmUgSSBnbyBkb3duIGEgcmFiYml0IGhvbGUuIExldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBkZWZpbmVkIG9yIGlmIEkganVzdCBuZWVkIHRvIGFkZCBpdCB0aGVyZS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX1JWNjRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTQwNT1jb25maWcgQVJDSF9SVjMySVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00MTAtXG5hcmNoL3Jpc2N2L0tjb25maWc6NDExOmNvbmZpZyBBUkNIX1JWNjRJXG5hcmNoL3Jpc2N2L0tjb25maWctNDEyLVx0Ym9vbCBcJiMzNDtSVjY0SVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI2NQoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNeXN0ZXJ5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgY291bGQgaGF2ZSBzd29ybiBJIHNhdyB0aGlzIHRoaW5nIOKAkyB3aGF0ZXZlciAmIzM0O3RoaXMgdGhpbmcmIzM0OyBpcywgbGV0JiMzOTtzIGNhbGwgaXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIC0gaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgZmlsZXMuIFNwZWNpZmljYWxseSwgSSByZW1lbWJlciBzZWVpbmcgaXQgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFNvLCB3aGF0IGRpZCBgc2V0LXJlc3VsdHNgIHJlcG9ydD8gVGhhdCBpdCBkb2VzbiYjMzk7dCBleGlzdD8gVGhhdCYjMzk7c+KApiBzdHJhbmdlLiBTb21ldGhpbmcmIzM5O3MgY2xlYXJseSBub3QgcmlnaHQgaGVyZS4KCkFoYSEgUGVyaGFwcyB0aGUgaXNzdWUgaXNuJiMzOTt0IHdoZXRoZXIgdGhlIG9wdGlvbiAqZXhpc3RzKiwgYnV0IGhvdyB0aGUgdG9vbCBpcyBsb29raW5nIGZvciBpdC4gTWF5YmUgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBpc24mIzM5O3QgcHJlY2lzZWx5IHdoYXQgdGhlIHRvb2wgaXMgZXhwZWN0aW5nLiBJcyBpdCBwb3NzaWJsZSB0aGUgdG9vbCBpcyBjaGVja2luZyB0aGUgKmdsb2JhbCogS2NvbmZpZyBmaWxlLCBhbmQgaXTigJlzIGFjdHVhbGx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgZGVmaW5lZCB1bmRlciBzb21ldGhpbmcgbGlrZSBgQVJDSF9SVjY0SWA/IE9yLCBlcXVhbGx5IGxpa2VseSwgdGhpcyBjb3VsZCBiZSBhIHNpbXBsZSBidWcgaW4gdGhlIHRvb2wgaXRzZWxmLiBJ4oCZdmUgc2VlbiB3ZWlyZGVyIHRoaW5ncyBpbiB0aGVzZSBraW5kcyBvZiBlbnZpcm9ubWVudHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgbm90IHdhc3RlIGFueSBtb3JlIHRpbWUgd3Jlc3RsaW5nIHdpdGggdGhpcyByYWJiaXQgaG9sZS4gSSYjMzk7bGwganVzdCBmYWxsIGJhY2sgdG8gdGhlIHRyaWVkIGFuZCB0cnVlIGFwcHJvYWNoIG9mIHVzaW5nIGBCUEZfSklUYC4gVGhhdCBzaG91bGQgd29yay4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgbGF0ZXIgdG8gc2VlIGlmIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RpbWVkX21heV9nb3RvJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjIzLjMxMjQzOTc1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTc4MjI0Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90aW1lZF9tYXlfZ290b1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjIzLjMxMjQ0NjM2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MTkxMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDQ3NjNjOWJkZmI2N2Q2OTVmNmE0MTk2MWQxYjE5NGFhM2U5MzMzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAxNCAwODowMjoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZSBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXFxuaW5kZXggOWExZTVmMGE5NGU1NTkuLjY0NThkNGQ1MTk5MGE3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcXG5AQCAtMyw3ICszLDcgQEBcXG4gb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29yZS5vXFxuIFxcbiBpZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbi1cXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wNjQub1xcbitcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wNjQubyBicGZfdGltZWRfbWF5X2dvdG8ub1xcbiBlbHNlXFxuIFxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuIGVuZGlmXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggYzAzYzFkZTE2Yjc5YWMuLjk4MzJhMTkyMDBjNzVjIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTIxNTcsMyArMjE1Nyw4IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuK1xcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8odm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUyBiL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU0ZjM4OWQ5MjFlMDVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlNcXG5AQCAtMCwwICsxLDQ0IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBGZW5nIEppYW5nIFxcdTAwM2NqaWFuZ2ZlbmdAa3lsaW5vcy5jblxcdTAwM2UgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW5rYWdlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYXNtLmhcXHUwMDNlXFxuK1xcbisvKlxcbisgKiBUcmFtcG9saW5lIGZvciB0aGUgQlBGIHRpbWVkIG1heV9nb3RvIGxvb3AgYm91bmQuIEN1c3RvbSBjYWxsaW5nIGNvbnZlbnRpb246XFxuKyAqXFx0LSBpbnB1dDogIHN0YWNrIG9mZnNldCBpbiBCUEZfUkVHX0FYICh0MClcXG4rICpcXHQtIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MClcXG4rICpcXG4rICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcXG4rICogcHRyID0gQlBGX1JFR19GUCAoczUpICsgQlBGX1JFR19BWCAodDApLiBCUEYgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkXFxuKyAqIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCBhbmQgbmVlZHMgbm8gc2F2aW5nLlxcbisgKi9cXG4rXFxuK1NZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbitcXHRhZGRpXFx0c3AsIHNwLCAtNjRcXG4rXFx0c2RcXHRyYSwgNTYoc3ApXFxuK1xcbitcXHQvKiBTYXZlIEJQRiByZWdpc3RlcnMgUjAtUjUgKGE1LCBhMC1hNCkgKi9cXG4rXFx0c2RcXHRhNSwgNDgoc3ApXFxuK1xcdHNkXFx0YTAsIDQwKHNwKVxcbitcXHRzZFxcdGExLCAzMihzcClcXG4rXFx0c2RcXHRhMiwgMjQoc3ApXFxuK1xcdHNkXFx0YTMsIDE2KHNwKVxcbitcXHRzZFxcdGE0LCA4KHNwKVxcbitcXG4rXFx0YWRkXFx0YTAsIHQwLCBzNVxcbitcXHRjYWxsXFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXFxuK1xcdG12XFx0dDAsIGEwXFxuK1xcbitcXHQvKiBSZXN0b3JlIEJQRiByZWdpc3RlcnMgUjAtUjUgKi9cXG4rXFx0bGRcXHRhNCwgOChzcClcXG4rXFx0bGRcXHRhMywgMTYoc3ApXFxuK1xcdGxkXFx0YTIsIDI0KHNwKVxcbitcXHRsZFxcdGExLCAzMihzcClcXG4rXFx0bGRcXHRhMCwgNDAoc3ApXFxuK1xcdGxkXFx0YTUsIDQ4KHNwKVxcbitcXG4rXFx0bGRcXHRyYSwgNTYoc3ApXFxuK1xcdGFkZGlcXHRzcCwgc3AsIDY0XFxuK1xcdHJldFxcbitTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbmluZGV4IDkyYmExZDcyZTBlY2U0Li44ZDhlNTNkMzcyNjZjZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG5AQCAtNjQsNiArNjQsNyBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcbiBfX2FyY2hfczM5MHhcXG4rX19hcmNoX3Jpc2N2NjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIF9fc3RkZXJyKFxcXCJFUlJPUjogVGltZW91dCBkZXRlY3RlZCBmb3IgbWF5X2dvdG8gaW5zdHJ1Y3Rpb25cXFwiKVxcbiBfX3N0ZGVycihcXFwiQ1BVOiB7e1swLTldK319IFVJRDogMCBQSUQ6IHt7WzAtOV0rfX0gQ29tbToge3suKn19XFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tYXlfZ290b18xLmNcXG5pbmRleCA0YmRmNDI1NmE0MWU1MS4uZjQ3YjlkNTQwYTE3NTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tYXlfZ290b18xLmNcXG5AQCAtMTEsNiArMTEsNyBAQCBfX2Rlc2NyaXB0aW9uKFxcXCJtYXlfZ290byAwXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbiBfX2FyY2hfczM5MHhcXG4gX19hcmNoX2FybTY0XFxuK19fYXJjaF9yaXNjdjY0XFxuIF9feGxhdGVkKFxcXCIwOiByMCA9IDFcXFwiKVxcbiBfX3hsYXRlZChcXFwiMTogZXhpdFxcXCIpXFxuIF9fc3VjY2Vzc1xcbkBAIC0zMSw2ICszMiw3IEBAIF9fZGVzY3JpcHRpb24oXFxcImJhdGNoIDIgb2YgbWF5X2dvdG8gMFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4gX19hcmNoX3MzOTB4XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX3hsYXRlZChcXFwiMDogcjAgPSAxXFxcIilcXG4gX194bGF0ZWQoXFxcIjE6IGV4aXRcXFwiKVxcbiBfX3N1Y2Nlc3NcXG5AQCAtNTMsNiArNTUsNyBAQCBfX2Rlc2NyaXB0aW9uKFxcXCJtYXlfZ290byBiYXRjaCB3aXRoIG9mZnNldHMgMi8xLzBcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9zMzkweFxcbiBfX2FyY2hfYXJtNjRcXG4rX19hcmNoX3Jpc2N2NjRcXG4gX194bGF0ZWQoXFxcIjA6IHIwID0gMVxcXCIpXFxuIF9feGxhdGVkKFxcXCIxOiBleGl0XFxcIilcXG4gX19zdWNjZXNzXFxuQEAgLTc5LDYgKzgyLDcgQEAgX19kZXNjcmlwdGlvbihcXFwibWF5X2dvdG8gYmF0Y2ggd2l0aCBvZmZzZXRzIDIvMFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4gX19hcmNoX3MzOTB4XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX3hsYXRlZChcXFwiMDogKih1NjQgKikocjEwIC0xNikgPSA2NTUzNVxcXCIpXFxuIF9feGxhdGVkKFxcXCIxOiAqKHU2NCAqKShyMTAgLTgpID0gMFxcXCIpXFxuIF9feGxhdGVkKFxcXCIyOiByMTIgPSAqKHU2NCAqKShyMTAgLTE2KVxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjI0LjA4MjExMzM2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0MDg1MzYxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfYnBmX3RpbWVkX21heV9nb3RvXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDc2M2M5YmRmYjY3ZDY5NWY2YTQxOTYxZDFiMTk0YWEzZTkzMzM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMDg6MDI6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZSBiL2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlXG5pbmRleCA5YTFlNWYwYTk0ZTU1OS4uNjQ1OGQ0ZDUxOTkwYTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZVxuKysrIGIvYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcbkBAIC0zLDcgKzMsNyBAQFxuIG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xuIFxuIGlmZXEgKCQoQ09ORklHX0FSQ0hfUlY2NEkpLHkpXG4tXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wNjQub1xuK1x0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbiBlbHNlXG4gXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wMzIub1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGMwM2MxZGUxNmI3OWFjLi45ODMyYTE5MjAwYzc1YyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0yMTU3LDMgKzIxNTcsOCBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TIGIvYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjU0ZjM4OWQ5MjFlMDVcbi0tLSAvZGV2L251bGxcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TXG5AQCAtMCwwICsxLDQ0IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRmVuZyBKaWFuZyBcdTAwM2NqaWFuZ2ZlbmdAa3lsaW5vcy5jblx1MDAzZSAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9hc20uaFx1MDAzZVxuK1xuKy8qXG4rICogVHJhbXBvbGluZSBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kLiBDdXN0b20gY2FsbGluZyBjb252ZW50aW9uOlxuKyAqXHQtIGlucHV0OiAgc3RhY2sgb2Zmc2V0IGluIEJQRl9SRUdfQVggKHQwKVxuKyAqXHQtIG91dHB1dDogdXBkYXRlZCBjb3VudCBpbiBCUEZfUkVHX0FYICh0MClcbisgKlxuKyAqIENhbGxzIGJwZl9jaGVja190aW1lZF9tYXlfZ290byhwdHIpIHdpdGggdGhlIHN0YW5kYXJkIFJJU0MtViBBQkksIHdoZXJlXG4rICogcHRyID0gQlBGX1JFR19GUCAoczUpICsgQlBGX1JFR19BWCAodDApLiBCUEYgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkXG4rICogYWNyb3NzIHRoZSBjYWxsOyBCUEZfUkVHX0ZQIChzNSkgaXMgY2FsbGVlLXNhdmVkIGFuZCBuZWVkcyBubyBzYXZpbmcuXG4rICovXG4rXG4rU1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG4rXHRhZGRpXHRzcCwgc3AsIC02NFxuK1x0c2RcdHJhLCA1NihzcClcbitcbitcdC8qIFNhdmUgQlBGIHJlZ2lzdGVycyBSMC1SNSAoYTUsIGEwLWE0KSAqL1xuK1x0c2RcdGE1LCA0OChzcClcbitcdHNkXHRhMCwgNDAoc3ApXG4rXHRzZFx0YTEsIDMyKHNwKVxuK1x0c2RcdGEyLCAyNChzcClcbitcdHNkXHRhMywgMTYoc3ApXG4rXHRzZFx0YTQsIDgoc3ApXG4rXG4rXHRhZGRcdGEwLCB0MCwgczVcbitcdGNhbGxcdGJwZl9jaGVja190aW1lZF9tYXlfZ290b1xuK1x0bXZcdHQwLCBhMFxuK1xuK1x0LyogUmVzdG9yZSBCUEYgcmVnaXN0ZXJzIFIwLVI1ICovXG4rXHRsZFx0YTQsIDgoc3ApXG4rXHRsZFx0YTMsIDE2KHNwKVxuK1x0bGRcdGEyLCAyNChzcClcbitcdGxkXHRhMSwgMzIoc3ApXG4rXHRsZFx0YTAsIDQwKHNwKVxuK1x0bGRcdGE1LCA0OChzcClcbitcbitcdGxkXHRyYSwgNTYoc3ApXG4rXHRhZGRpXHRzcCwgc3AsIDY0XG4rXHRyZXRcbitTWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCA5MmJhMWQ3MmUwZWNlNC4uOGQ4ZTUzZDM3MjY2Y2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTY0LDYgKzY0LDcgQEAgU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiBfX2FyY2hfczM5MHhcbitfX2FyY2hfcmlzY3Y2NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIF9fc3RkZXJyKFwiRVJST1I6IFRpbWVvdXQgZGV0ZWN0ZWQgZm9yIG1heV9nb3RvIGluc3RydWN0aW9uXCIpXG4gX19zdGRlcnIoXCJDUFU6IHt7WzAtOV0rfX0gVUlEOiAwIFBJRDoge3tbMC05XSt9fSBDb21tOiB7ey4qfX1cIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWF5X2dvdG9fMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuaW5kZXggNGJkZjQyNTZhNDFlNTEuLmY0N2I5ZDU0MGExNzU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY1xuQEAgLTExLDYgKzExLDcgQEAgX19kZXNjcmlwdGlvbihcIm1heV9nb3RvIDBcIilcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX3MzOTB4XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX3hsYXRlZChcIjA6IHIwID0gMVwiKVxuIF9feGxhdGVkKFwiMTogZXhpdFwiKVxuIF9fc3VjY2Vzc1xuQEAgLTMxLDYgKzMyLDcgQEAgX19kZXNjcmlwdGlvbihcImJhdGNoIDIgb2YgbWF5X2dvdG8gMFwiKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfczM5MHhcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9feGxhdGVkKFwiMDogcjAgPSAxXCIpXG4gX194bGF0ZWQoXCIxOiBleGl0XCIpXG4gX19zdWNjZXNzXG5AQCAtNTMsNiArNTUsNyBAQCBfX2Rlc2NyaXB0aW9uKFwibWF5X2dvdG8gYmF0Y2ggd2l0aCBvZmZzZXRzIDIvMS8wXCIpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuK19fYXJjaF9yaXNjdjY0XG4gX194bGF0ZWQoXCIwOiByMCA9IDFcIilcbiBfX3hsYXRlZChcIjE6IGV4aXRcIilcbiBfX3N1Y2Nlc3NcbkBAIC03OSw2ICs4Miw3IEBAIF9fZGVzY3JpcHRpb24oXCJtYXlfZ290byBiYXRjaCB3aXRoIG9mZnNldHMgMi8wXCIpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9zMzkweFxuIF9fYXJjaF9hcm02NFxuK19fYXJjaF9yaXNjdjY0XG4gX194bGF0ZWQoXCIwOiAqKHU2NCAqKShyMTAgLTE2KSA9IDY1NTM1XCIpXG4gX194bGF0ZWQoXCIxOiAqKHU2NCAqKShyMTAgLTgpID0gMFwiKVxuIF9feGxhdGVkKFwiMjogcjEyID0gKih1NjQgKikocjEwIC0xNilcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjI0LjA4MjExNzI0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDkwNDIzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUklTQy1WIEJQRiBKSVQgU3VwcG9ydCBmb3IgYGJwZl90aW1lZF9tYXlfZ290b2AgLSBDb25zaWRlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGBicGZfdGltZWRfbWF5X2dvdG9gIGluIHRoZSBSSVNDLVYgQlBGIEpJVC4gRXNzZW50aWFsbHksIGl0J3MgYWRkaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdXBwb3J0IGZvciBhbiBleGlzdGluZyBmZWF0dXJlLiBMZXQncyBicmVhayBpdCBkb3duOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBNYWtlZmlsZWAgdG8gaW5jbHVkZSB0aGUgbmV3IG9iamVjdCBmaWxlLCBhbmQgaXQgYWRkcyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnRpbmcgZnVuY3Rpb24gYW5kIGFzc2VtYmx5LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgXCJJcyB0aGlzIGdvaW5nIHRvIGJlIGZ1enplZCBlZmZlY3RpdmVseT9cIi5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGJlaW5nICpleGVyY2lzZWQqLiBTeXprYWxsZXIgaXMgdGhlIGdvLXRvIHRvb2wgZm9yIGZ1enppbmcgYW5kIHdpbGwgY2F0Y2ggbWFueSBwb3RlbnRpYWwgaXNzdWVzLiBHaXZlbiB0aGF0IFN5emthbGxlciBmdXp6ZXMgUklTQy1WLCB0aGlzIHNob3VsZCwgaW4gcHJpbmNpcGxlLCBiZSByZWFjaGFibGUuIFRoZSBjb25maWdzIHRoYXQgYXJlIHJlcXVpcmVkIChgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0FSQ0hfUlY2NElgKSBhcmUgcHJldHR5IHN0YW5kYXJkIGZvciBlbmFibGluZyB0aGUgSklUIGFuZCB0YXJnZXRpbmcgdGhlIDY0LWJpdCBSSVNDLVYgYXJjaGl0ZWN0dXJlLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBjb21wb25lbnRzIGhlcmU6IGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AsIHdoaWNoIGlzIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGF0IEMgY29kZSBhY3R1YWxseSAqY2FsbHMqIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEknbSBnb2luZyB0byBxdWlja2x5IHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyB1c2VkIGFuZCBoZW5jZSwgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6MzEuNTMxMTYyMzU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ0ODUxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9icGZfdGltZWRfbWF5X2dvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTI1Mz1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1Ny1cXHRcXHQvKlxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE2NTg6XFx0XFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTY1OS1cXHRcXHQgKiB2ZXJpZmllciBhbmQgY2FsbGVkIHdpdGggY3VzdG9tIGNhbGxpbmcgY29udmVudGlvbiB3aXRoXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xNjYxLVxcdFxcdCAqL1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE2NjI6XFx0XFx0aWYgKGZ1bmNfYWRkciAhPSAodTY0KWFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE2NjMtXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDEsIHIwLCBBNjRfUigwKSksIGN0eCk7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjY6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNy1cXHQvKiBBbGxvY2F0ZSBzdGFjayBzcGFjZSBhbmQgZW1pdCBmcmFtZSByZWNvcmQgKi9cXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIwLVxcdCAqXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MjE6XFx0ICogQmVmb3JlIGdlbmVyYXRpbmcgdGhlIGNhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8sIHRoZSB2ZXJpZmllclxcbmFyY2gvYXJtNjQvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIyLVxcdCAqIGdlbmVyYXRlcyBhIGxvYWQgaW5zdHJ1Y3Rpb24gdXNpbmcgRlAsIGkuZS4gUkVHX0FYID0gKih1NjQgKikoRlAgLVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMzktXFx0cmV0XFxuYXJjaC9hcm02NC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDA6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk2Nz1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTc2OS1cXHRcXHRcXHQvKlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxNzcwOlxcdFxcdFxcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzcxLVxcdFxcdFxcdCAqIHZlcmlmaWVyIGFuZCBjYWxsZWQgd2l0aCBjdXN0b20gY2FsbGluZyBjb252ZW50aW9uIHdpdGhcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzgyLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxNzgzOlxcdFxcdFxcdGlmIChmdW5jX2FkZHIgPT0gKHU2NClhcmNoX2JwZl90aW1lZF9tYXlfZ290bykge1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzg0LVxcdFxcdFxcdFxcdHJldCA9IDA7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTctLypcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjg6ICogYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSB0cmFtcG9saW5lIGZvciBwb3dlcnBjNjRcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTktICpcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTktXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoyMDpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVxcdC8qIFByb2xvZ3VlOiBzYXZlIExSLCBhbGxvY2F0ZSBmcmFtZSAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01Ni1cXHRibHJcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjU3OlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE2LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjE3OlNZTV9GVU5DX1NUQVJUKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTE4LVxcdGFkZGlcXHRzcCwgc3AsIC02NFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtNDMtXFx0cmV0XFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NDQ6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz04NzY9c3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTg0MS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE4NDI6XFx0XFx0aWYgKCh2b2lkICopZnVuYyA9PSBhcmNoX2JwZl90aW1lZF9tYXlfZ290bykge1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTg0My1cXHRcXHRcXHQvKlxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTg0NDpcXHRcXHRcXHQgKiBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGhhcyBhIHNwZWNpYWwgQUJJOiB0aGVcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE4NDUtXFx0XFx0XFx0ICogcGFyYW1ldGVycyBhcmUgaW4gQlBGX1JFR19BWCBhbmQgQlBGX1JFR18xMDsgdGhlXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTIxLVxcbmFyY2gvczM5MC9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MjI6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0yMy1cXHQvKlxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy00NC1cXHRCUl9FWCAlcjFcXG5hcmNoL3MzOTAvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQ1OlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xMC1cXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6MTE6U1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXFxuYXJjaC94ODYvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTEyLVxcdEFOTk9UQVRFX05PRU5EQlJcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy01NC1cXHRSRVRcXG5hcmNoL3g4Ni9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlM6NTU6U1lNX0ZVTkNfRU5EKGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMTk0PXZvaWQgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSwgdm9pZCAqY29va2llKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExOTU6dTY0IGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTE5Ni11NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzI1PWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG8odm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMjktXFxua2VybmVsL2JwZi9jb3JlLmM6MzMzMDp1NjQgX193ZWFrIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKHZvaWQpXFxua2VybmVsL2JwZi9jb3JlLmMtMzMzMS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0ODE9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzY1LVxcdFxcdFxcdCAqIHVudGlsIHRoZSB2YWx1ZSBiZWNvbWVzIDAgaW4gQVggKHRodXMsIDEgaW4gc3RhY2spLFxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTc2NjpcXHRcXHRcXHQgKiBhZnRlciB3aGljaCB3ZSBjYWxsIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvLCB3aGljaFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc2Ny1cXHRcXHRcXHQgKiBlaXRoZXIgc2V0cyBBWCB0byAweGZmZmYgdG8ga2VlcCBsb29waW5nLCBvciB0byAwXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3ODMtXFx0XFx0XFx0ICogKHRvIGFkZCB0byByMTAvZnApLCBhbmQgYWxzbyBhcyB0aGUgcmV0dXJuIHZhbHVlIG9mXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzg0OlxcdFxcdFxcdCAqIHRoZSBjYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4NS1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3ODYtXFx0XFx0XFx0aW5zbl9idWZbNF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTc4NzpcXHRcXHRcXHRpbnNuX2J1Zls1XSA9IEJQRl9FTUlUX0NBTEwoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc4OC1cXHRcXHRcXHRpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjM2LjMzNTY1OTI5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjU0NzA3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBSSVNDLVYgQlBGIEpJVCBIYW5kbGluZyBvZiBgbWF5X2dvdG9gKipcblxuT2theSwgc28gdGhlIEJQRiBKSVQgY2FsbHMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCB3aGVuIGl0IGVuY291bnRlcnMgdGhvc2UgYG1heV9nb3RvYCBpbnN0cnVjdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2UuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBsb29raW5nIGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCwgSSdtIG5vdCBzZWVpbmcgYW55IGV4cGxpY2l0IGhhbmRsaW5nIG9mIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaW4gdGhhdCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24gKnNob3VsZCogYmUgdXRpbGl6ZWQsIGFjY29yZGluZyB0byB0aGUgYXJjaGl0ZWN0dXJlLiBUaGF0J3MgdW51c3VhbC4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGFyb3VuZCB0aGUgdXNlIG9mIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2Agd2l0aGluIGBicGZfaml0X2NvbXA2NC5jYCB0byBzZWUgaWYgdGhlcmUncyBzb21ldGhpbmcgSSdtIG1pc3NpbmcuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo0MC4zMDExMzI0NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MjYxMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfYnBmX3RpbWVkX21heV9nb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxNzpTWU1fRlVOQ19TVEFSVChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xOC1cXHRhZGRpXFx0c3AsIHNwLCAtNjRcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTQzLVxcdHJldFxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TOjQ0OlNZTV9GVU5DX0VORChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6NDAuNDkwNDAxMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM2MjY5OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBCUEYgSklUIGFuZCBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gKipcblxuT2theSwgc28gSSB3YXMgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBSSVNDLVYgSklUIGhhbmRsZXMgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYC4gSW5pdGlhbGx5LCBJIGFzc3VtZWQgaXQgd291bGRuJ3QgcmVxdWlyZSBhbnkgc3BlY2lhbCB0cmVhdG1lbnQsIHRoYXQgaXQnZCBzaW1wbHkgZW1pdCBhIHN0YW5kYXJkIGNhbGwgdG8gaXQuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaXMgYSBCUEYgaGVscGVyIGNhbGwuIFRoZSB2ZXJpZmllciBlbWl0cyBgQlBGX0VNSVRfQ0FMTChhcmNoX2JwZl90aW1lZF9tYXlfZ290bylgLCByaWdodD9cblxuU28sIHRoZSBKSVQgKnNob3VsZCoganVzdCBjb21waWxlIHRoYXQgYXMgYSBub3JtYWwgY2FsbC4gQnV0IGhhbmcgb24sIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaGFzIGEgKmN1c3RvbSogY2FsbGluZyBjb252ZW50aW9uISBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgSklUIGFjY291bnRzIGZvciB0aGlzLlxuXG5MZXQncyBsb29rIGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uU2AuIEFoLCB5ZXMuIEl0J3MgYSB0cmFtcG9saW5lLiBUaGUgaW5wdXQgaXMgYSBzdGFjayBvZmZzZXQgaW4gYEJQRl9SRUdfQVhgICh0MCksIGFuZCB0aGUgb3V0cHV0IGlzIHRoZSB1cGRhdGVkIGNvdW50LCBhbHNvIGluIGBCUEZfUkVHX0FYYCAodDApLiBJdCBjYWxscyBgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cilgLCB3aGVyZSBgcHRyYCBpcyB0aGUgcmVzdWx0IG9mIGBCUEZfUkVHX0ZQYCAoczUpICsgYEJQRl9SRUdfQVhgICh0MCkuIEJQRiByZWdpc3RlcnMgUjAtUjUgKGE1LCBhMC1hNCkgYXJlIHNhdmVkIGFjcm9zcyB0aGUgY2FsbDsgQlBGX1JFR19GUCAoczUpIGlzIGNhbGxlZS1zYXZlZCwgc28gbm8gc2F2aW5nIGlzIG5lZWRlZC5cblxuU28sIHRoZSB2ZXJpZmllciBlbWl0cyBhIGNhbGwgdG8gYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCwgYW5kIHRoZSBKSVQgdHJhbnNsYXRlcyB0aGlzIHRvIGEgY2FsbCB0byBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gLiBUaGlzIGFsbCBzZWVtcyBjb3JyZWN0LiBCdXQgaG93IGV4YWN0bHkgZG9lcyB0aGUgSklUIHRyYW5zbGF0ZSBhIGNhbGwgdG8gYSBmaXhlZCBhZGRyZXNzIGluIFJJU0MtVj8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcy4gTGV0J3MgY2hlY2sgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIHRvIHNlZSBob3cgYEJQRl9DQUxMYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXRhaWxzIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI5MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo0Ny42MjY2NzMwMzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNjU5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz00MDY9c3RhdGljIHZvaWQgaW5pdF9yZWdzKHU4ICpyZCwgdTggKnJzLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQxMi1cXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkE6XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo0MTM6XFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0NBTEw6XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00MTQtXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE3ODktXFx0LyogZnVuY3Rpb24gY2FsbCAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTc5MDpcXHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE3OTEtXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo0OC4xNTczNDE3MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk1NDY4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGF0aW9uIGZvciBDYWxscyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYEJQRl9KTVAgfCBCUEZfQ0FMTGAgaW5zdHJ1Y3Rpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFJJU0MtViBCUEYgSklUIGNvbXBpbGVyLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQgbWUgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MgdGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3BlY2lmaWMgQlBGIG9wY29kZSBpcyBtYXBwZWQgdG8gUklTQy1WIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgdGhlIGhhbmRsaW5nIG9mIGZ1bmN0aW9uIGFyZ3VtZW50cywgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGNhbGwgaXRzZWxmLiBXaGF0IFJJU0MtViBpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIHVzZWQ/IEhvdyBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgbWFuYWdlZD8gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIGJlaW5nIGRvbmUgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHR5cGUgb2YganVtcD8gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIEJQRiBvbiB0aGlzIGFyY2hpdGVjdHVyZSBhbmQgbGV0IG1lIHNlZSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQncyBzZWUgaG93IHRoZXkndmUgYXBwcm9hY2hlZCB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIEJQRiBleGVjdXRpb24gZW5naW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQ0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6NTIuMDUyODEzMDU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3ODksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3ODk6XFx0XFx0LyogZnVuY3Rpb24gY2FsbCAqL1xcbjE3OTA6XFx0XFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0NBTEw6XFxuMTc5MTpcXHRcXHR7XFxuMTc5MjpcXHRcXHRcXHRib29sIGZpeGVkX2FkZHI7XFxuMTc5MzpcXHRcXHRcXHR1NjQgYWRkcjtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0XFx0LyogSW5saW5lIGNhbGxzIHRvIGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpXFxuMTc5NjpcXHRcXHRcXHQgKlxcbjE3OTc6XFx0XFx0XFx0ICogUlZfUkVHX1RQIGhvbGRzIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IENQVSdzIHRhc2tfc3RydWN0IGFuZCB0aHJlYWRfaW5mbyBpc1xcbjE3OTg6XFx0XFx0XFx0ICogYXQgb2Zmc2V0IDAgaW4gdGFza19zdHJ1Y3QuXFxuMTc5OTpcXHRcXHRcXHQgKiBMb2FkIGNwdSBmcm9tIHRocmVhZF9pbmZvOlxcbjE4MDA6XFx0XFx0XFx0ICogICAgIFNldCBSMCB0byAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShSVl9SRUdfVFApKS1cXHUwMDNlY3B1XFxuMTgwMTpcXHRcXHRcXHQgKlxcbjE4MDI6XFx0XFx0XFx0ICogVGhpcyByZXBsaWNhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIG9uIFJJU0NWXFxuMTgwMzpcXHRcXHRcXHQgKi9cXG4xODA0OlxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IDAgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkKSB7XFxuMTgwNTpcXHRcXHRcXHRcXHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBSMCAqL1xcbjE4MDY6XFx0XFx0XFx0XFx0ZW1pdF9sdyhicGZfdG9fcnZfcmVnKEJQRl9SRUdfMCwgY3R4KSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLFxcbjE4MDc6XFx0XFx0XFx0XFx0XFx0UlZfUkVHX1RQLCBjdHgpO1xcbjE4MDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTgwOTpcXHRcXHRcXHR9XFxuMTgxMDpcXHRcXG4xODExOlxcdFxcdFxcdC8qIEltcGxlbWVudCBoZWxwZXIgY2FsbCB0byBicGZfZ2V0X2N1cnJlbnRfdGFzay9fYnRmKCkgaW5saW5lICovXFxuMTgxMjpcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSAwIFxcdTAwMjZcXHUwMDI2IChpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0ZVTkNfZ2V0X2N1cnJlbnRfdGFzayB8fFxcbjE4MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmKSkge1xcbjE4MTQ6XFx0XFx0XFx0XFx0ZW1pdF9tdihicGZfdG9fcnZfcmVnKEJQRl9SRUdfMCwgY3R4KSwgUlZfUkVHX1RQLCBjdHgpO1xcbjE4MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTgxNjpcXHRcXHRcXHR9XFxuMTgxNzpcXHRcXG4xODE4OlxcdFxcdFxcdG1hcmtfY2FsbChjdHgpO1xcbjE4MTk6XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC1cXHUwMDNlcHJvZywgaW5zbiwgZXh0cmFfcGFzcyxcXG4xODIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWRkciwgXFx1MDAyNmZpeGVkX2FkZHIpO1xcbjE4MjE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTgyMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MjM6XFx0XFxuMTgyNDpcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcXG4xODI1OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XFxuMTgyNjpcXHRcXHRcXHRcXHRpbnQgaWR4O1xcbjE4Mjc6XFx0XFxuMTgyODpcXHRcXHRcXHRcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXFx1MDAzZXByb2csIGluc24pO1xcbjE4Mjk6XFx0XFx0XFx0XFx0aWYgKCFmbSlcXG4xODMwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIGZtLVxcdTAwM2Vucl9hcmdzOyBpZHgrKykge1xcbjE4MzM6XFx0XFx0XFx0XFx0XFx0dTggcmVnID0gYnBmX3RvX3J2X3JlZyhCUEZfUkVHXzEgKyBpZHgsIGN0eCk7XFxuMTgzNDpcXHRcXG4xODM1OlxcdFxcdFxcdFxcdFxcdGlmIChmbS1cXHUwMDNlYXJnX3NpemVbaWR4XSA9PSBzaXplb2YoaW50KSlcXG4xODM2OlxcdFxcdFxcdFxcdFxcdFxcdGVtaXRfc2V4dHcocmVnLCByZWcsIGN0eCk7XFxuMTgzNzpcXHRcXHRcXHRcXHR9XFxuMTgzODpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjUyLjA1MzA2ODI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA3MTg4NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29kaW5nIHRoZSBCUEYgQ2FsbCBJbnN0cnVjdGlvbioqXG5cbk9rYXksIHNvIGBicGZfaml0X2dldF9mdW5jX2FkZHJgIGlzIGdvaW5nIHRvIGhhbmQgbWUgdGhhdCBhZGRyZXNzLCB0aGF0J3MgdGhlIGtleS4gVGhhdCdzIGhvdyB0aGlzIGlzIGdvaW5nIHRvIHdvcmsuIFRoZSBzeXN0ZW0gaXMgc2V0IHVwIHRvIGlzc3VlIGEgY2FsbC4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBmbG93IGNvcnJlY3RseS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBCUEZfSk1QIHwgQlBGX0NBTExgLiBMZXQncyBzZWUgaG93IHRoYXQncyBhbGwgaG9va2VkIHVwLi4uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgY29tZXMgdG9nZXRoZXIuIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxOCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDI6NTUuMTYwMjU5NjQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4Mzk6XFx0XFxuMTg0MDpcXHRcXHRcXHRyZXQgPSBlbWl0X2NhbGwoYWRkciwgZml4ZWRfYWRkciwgY3R4KTtcXG4xODQxOlxcdFxcdFxcdGlmIChyZXQpXFxuMTg0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4NDM6XFx0XFxuMTg0NDpcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0NBTEwpXFxuMTg0NTpcXHRcXHRcXHRcXHRlbWl0X212KGJwZl90b19ydl9yZWcoQlBGX1JFR18wLCBjdHgpLCBSVl9SRUdfQTAsIGN0eCk7XFxuMTg0NjpcXHRcXHRcXHRicmVhaztcXG4xODQ3OlxcdFxcdH1cXG4xODQ4OlxcdFxcdC8qIHRhaWwgY2FsbCAqL1xcbjE4NDk6XFx0XFx0Y2FzZSBCUEZfSk1QIHwgQlBGX1RBSUxfQ0FMTDpcXG4xODUwOlxcdFxcdFxcdGlmIChlbWl0X2JwZl90YWlsX2NhbGwoaSwgY3R4KSlcXG4xODUxOlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4xODUyOlxcdFxcdFxcdGJyZWFrO1xcbjE4NTM6XFx0XFxuMTg1NDpcXHRcXHQvKiBmdW5jdGlvbiByZXR1cm4gKi9cXG4xODU1OlxcdFxcdGNhc2UgQlBGX0pNUCB8IEJQRl9FWElUOlxcbjE4NTY6XFx0XFx0XFx0aWYgKGkgPT0gY3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gLSAxKVxcbjE4NTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTg1ODpcXHRcXG4xODU5OlxcdFxcdFxcdHJ2b2ZmID0gZXBpbG9ndWVfb2Zmc2V0KGN0eCk7XFxuMTg2MDpcXHRcXHRcXHRyZXQgPSBlbWl0X2p1bXBfYW5kX2xpbmsoUlZfUkVHX1pFUk8sIHJ2b2ZmLCB0cnVlLCBjdHgpO1xcbjE4NjE6XFx0XFx0XFx0aWYgKHJldClcXG4xODYyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTg2MzpcXHRcXHRcXHRicmVhaztcXG4xODY0OlxcdFxcbjE4NjU6XFx0XFx0LyogZHN0ID0gaW1tNjQgKi9cXG4xODY2OlxcdFxcdGNhc2UgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVzpcXG4xODY3OlxcdFxcdHtcXG4xODY4OlxcdFxcdFxcdHN0cnVjdCBicGZfaW5zbiBpbnNuMSA9IGluc25bMV07XFxuMTg2OTpcXHRcXHRcXHR1NjQgaW1tNjQ7XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdFxcdGltbTY0ID0gKHU2NClpbnNuMS5pbW0gXFx1MDAzY1xcdTAwM2MgMzIgfCAodTMyKWltbTtcXG4xODcyOlxcdFxcdFxcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcXG4xODczOlxcdFxcdFxcdFxcdC8qIGZpeGVkLWxlbmd0aCBpbnNucyBmb3IgZXh0cmEgaml0IHBhc3MgKi9cXG4xODc0OlxcdFxcdFxcdFxcdHJldCA9IGVtaXRfYWRkcihyZCwgaW1tNjQsIGV4dHJhX3Bhc3MsIGN0eCk7XFxuMTg3NTpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjE4NzY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xODc3OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTg3ODpcXHRcXHRcXHRcXHRlbWl0X2ltbShyZCwgaW1tNjQsIGN0eCk7XFxuMTg3OTpcXHRcXHRcXHR9XFxuMTg4MDpcXHRcXG4xODgxOlxcdFxcdFxcdHJldHVybiAxO1xcbjE4ODI6XFx0XFx0fVxcbjE4ODM6XFx0XFxuMTg4NDpcXHRcXHQvKiBMRFg6IGRzdCA9ICoodW5zaWduZWQgc2l6ZSAqKShzcmMgKyBvZmYpICovXFxuMTg4NTpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0I6XFxuMTg4NjpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6XFxuMTg4NzpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6XFxuMTg4ODpcXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo1NS4xNjA1Mjc5MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNzc5MTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ2FsbCBFbWlzc2lvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgY29kZSBpcyBzaW1wbHkgZW1pdHRpbmcgYSBjYWxsIHRvIGBhZGRyYC4gU2ltcGxlIGVub3VnaCwgYnV0IGEgcmVkIGZsYWcganVzdCB3ZW50IHVwLiBIYW5nIG9uLCB0aGUgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiBhY3R1YWxseSAqZXhwZWN0cyogdGhlIHN0YWNrIG9mZnNldCBpbiBgQlBGX1JFR19BWGAsIHdoaWNoIHRyYW5zbGF0ZXMgdG8gYHQwYCBpbiB0aGUgUklTQy1WIEJQRiBKSVQsIGFuZCBpdCAqYWxzbyogcmV0dXJucyB0aGUgdXBkYXRlZCBjb3VudCBpbiB0aGF0IHZlcnkgc2FtZSByZWdpc3RlciwgYHQwYC4gVGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIGNvbnRyb2wgZmxvdy5cblxuQnV0IHdhaXQgYSBtaW51dGXigKYgd29uJ3QgYGVtaXRfY2FsbGAgcG90ZW50aWFsbHkgY2xvYmJlciBgdDBgPyBUaGF0J3MgYSBtYWpvciBwcm9ibGVtIGlmIGl0IGRvZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgYGVtaXRfY2FsbGAgcHJlc2VydmVzIGB0MGAuIEJldHRlciBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQncyBwdWxsIHVwIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBlbWl0X2NhbGxgIHRoZXJlLiBJIGhhdmUgdG8gY29uZmlybSB0aGUgcmVnaXN0ZXIgdXNhZ2Ugc28gYXMgdG8gYXZvaWQgYSBuYXN0eSwgdW5leHBlY3RlZCBidWcsIHRoYXQgd291bGQgdGFrZSBmb3JldmVyIHRvIGRlYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAyOjU5LjU3ODMyMTkwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNTU5NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtaXRfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9NDQ3PXN0YXRpYyBib29sIGlzX3NpZ25lZF9icGZfY29uZCh1OCBjb25kKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00NTItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo0NTM6c3RhdGljIGludCBlbWl0X2NhbGwodTY0IGFkZHIsIGJvb2wgZml4ZWRfYWRkciwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00NTQte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz05Mzc9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLCBpbnQgYXJnc19vZmYsIGludCByZXR2YWxfb2ZmLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NTItXFx0ZW1pdF9hZGRpKFJWX1JFR19BMSwgUlZfUkVHX0ZQLCAtcnVuX2N0eF9vZmYsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NTM6XFx0cmV0ID0gZW1pdF9jYWxsKChjb25zdCB1NjQpYnBmX3RyYW1wb2xpbmVfZW50ZXIocCksIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NTQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTcxLVxcdFxcdGVtaXRfaW1tKFJWX1JFR19BMSwgKGNvbnN0IHM2NClwLVxcdTAwM2VpbnNuc2ksIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NzI6XFx0cmV0ID0gZW1pdF9jYWxsKChjb25zdCB1NjQpcC1cXHUwMDNlYnBmX2Z1bmMsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NzMtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTkzLVxcdGVtaXRfYWRkaShSVl9SRUdfQTIsIFJWX1JFR19GUCwgLXJ1bl9jdHhfb2ZmLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6OTk0OlxcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KWJwZl90cmFtcG9saW5lX2V4aXQocCksIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05OTUtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEwMjI9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE4NC1cXHRcXHRlbWl0X2ltbShSVl9SRUdfQTAsIGN0eC1cXHUwMDNlaW5zbnMgPyAoY29uc3QgczY0KWltIDogUlZfTUFYX0NPVU5UX0lNTSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjExODU6XFx0XFx0cmV0ID0gZW1pdF9jYWxsKChjb25zdCB1NjQpX19icGZfdHJhbXBfZW50ZXIsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTg2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyMjAtXFx0XFx0cmVzdG9yZV9zdGFja19hcmdzKG5yX2FyZ19zbG90cyAtIFJWX01BWF9SRUdfQVJHUywgYXJnc19vZmYsIHN0a19hcmdfb2ZmLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTIyMTpcXHRcXHRyZXQgPSBlbWl0X2NhbGwoKGNvbnN0IHU2NClvcmlnX2NhbGwsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjIyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyNTMtXFx0XFx0ZW1pdF9pbW0oUlZfUkVHX0EwLCBjdHgtXFx1MDAzZWluc25zID8gKGNvbnN0IHM2NClpbSA6IFJWX01BWF9DT1VOVF9JTU0sIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjU0OlxcdFxcdHJldCA9IGVtaXRfY2FsbCgoY29uc3QgdTY0KV9fYnBmX3RyYW1wX2V4aXQsIHRydWUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjU1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MzktXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxODQwOlxcdFxcdHJldCA9IGVtaXRfY2FsbChhZGRyLCBmaXhlZF9hZGRyLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTg0MS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMjo1OS44MTA4ODY5MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzMTM2NzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBlbWl0X2NhbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgcGFyc2UgdGhlIG5hbWUgYW5kIHdoYXQgdGhlIGlucHV0cyBhcmUuIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCBJIG1pZ2h0IGJlIGV4cGVjdGluZyBhIGNlcnRhaW4ga2luZCBvZiBiZWhhdmlvciwgYnV0IEkgcmVhbGx5IGhhdmUgdG8gbG9vayBhbmQgc2VlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgY29yZSBjb21wb25lbnQsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyBpdCBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IGlzIHRoZSBpbnRlbmRlZCBvdXRwdXQ/IFRoaXMgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIGRpc3BhdGNoaW5nIG9yIHRyaWdnZXJpbmcgc29tZXRoaW5nLCBzbyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYW4gaW52ZXN0aWdhdGlvbiBvZiBob3cgdGhlIGNhbGwncyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IHRoZXkgcmVsYXRlIHRvLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBmb3IgZXJyb3IgaGFuZGxpbmcsIG9mIGNvdXJzZS4gUHJvcGVyIGVycm9yIGhhbmRsaW5nLCBvciBsYWNrIHRoZXJlb2YsIGNhbiBiZSBhIG1ham9yIHNvdXJjZSBvZiBzeXN0ZW0gdnVsbmVyYWJpbGl0aWVzLCBzbyBJJ20gcHJpbWVkIHRvIGxvb2sgZm9yIHRoYXQgaW1tZWRpYXRlbHkuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGNsb3NlbHksIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGxpa2UgcmFjZSBjb25kaXRpb25zLCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgb3IgaW5lZmZpY2llbnQgY29kZS4gVGhlbiBhZ2FpbiwgaXQgY291bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBqdWRnZSB0aGF0IG9uY2UgSSd2ZSBoYWQgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMxNCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MDMuNjQyMjU3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTM6XFx0c3RhdGljIGludCBlbWl0X2NhbGwodTY0IGFkZHIsIGJvb2wgZml4ZWRfYWRkciwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuIDQ1NDpcXHR7XFxuIDQ1NTpcXHRcXHRzNjQgb2ZmID0gMDtcXG4gNDU2OlxcdFxcdHU2NCBpcDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0aWYgKGFkZHIgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VpbnNucyBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZXJvX2luc25zKSB7XFxuIDQ1OTpcXHRcXHRcXHQvKlxcbiA0NjA6XFx0XFx0XFx0ICogVXNlIHRoZSByb19pbnNucyhSWCkgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgYXMgdGhlIEJQRlxcbiA0NjE6XFx0XFx0XFx0ICogcHJvZ3JhbSB3aWxsIGZpbmFsbHkgcnVuIGZyb20gdGhpcyBtZW1vcnkgcmVnaW9uLlxcbiA0NjI6XFx0XFx0XFx0ICovXFxuIDQ2MzpcXHRcXHRcXHRpcCA9ICh1NjQpKGxvbmcpKGN0eC1cXHUwMDNlcm9faW5zbnMgKyBjdHgtXFx1MDAzZW5pbnNucyk7XFxuIDQ2NDpcXHRcXHRcXHRvZmYgPSBhZGRyIC0gaXA7XFxuIDQ2NTpcXHRcXHR9XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdHJldHVybiBlbWl0X2p1bXBfYW5kX2xpbmsoUlZfUkVHX1JBLCBvZmYsIGZpeGVkX2FkZHIsIGN0eCk7XFxuIDQ2ODpcXHR9XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X2tjZmkodTMyIGhhc2gsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbiA0NzE6XFx0e1xcbiA0NzI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAzOjAzLjY0MjQ3MTc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzY0MjY4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBlbWl0X2p1bXBfYW5kX2xpbmtgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGVtaXRfanVtcF9hbmRfbGlua2AuIEl0J3MgdXNpbmcgYFJWX1JFR19SQWAsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGUgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIsIGdvb2QuIEFuZCBpdCdzIG5vdCBtZXNzaW5nIHdpdGggYHQwYCB3aGljaCBpcyBgUlZfUkVHX1QwYCwgc28gaXQncyBub3Qgc3RlcHBpbmcgb24gYW55dGhpbmcgdGhhdCBpdCBzaG91bGRuJ3QuIE1ha2VzIHNlbnNlLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9uIHRoaXMgLSB3aGF0J3MgYEJQRl9SRUdfQVhgIGFjdHVhbGx5ICptYXBwZWQqIHRvIGluIHRoZSBSSVNDLVYgcmVnaXN0ZXIgYXJjaGl0ZWN0dXJlPyBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBtYXBwaW5nLiBKdXN0IGNvbmZpcm1pbmcgdGhhdCdzIG5vdCBnb2luZyB0byBjYXVzZSBzb21lIHdlaXJkIGNvbmZsaWN0IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gVGhhdCdzIGEgY3J1Y2lhbCB0aGluZyB0byBnZXQgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzowNy42MTg5MDI0MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDUxODc5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1JFR19BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA4OjAzOjA3Ljc4MzQzNTA1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3Nzk4NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqRGVsdmluZyBpbnRvIFJJU0MtViBCUEYgSklUIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyByZWdpc3RlciBhbGxvY2F0aW9uIHdvcmtzIGZvciBCUEYgSklUIG9uIFJJU0MtVi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZ1bmN0aW9uIG9yIG1hY3JvIHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIFJJU0MtViByZWdpc3RlciBhc3NpZ25tZW50cy4gVGhlIG5hbWUgYGJwZl90b19ydl9yZWdgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9uLCBhbmQgaXQncyBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiB0aGUgUklTQy1WIHNwZWNpZmljIG5ldHdvcmtpbmcgY29kZS4gVGhhdCBtZWFucyBJIHNob3VsZCBsb29rIGluIGVpdGhlciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oYCwgd2hpY2ggd291bGQgY29udGFpbiB0aGUgZGVjbGFyYXRpb25zLCBvciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIHdoaWNoIHdvdWxkIHByb2JhYmx5IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHN0YXJ0IHdpdGggdGhvc2UgbG9jYXRpb25zLCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiB2aXJ0dWFsIHJlZ2lzdGVycyBtYXAgdG8gcGh5c2ljYWwgUklTQy1WIHJlZ2lzdGVycyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBrZXkgdG8gcGVyZm9ybWFuY2UsIHJlYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzoxMS40NTEyMzY5MzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYzMDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfUkVHX0FYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTQzPWVudW0ge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy01NC1cXHRCUEZfQVhfTE8sXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo1NTpcXHQvKiBTdGFjayBzcGFjZSBmb3IgQlBGX1JFR182IHRocm91Z2ggQlBGX1JFR185IGFuZCBCUEZfUkVHX0FYLiAqL1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtNTYtXFx0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTcxPXN0YXRpYyBjb25zdCBzOCBicGYycnYzMltdWzJdID0ge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy05MC1cXHQvKiBUZW1wb3JhcnkgcmVnaXN0ZXIgZm9yIGJsaW5kaW5nIGNvbnN0YW50cy4gU3RvcmVkIG9uIHRoZSBzdGFjay4gKi9cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjkxOlxcdFtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgU1RBQ0tfT0ZGU0VUKEJQRl9BWF9MTyl9LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtOTItXFx0LypcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9Mjk9c3RhdGljIGNvbnN0IGludCByZWdtYXBbXSA9IHtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNDAtXFx0W0JQRl9SRUdfRlBdID1cXHRSVl9SRUdfUzUsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo0MTpcXHRbQlBGX1JFR19BWF0gPVxcdFJWX1JFR19UMCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQyLX07XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy04LSAqIFRyYW1wb2xpbmUgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZC4gQ3VzdG9tIGNhbGxpbmcgY29udmVudGlvbjpcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzo5OiAqXFx0LSBpbnB1dDogIHN0YWNrIG9mZnNldCBpbiBCUEZfUkVHX0FYICh0MClcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMDogKlxcdC0gb3V0cHV0OiB1cGRhdGVkIGNvdW50IGluIEJQRl9SRUdfQVggKHQwKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl90aW1lZF9tYXlfZ290by5TLTExLSAqXFxuYXJjaC9yaXNjdi9uZXQvYnBmX3RpbWVkX21heV9nb3RvLlMtMTItICogQ2FsbHMgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHB0cikgd2l0aCB0aGUgc3RhbmRhcmQgUklTQy1WIEFCSSwgd2hlcmVcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUzoxMzogKiBwdHIgPSBCUEZfUkVHX0ZQIChzNSkgKyBCUEZfUkVHX0FYICh0MCkuIEJQRiBSMC1SNSAoYTUsIGEwLWE0KSBhcmUgc2F2ZWRcXG5hcmNoL3Jpc2N2L25ldC9icGZfdGltZWRfbWF5X2dvdG8uUy0xNC0gKiBhY3Jvc3MgdGhlIGNhbGw7IEJQRl9SRUdfRlAgKHM1KSBpcyBjYWxsZWUtc2F2ZWQgYW5kIG5lZWRzIG5vIHNhdmluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MTEuNjA5ODc3MTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjI0MTQ0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBCUEYgYG1heV9nb3RvYCBJbXBsZW1lbnRhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBzZXR0aW5nIHVwIHRoZSBgbWF5X2dvdG9gIGxvb3AgYm91bmQgY2hlY2sgZm9yIFJJU0MtVi4gVGhlIGBCUEZfUkVHX0FYYCByZWdpc3RlciBpcyBtYXBwZWQgdG8gYFJWX1JFR19UMGAsIHNvIHRoZSB2ZXJpZmllciBpcyBlbWl0dGluZyB0aGlzIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uczpcblxuMS4gIGBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpYDogVGhpcyBtb3ZlcyBhbiBpbW1lZGlhdGUgdmFsdWUgcmVwcmVzZW50aW5nIGFuIG9mZnNldCBjb3VudCBvbnRvIGB0MGAuXG4yLiAgYEJQRl9FTUlUX0NBTEwoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pYDogVGhpcyBpcyB0aGUga2V5LiBUaGUgSklUIHdpbGwgdHJhbnNsYXRlIHRoaXMgaW50byBhIGNhbGwgdG8gdGhlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgZnVuY3Rpb24uXG4zLiAgYEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudClgOiBUaGlzIGluc3RydWN0aW9uIHN0b3JlcyBhIGRvdWJsZS13b3JkIHZhbHVlIGZyb20gYHQwYCB0byBhIG1lbW9yeSBsb2NhdGlvbi5cblxuTm93LCB0aGUgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBhc3NlbWJseSBpcyB3aGF0J3MgcmVhbGx5IGludGVyZXN0aW5nOlxuXG5gYGBhc3NlbWJseVxuU1lNX0ZVTkNfU1RBUlQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5cdGFkZGlcdHNwLCBzcCwgLTY0XG5cdHNkXHRyYSwgNTYoc3ApXG5cblx0LyogU2F2ZSBCUEYgcmVnaXN0ZXJzIFIwLVI1IChhNSwgYTAtYTQpICovXG5cdHNkXHRhNSwgNDgoc3ApXG5cdHNkXHRhMCwgNDAoc3ApXG5cdHNkXHRhMSwgMzIoc3ApXG5cdHNkXHRhMiwgMjQoc3ApXG5cdHNkXHRhMywgMTYoc3ApXG5cdHNkXHRhNCwgOChzcClcblxuXHRhZGRcdGEwLCB0MCwgczVcblx0Y2FsbFx0YnBmX2NoZWNrX3RpbWVkX21heV9nb3RvXG5cdG12XHR0MCwgYTBcblxuXHQvKiBSZXN0b3JlIEJQRiByZWdpc3RlcnMgUjAtUjUgKi9cblx0bGRcdGE0LCA4KHNwKVxuXHRsZFx0YTMsIDE2KHNwKVxuXHRsZFx0YTIsIDI0KHNwKVxuXHRsZFx0YTEsIDMyKHNwKVxuXHRsZFx0YTAsIDQwKHNwKVxuXHRsZFx0YTUsIDQ4KHNwKVxuXG5cdGxkXHRyYSwgNTYoc3ApXG5cdGFkZGlcdHNwLCBzcCwgNjRcblx0cmV0XG5TWU1fRlVOQ19FTkQoYXJjaF9icGZfdGltZWRfbWF5X2dvdG8pXG5gYGBcblxuVGhpcyBhc3NlbWJseSBzYXZlcyB0aGUgQlBGIHJlZ2lzdGVycyBgUjAtUjVgICh3aGljaCBhcmUgZXF1aXZhbGVudCB0byBgYTUsIGEwLWE0YCBpbiB0aGUgUklTQy1WIGNhbGxpbmcgY29udmVudGlvbikuIFRoZW4sIGl0IGNhbGN1bGF0ZXMgYSB2YWx1ZSwgYGEwID0gdDAgKyBzNWAsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW5zIGFkZGluZyBgQlBGX1JFR19BWCArIEJQRl9SRUdfRlBgLCBwYXNzZXMgdGhpcyB0byB0aGUgYGJwZl9jaGVja190aW1lZF9tYXlfZ290b2AgZnVuY3Rpb24sIGFuZCBwdXRzIHRoZSByZXN1bHQgYmFjayBpbnRvIGB0MGAsIGFuZCBmaW5hbGx5IHJlc3RvcmVzIHRoZSBCUEYgcmVnaXN0ZXJzIGFuZCByZXR1cm5zLlxuXG5UaGlzIGlzIGEgcHJldHR5IGNsZWFuIGltcGxlbWVudGF0aW9uIHRvIGVuYWJsZSB0aGUgYG1heV9nb3RvYCBsb29wIGJvdW5kIGNoZWNrIG9uIFJJU0MtViwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkIHRvIHNhZmVseSBleGVjdXRlIHBvdGVudGlhbGx5IHVuYm91bmRlZCBsb29wcyBpbiBCUEYgcHJvZ3JhbXMuXG5cblNvLCBpcyB0aGlzIGNoYW5nZSBhY3R1YWxseSByZWFjaGFibGU/IEFic29sdXRlbHksIGFzc3VtaW5nIHdlIGxvYWQgYSBCUEYgcHJvZ3JhbSB1dGlsaXppbmcgYG1heV9nb3RvYCBvbiBhIFJJU0MtViBzeXN0ZW0uXG5cbkFzIGZhciBhcyBjb25maWd1cmF0aW9ucyBnbywgd2UnbGwgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklUIGNvbXBpbGVyLCBhbmQgdGhlIHN0YW5kYXJkIFJJU0MtViBjb25maWd1cmF0aW9uIGBDT05GSUdfQVJDSF9SVjY0SWAuIFdlIGFjdHVhbGx5IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBgQ09ORklHX0FSQ0hfUlY2NElgIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IDY0LWJpdCBhcmNoaXRlY3R1cmUgY29uZmlnLCBidXQgaXQgZG9lc24ndCBodXJ0IHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBBbmQsIG9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsIHRvIGJlIGFibGUgdG8gbG9hZCBhbnkgQlBGIHByb2dyYW1zIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuTGV0J3MgZG8gYSBxdWljayBjaGVjayBpbiB0aGUgYGFyY2gvcmlzY3YvbmV0L01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgQlBGIHN1cHBvcnQsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MjIuMjM0MDI0NTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvcmlzY3YvbmV0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvcmUub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRpZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbiAgIDY6XFx0XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG4gICA3OlxcdGVsc2VcXG4gICA4OlxcdFxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuICAgOTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzoyMi4yMzQxMjE2ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NTgwMTg2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEJQRiBUaW1lZCBNYXlfR290byBQYXRjaCBmb3IgUklTQy1WKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgUklTQy1WIHN1cHBvcnQgZm9yIHRoZSBgYnBmX3RpbWVkX21heV9nb3RvYCBsb29wIGJvdW5kLiBUaGUgb25seSBjb25maWd1cmF0aW9ucyBpbXBhY3RlZCBoZXJlIHNlZW0gdG8gYmUgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19BUkNIX1JWNjRJYCwgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIGEgUklTQy1WIGFkZGl0aW9uLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBuZXcgYGFyY2hfYnBmX3RpbWVkX21heV9nb3RvYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCBhc3NlbWJseS4gU3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgZnV6eiBhc3NlbWJseSB3ZWxsIHRocm91Z2ggY292ZXJhZ2UsIHRob3VnaCBpdCBjYW4gZnV6eiB0aGUgQlBGIHByb2dyYW1zIHRoYXQgdHJpZ2dlciB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlcmUncyBhbHNvIGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYCwgd2hpY2ggdGhlIHBhdGNoIGFsc28gYWRkcy5cblxuVGhlIHZlcmlmaWVyIGVtaXRzIGEgY2FsbCwgYW5kIHRoZSBKSVQgY29tcGlsZXMgaXQuIFRoZSBDIGZ1bmN0aW9uIGBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9gIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NlbWJseSwgYnV0IHRoaXMgaXNuJ3QgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYWRkaW5nIGBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG9gIHRvIGBGb2N1c1N5bWJvbHNgLCBidXQgaXQncyBub3QgYWN0dWFsbHkgY2hhbmdlZCBpbiB0aGlzIHBhdGNoLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gIGFuZCBhZGRzIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AuIFNpbmNlIGBhcmNoX2JwZl90aW1lZF9tYXlfZ290b2AgaXMgaW4gYXNzZW1ibHksIGl0IG1pZ2h0IG5vdCBoYXZlIGNvdmVyYWdlLiBgYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b2AgaXMganVzdCBgcmV0dXJuIHRydWU7YC4gSG1tLiBTbywgaXQncyBub3QgYSBjb21wbGljYXRlZCBmdW5jdGlvbi5cblxuTm8gb3RoZXIgZnVuY3Rpb25zIGFyZSBhZGRlZCBpbiB0aGUgcGF0Y2guIEknbGwgZG91YmxlLWNoZWNrIGZvciBvdGhlciBmaWxlIG1vZGlmaWNhdGlvbnMuIE9rYXksIEkgc2VlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21heV9nb3RvXzEuY2AgYXJlIGFsc28gbW9kaWZpZWQuIFNvLCB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCwgYWRkaW5nIFJJU0MtViBzdXBwb3J0IGZvciBgYnBmX3RpbWVkX21heV9nb3RvYC5cblxuR2l2ZW4gdGhhdCwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuXG5cbkZvciBgRW5hYmxlQ29uZmlnc2AsIGBCUEZfSklUYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBgQVJDSF9SVjY0SWAgaXMgc3RhbmRhcmQgZm9yIHJpc2N2NjQsIHNvIGl0J3MgYSBnaXZlbi4gQWxzbywgYEJQRl9TWVNDQUxMYCBpcyBuZWNlc3NhcnkgdG8gdXNlIEJQRi4gSSdtIGdvaW5nIHRvIGxpc3QganVzdCBgQlBGX0pJVGAuXG5cbkZvciBgRm9jdXNTeW1ib2xzYCwgSSBoYXZlIHRvIGJlIHNtYXJ0IGhlcmUuIFRoZSBwcm9tcHQgc2F5cyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgd2l0aCBjb21wbGV4IGxvZ2ljLCBidXQgYXZvaWQgZ2VuZXJpYyBob3RwYXRocy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGFyZSBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gIChldmVuIHRob3VnaCBpdCdzIGFzc2VtYmx5LCBpdCdzIHdvcnRoIGEgc2hvdCwgbWlnaHQgaGF2ZSBzb21lIGluc3RydW1lbnRhdGlvbikgYW5kIGBicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvYC4gSSB3aWxsIGluY2x1ZGUgYGJwZl9qaXRfc3VwcG9ydHNfdGltZWRfbWF5X2dvdG9gIGFuZCBgYXJjaF9icGZfdGltZWRfbWF5X2dvdG9gLlxuXG5MZXQgbWUgcXVpY2tseSByZS1pdGVyYXRlOiB1c3VhbGx5IGAuU2AgZmlsZXMgYXJlIG5vdCBpbnN0cnVtZW50ZWQgYnkgS0NPViB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkLCBhbmQgZXZlbiB0aGVuLCBpdCdzIHRyaWNreS4gQnV0IGl0IGRvZXNuJ3QgaHVydCB0byBpbmNsdWRlIGl0LlxuXG5CYXNlZCBvbiB0aGUgcGF0Y2gsIHRoZSByZWFzb25pbmcgaXMgXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi5cIlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzcsIk91dHB1dFRva2VucyI6MTQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MzUuNzkyMTQzODI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzOTA4NDcyLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBBUkNIX1JWNjRJIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkFSQ0hfUlY2NElcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90aW1lZF9tYXlfZ290b1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEFSQ0hfUlY2NElcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDg6MDM6MzYuMDI2MDY3MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NTY1Mjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIEFyY2hpdGVjdHVyZSBJZGVudGlmaWVyKipcblxuSG1tLCBzbyBgQVJDSF9SVjY0SWAgaXNuJ3QgZGVmaW5lZCwgaXMgdGhhdCByaWdodD8gVGhhdCdzLi4uIHVuZXhwZWN0ZWQuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYXJjaGl0ZWN0dXJlIGNvbmZpZ3VyYXRpb24gaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFRoYXQncyB0aGUgZmlyc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvciBwb3RlbnRpYWxseSBhbnkgcmVsZXZhbnQgaW5jbHVkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHN5bWJvbCBpcyB1bmRlZmluZWQgYmVmb3JlIEkgZ28gZG93biBhIHJhYmJpdCBob2xlLiBMZXQncyBzZWUgaWYgaXQncyBjb25kaXRpb25hbGx5IGRlZmluZWQgb3IgaWYgSSBqdXN0IG5lZWQgdG8gYWRkIGl0IHRoZXJlLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzo0MC4zMDE3MjM1MjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzU5MTYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L0tjb25maWc9NDA1PWNvbmZpZyBBUkNIX1JWMzJJXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNDEwLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTE6Y29uZmlnIEFSQ0hfUlY2NElcXG5hcmNoL3Jpc2N2L0tjb25maWctNDEyLVxcdGJvb2wgXFxcIlJWNjRJXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzo0MC44NzkzMjUxODhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MTU2NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNeXN0ZXJ5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IHRoaXMgdGhpbmcg4oCTIHdoYXRldmVyIFwidGhpcyB0aGluZ1wiIGlzLCBsZXQncyBjYWxsIGl0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiAtIGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBTbywgd2hhdCBkaWQgYHNldC1yZXN1bHRzYCByZXBvcnQ/IFRoYXQgaXQgZG9lc24ndCBleGlzdD8gVGhhdCdz4oCmIHN0cmFuZ2UuIFNvbWV0aGluZydzIGNsZWFybHkgbm90IHJpZ2h0IGhlcmUuXG5cbkFoYSEgUGVyaGFwcyB0aGUgaXNzdWUgaXNuJ3Qgd2hldGhlciB0aGUgb3B0aW9uICpleGlzdHMqLCBidXQgaG93IHRoZSB0b29sIGlzIGxvb2tpbmcgZm9yIGl0LiBNYXliZSB0aGUgY29uZmlndXJhdGlvbiBuYW1lIGlzbid0IHByZWNpc2VseSB3aGF0IHRoZSB0b29sIGlzIGV4cGVjdGluZy4gSXMgaXQgcG9zc2libGUgdGhlIHRvb2wgaXMgY2hlY2tpbmcgdGhlICpnbG9iYWwqIEtjb25maWcgZmlsZSwgYW5kIGl04oCZcyBhY3R1YWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIGRlZmluZWQgdW5kZXIgc29tZXRoaW5nIGxpa2UgYEFSQ0hfUlY2NElgPyBPciwgZXF1YWxseSBsaWtlbHksIHRoaXMgY291bGQgYmUgYSBzaW1wbGUgYnVnIGluIHRoZSB0b29sIGl0c2VsZi4gSeKAmXZlIHNlZW4gd2VpcmRlciB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2YgZW52aXJvbm1lbnRzLlxuXG5BbHJpZ2h0LCBsZXQncyBub3Qgd2FzdGUgYW55IG1vcmUgdGltZSB3cmVzdGxpbmcgd2l0aCB0aGlzIHJhYmJpdCBob2xlLiBJJ2xsIGp1c3QgZmFsbCBiYWNrIHRvIHRoZSB0cmllZCBhbmQgdHJ1ZSBhcHByb2FjaCBvZiB1c2luZyBgQlBGX0pJVGAuIFRoYXQgc2hvdWxkIHdvcmsuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgbGF0ZXIgdG8gc2VlIGlmIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI2NSwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwODowMzo0Ni4yNTA4OTQxMDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk3NDc1NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90aW1lZF9tYXlfZ290b1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c190aW1lZF9tYXlfZ290b1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBCUEYgdGltZWQgbWF5X2dvdG8gbG9vcCBib3VuZCBvbiBSSVNDLVYgNjQtYml0LiBJdCBhZGRzIHRoZSBhcmNoX2JwZl90aW1lZF9tYXlfZ290byBhc3NlbWJseSB0cmFtcG9saW5lIGFuZCBlbmFibGVzIGl0IGluIHRoZSBKSVQgY29tcGlsZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyB3aXRoIG1heV9nb3RvIGluc3RydWN0aW9ucyBvbiBSSVNDLVYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfYnBmX3RpbWVkX21heV9nb3RvXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX3RpbWVkX21heV9nb3RvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIEJQRiB0aW1lZCBtYXlfZ290byBsb29wIGJvdW5kIG9uIFJJU0MtViA2NC1iaXQuIEl0IGFkZHMgdGhlIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvIGFzc2VtYmx5IHRyYW1wb2xpbmUgYW5kIGVuYWJsZXMgaXQgaW4gdGhlIEpJVCBjb21waWxlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHdpdGggbWF5X2dvdG8gaW5zdHJ1Y3Rpb25zIG9uIFJJU0MtVi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowpw82l[1] Phase: Succeeded StartedAt: 2026-07-14 08:03:58 +0000 UTC FinishedAt: 2026-07-14 08:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 08:03:58 +0000 UTC FinishedAt: 2026-07-14 08:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2] Phase: Succeeded StartedAt: 2026-07-14 08:03:58 +0000 UTC FinishedAt: 2026-07-14 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 08:03:58 +0000 UTC FinishedAt: 2026-07-14 09:25:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 08:03:58 +0000 UTC FinishedAt: 2026-07-14 08:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 08:03:58 +0000 UTC FinishedAt: 2026-07-14 08:04:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpw82l/series-workflowpw82l-convert-artifact-4212209082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 08:04:36 +0000 UTC FinishedAt: 2026-07-14 08:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 08:04:36 +0000 UTC FinishedAt: 2026-07-14 08:32:59 +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:*f3118b21-9207-499d-bc5e-01e83bfb30d6,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-workflowpw82l/series-workflowpw82l-convert-artifact-4212209082/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": "9a66b355-b075-4dd5-9aca-e57771e7c8ad", "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-workflowpw82l/series-workflowpw82l-build-action-894331752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 08:04:36 +0000 UTC FinishedAt: 2026-07-14 08:32:49 +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:*f3118b21-9207-499d-bc5e-01e83bfb30d6,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-workflowpw82l/series-workflowpw82l-convert-artifact-4212209082/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": "9a66b355-b075-4dd5-9aca-e57771e7c8ad", "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-workflowpw82l/series-workflowpw82l-build-action-894331752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 08:32:59 +0000 UTC FinishedAt: 2026-07-14 08:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 08:32:59 +0000 UTC FinishedAt: 2026-07-14 08:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 08:32:59 +0000 UTC FinishedAt: 2026-07-14 08:33:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 08:32:59 +0000 UTC FinishedAt: 2026-07-14 08:33:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpw82l/series-workflowpw82l-convert-artifact-2629623573/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 08:33:09 +0000 UTC FinishedAt: 2026-07-14 08:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 08:33:09 +0000 UTC FinishedAt: 2026-07-14 08:34:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a66b355-b075-4dd5-9aca-e57771e7c8ad,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-workflowpw82l/series-workflowpw82l-build-action-894331752/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-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 08:34:58 +0000 UTC FinishedAt: 2026-07-14 08:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 08:34:58 +0000 UTC FinishedAt: 2026-07-14 08:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 08:34:58 +0000 UTC FinishedAt: 2026-07-14 09:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 08:34:58 +0000 UTC FinishedAt: 2026-07-14 09:20: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:*f3118b21-9207-499d-bc5e-01e83bfb30d6,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-workflowpw82l/series-workflowpw82l-convert-artifact-2629623573/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": "b42d3ade-c8a0-4364-b7da-ef0c8cead970", "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-workflowpw82l/series-workflowpw82l-build-action-2743829921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 08:34:58 +0000 UTC FinishedAt: 2026-07-14 09:20: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:*f3118b21-9207-499d-bc5e-01e83bfb30d6,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-workflowpw82l/series-workflowpw82l-convert-artifact-2629623573/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": "b42d3ade-c8a0-4364-b7da-ef0c8cead970", "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-workflowpw82l/series-workflowpw82l-build-action-2743829921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 09:20:25 +0000 UTC FinishedAt: 2026-07-14 09:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 09:20:25 +0000 UTC FinishedAt: 2026-07-14 09:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 09:20:25 +0000 UTC FinishedAt: 2026-07-14 09:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 09:20:25 +0000 UTC FinishedAt: 2026-07-14 09:22:27 +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:*b42d3ade-c8a0-4364-b7da-ef0c8cead970,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-workflowpw82l/series-workflowpw82l-build-action-2743829921/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-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 09:22:35 +0000 UTC FinishedAt: 2026-07-14 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 09:22:35 +0000 UTC FinishedAt: 2026-07-14 09:25:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"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:*9a66b355-b075-4dd5-9aca-e57771e7c8ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b42d3ade-c8a0-4364-b7da-ef0c8cead970,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-workflowpw82l/series-workflowpw82l-build-action-894331752/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-workflowpw82l/series-workflowpw82l-build-action-2743829921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 09:22:35 +0000 UTC FinishedAt: 2026-07-14 09:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 09:22:35 +0000 UTC FinishedAt: 2026-07-14 09:22:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"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-workflowpw82l/series-workflowpw82l-convert-artifact-1723449082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 09:22:35 +0000 UTC FinishedAt: 2026-07-14 09:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 09:22:35 +0000 UTC FinishedAt: 2026-07-14 09:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 09:22:35 +0000 UTC FinishedAt: 2026-07-14 09:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 09:22:45 +0000 UTC FinishedAt: 2026-07-14 09:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpw82l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_timed_may_goto","bpf_jit_supports_timed_may_goto"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"3a4e5bea-9857-4f83-9b3b-02a0b0ac5b20","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 09:22:45 +0000 UTC FinishedAt: 2026-07-14 09:25:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a66b355-b075-4dd5-9aca-e57771e7c8ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b42d3ade-c8a0-4364-b7da-ef0c8cead970,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-workflowpw82l/series-workflowpw82l-build-action-894331752/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-workflowpw82l/series-workflowpw82l-build-action-2743829921/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-workflowpw82l/series-workflowpw82l-convert-artifact-1723449082/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,}