Name: series-workflows8pjr Phase: Succeeded StartedAt: 2026-08-17 07:37:21 +0000 UTC FinishedAt: 2026-08-17 08:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[0] Phase: Succeeded StartedAt: 2026-08-17 07:37:21 +0000 UTC FinishedAt: 2026-08-17 07:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 07:37:21 +0000 UTC FinishedAt: 2026-08-17 07:57:21 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "d6a26af1-4785-407a-a97e-18adb9ff4c4a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_emit_insn", "bpf_jit_supports_insn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNpZ24tZXh0ZW5kZWQgbWVtb3J5IGxvYWRzIChCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYKSBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBKSVQgYmFja2VuZCB0byBlbWl0IHRoZSBjb3JyZWN0IFJJU0MtViBpbnN0cnVjdGlvbnMgZm9yIHRoZXNlIEJQRiBvcGVyYXRpb25zIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0cy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtaWdodCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsYXRpb24gd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbmNvcnJlY3QgY29kZSBleGVjdXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZGZiMTIxN2I2MDZhYTBmY2I5NWU5NDhhNmI3YzYyMTQ2OTFlNmM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGY5ZDUzNDdiYTk2NmIuLjU3ODZmN2RmYzhhNzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtNzc3LDYgJiM0Mzs3NzcsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE5MDIsMTMgJiM0MzsxOTAzLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcbiYjNDM7XHQvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyAmIzQzOyBSVl9SRUdfQVJFTkEgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0I6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9XOlxuIFx0e1xuIFx0XHRib29sIHNpZ25fZXh0O1xuIFxuIFx0XHRzaWduX2V4dCA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYIHx8XG4tXHRcdFx0ICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1g7XG4mIzQzO1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8XG4mIzQzO1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XG4gXG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xuJiM0MztcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8XG4mIzQzO1x0XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCkge1xuIFx0XHRcdGVtaXRfYWRkKFJWX1JFR19UMiwgcnMsIFJWX1JFR19BUkVOQSwgY3R4KTtcbiBcdFx0XHRycyA9IFJWX1JFR19UMjtcbiBcdFx0fVxuQEAgLTIxMjYsMTAgJiM0MzsyMTMzLDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuIFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbiBcdFx0XHRcdHJldHVybiBydl9leHRfZW5hYmxlZChaQUNBUyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxuLVx0XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcbi1cdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG5AQCAtMjg2LDYgJiM0MzsyODYsMTkgQEAgX19qaXRlZChcJiMzNDthZGRcdHgxMSwgeDAsIHgyOFwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O2xkcnNoXHR4MjIsIFt4MTEsICMweDE4XVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O2FkZFx0eDExLCB4MCwgeDI4XCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7bGRyc2JcdHgyMiwgW3gxMSwgIzB4MjBdXCYjMzQ7KVxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGE1LCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsd1x0czMsIDB4MTAodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGE1LCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsaFx0czMsIDB4MTgodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGE1LCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsYlx0czMsIDB4MjAodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGEwLCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsd1x0czQsIDB4MTAodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGEwLCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsaFx0czQsIDB4MTgodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGEwLCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsYlx0czQsIDB4MjAodDIpXCYjMzQ7KVxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2Rpc2FzbSh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zMTcsNiAmIzQzOzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7QXJlbmEgTERTWCBFeGNlcHRpb25cJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2V4Y2VwdGlvbih2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zMzgsNiAmIzQzOzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7QXJlbmEgTERTWCwgUzhcJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiYjNDM7X19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zNjksNiAmIzQzOzM4NCw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7QXJlbmEgTERTWCwgUzE2XCYjMzQ7KVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4mIzQzO19fYXJjaF9yaXNjdjY0XG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczE2KHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuQEAgLTQwMCw2ICYjNDM7NDE2LDcgQEAgX19kZXNjcmlwdGlvbihcJiMzNDtBcmVuYSBMRFNYLCBTMzJcJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiYjNDM7X19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMzIodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZGZiMTIxN2I2MDZhYTBmY2I5NWU5NDhhNmI3YzYyMTQ2OTFlNmM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwppbmRleCBmOWQ1MzQ3YmE5NjZiLi41Nzg2ZjdkZmM4YTcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKQEAgLTc3Nyw2ICYjNDM7Nzc3LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywKIAlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTSAmYW1wOyZhbXA7CiAJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCAmYW1wOyZhbXA7CiAJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiAmYW1wOyZhbXA7CiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzJTWCAmYW1wOyZhbXA7CiAJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpCiAJCXJldHVybiAwOwogCkBAIC0xOTAyLDEzICYjNDM7MTkwMywxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDoKIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzoKIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6CiYjNDM7CS8qIExEWCB8IFBST0JFX01FTTMyU1g6IGRzdCA9ICooc2lnbmVkIHNpemUgKikoc3JjICYjNDM7IFJWX1JFR19BUkVOQSAmIzQzOyBvZmYpICovCiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX1c6CiAJewogCQlib29sIHNpZ25fZXh0OwogCiAJCXNpZ25fZXh0ID0gQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTVNYIHx8Ci0JCQkgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1g7CiYjNDM7CQkJICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8CiYjNDM7CQkJICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7CiAKLQkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMikgewomIzQzOwkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fAomIzQzOwkJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYKSB7CiAJCQllbWl0X2FkZChSVl9SRUdfVDIsIHJzLCBSVl9SRUdfQVJFTkEsIGN0eCk7CiAJCQlycyA9IFJWX1JFR19UMjsKIAkJfQpAQCAtMjEyNiwxMCAmIzQzOzIxMzMsNiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpCiAJCQlpZiAoaW5zbi0mZ3Q7aW1tID09IEJQRl9DTVBYQ0hHKQogCQkJCXJldHVybiBydl9leHRfZW5hYmxlZChaQUNBUyk7CiAJCQlicmVhazsKLQkJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6Ci0JCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOgotCQljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzoKLQkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmMKaW5kZXggNDEzNDA4NzdkYzlkOS4uZWQwYTBmMTU5YmMxMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jCkBAIC0yODYsNiAmIzQzOzI4NiwxOSBAQCBfX2ppdGVkKCYjMzQ7YWRkCXgxMSwgeDAsIHgyOCYjMzQ7KQogX19qaXRlZCgmIzM0O2xkcnNoCXgyMiwgW3gxMSwgIzB4MThdJiMzNDspCiBfX2ppdGVkKCYjMzQ7YWRkCXgxMSwgeDAsIHgyOCYjMzQ7KQogX19qaXRlZCgmIzM0O2xkcnNiCXgyMiwgW3gxMSwgIzB4MjBdJiMzNDspCiYjNDM7X19hcmNoX3Jpc2N2NjQKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhNSwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bHcJczMsIDB4MTAodDIpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTUsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2xoCXMzLCAweDE4KHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGE1LCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsYglzMywgMHgyMCh0MikmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhMCwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bHcJczQsIDB4MTAodDIpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTAsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2xoCXM0LCAweDE4KHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGEwLCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsYglzNCwgMHgyMCh0MikmIzM0OykKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2Rpc2FzbSh2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKQEAgLTMxNyw2ICYjNDM7MzMwLDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O0FyZW5hIExEU1ggRXhjZXB0aW9uJiMzNDspCiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAomIzQzO19fYXJjaF9yaXNjdjY0CiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9leGNlcHRpb24odm9pZCAqY3R4KQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC0zMzgsNiAmIzQzOzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oJiMzNDtBcmVuYSBMRFNYLCBTOCYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKC0xKQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3M4KHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKApAQCAtMzY5LDYgJiM0MzszODQsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7QXJlbmEgTERTWCwgUzE2JiMzNDspCiBfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczE2KHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKApAQCAtNDAwLDYgJiM0Mzs0MTYsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7QXJlbmEgTERTWCwgUzMyJiMzNDspCiBfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczMyKHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE2CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW1wYWN0cyB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgYW5kIGEgc2VsZnRlc3QgZmlsZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUgSklUIGNvbXBpbGVyLCBhbmQgYWxzbyBjb3JyZWN0aW5nIHNvbWUgbGltaXRhdGlvbnMgYXJvdW5kIGBCUEZfTUVNU1hgIHZhcmlhbnRzLiBFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgZW5oYW5jZW1lbnQgdG8gdGhlIEpJVCwgZW5hYmxpbmcgdGhlIEpJVCBjb21waWxhdGlvbiBvZiBpbnN0cnVjdGlvbnMgaXQgY291bGRuJiMzOTt0IGhhbmRsZSBiZWZvcmUuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXJlYSwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBjaGFuZ2VzIG9jY3VyIHdpdGhpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgZXhwZWN0IHRvIHNlZSBtb2RpZmljYXRpb25zIGluIHRoZSBmdW5jdGlvbnMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAsIGBicGZfaml0X2VtaXRfaW5zbmAsIGFuZCBjcnVjaWFsbHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIEpJVCYjMzk7cyBpbnN0cnVjdGlvbiBlbWlzc2lvbiBhbmQgc3VwcG9ydCBjaGVja3MuCgpCZWZvcmUgSSBkaWcgaW50byB0aGUgY29kZSwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19CUEZfSklUYCBpcyB0aGUgbWFpbiBvbmUsIHNvIEkmIzM5O2xsIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBwbGF5cyBuaWNlbHkgd2l0aCB0aGF0LiBUbyBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQsIEkmIzM5O2xsIHN0YXJ0IGJ5IGdyZXBwaW5nIGZvciBgYnBmX2ppdF9lbWl0X2luc25gIGluIHRoZSBmaWxlLiBUaGF0IHdpbGwgcXVpY2tseSBoaWdobGlnaHQgdGhlIGxpbmVzIG9mIGNvZGUgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGltcG9ydGFudCBhZGRpdGlvbiB0byB0aGUgUklTQy1WIEJQRiBKSVQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMzMz1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjktXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNzA6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNzEtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipSSVNDLVYgQlBGIEpJVCBJbnN0cnVjdGlvbiBFbWlzc2lvbiBVcGRhdGUqKgoKQWxyaWdodCwgc28gdGhlIGBicGZfaml0X2VtaXRfaW5zbmAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIFJJU0MtViBCUEYgSklUIGluc3RydWN0aW9uIGVtaXNzaW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBlbmdpbmUsIHJlYWxseSwgZm9yIGdlbmVyYXRpbmcgdGhlIG1hY2hpbmUgY29kZS4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhZGQgc3VwcG9ydCBmb3IgYSBjb3VwbGUgb2Ygc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uczogYEJQRl9QUk9CRV9NRU0zMlNYYCBhbmQgYEJQRl9NRU1TWGAuIFRoZXNlIGxvb2sgbGlrZSBtZW1vcnkgYWNjZXNzIHdpdGggc2lnbiBleHRlbnNpb247IHRoaXMgaXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciB1cyBoZXJlLCBnaXZlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgMzJiaXQgdGFyZ2V0IGFuZCBtZW1vcnkgb3BlcmF0aW9ucyB3aXRoIHNpZ24gZXh0ZW5zaW9uIGlzIGltcG9ydGFudCBmb3IgYWNoaWV2aW5nIG91ciB0YXJnZXQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIGNvcnJlY3RseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBmbGFncyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGFzIGV4cGVjdGVkIGZyb20gdGhlIHN0YXJ0LCBhcyBJIGRvbiYjMzk7dCB3YW50IHRvIGNoYXNlIG15IHRhaWwgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFN1cHBvcnQgb24gUklTQy1WKioKCkFscmlnaHQsIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFyZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIENsZWFybHksIGBCUEZfSklUYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuIEl0JiMzOTtzIHRoZSBKSVQgY29tcGlsZXIsIGFmdGVyIGFsbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBzdXBwb3J0IGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciBKSVQgY29tcGlsZXIuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGV5JiMzOTt2ZSBlbmFibGVkIEpJVCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLCBJIGtub3cgdGhlcmUgd2lsbCBiZSBhIHNlY3Rpb24gaW4gdGhhdCBmaWxlIHNwZWNpZmljYWxseSBmb3IgQlBGIGFuZCBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl0ZWN0dXJlIGV2ZW4gKmFsbG93cyogYSBKSVQgZm9yIEJQRiBhbmQsIGlmIHNvLCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFN1cHBvcnQgaW4gUklTQy1WKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEJQRiBKSVQgaXMgc3VwcG9ydGVkIGluIHRoZSBSSVNDLVYga2VybmVsLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdXN1YWxseSB0aGUgYmVzdCwgc28gbGV0JiMzOTtzIGp1c3QgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgb3BlbiB1cCB0aGUgYGFyY2gvcmlzY3YvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGBIQVZFX0JQRl9KSVRgIG9wdGlvbiBkZWNsYXJlZCwgb3IsIGF0IGxlYXN0LCBzb21ldGhpbmcgY2xlYXJseSByZWxhdGVkLiBHcmVwcGluZyBmb3IgdGhlIHN0cmluZyAmIzM0O0hBVkVfQlBGX0pJVCYjMzQ7IGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIGFuc3dlci4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB0aGVyZSYjMzk7cyBleHBsaWNpdCBKSVQgc3VwcG9ydCwgYW5kIHBvc3NpYmx5IGhvdyBpdCYjMzk7cyBlbmFibGVkIG9yIGNvbmZpZ3VyZWQuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIGZ1cnRoZXIgaWYgbmVjZXNzYXJ5LCBidXQgdGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBmb3IgQlBGIEpJVCBTdXBwb3J0IGluIFJJU0MtVioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIGxpa2UgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjb3VsZCBgSEFWRV9CUEZfSklUYCBiZSBzZWxlY3RlZCBzb21ld2hlcmUgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2A/IEl0IHdvdWxkIGJlIHNpbGx5IHRvIHJlLWludmVudCB0aGUgd2hlZWwgaWYgaXQmIzM5O3MgYWxyZWFkeSB0aGVyZSEgU28sIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvcmlzY3YvS2NvbmZpZ2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IHNlYXJjaCBmb3IgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBuZWNlc3NhcnkgSklUIHN1cHBvcnQgZXhpc3RzIHdpdGhpbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSYjMzk7cyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTm8gbmVlZCB0byBnbyBkb3duIHRoZSByYWJiaXQgaG9sZSBpZiBpdCYjMzk7cyBhbHJlYWR5IHJlYWRpbHkgYXZhaWxhYmxlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRVxuYXJjaC9yaXNjdi9LY29uZmlnOjE2ODpcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTE2OS1cdHNlbGVjdCBIQVZFX0dFTkVSSUNfVElGX0JJVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEVCUEYgSklUIEFzc2Vzc21lbnQqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIGBIQVZFX0VCUEZfSklUYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLCB3aGljaCwgb2YgY291cnNlLCBhcmUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVhbGluZyB3aXRoIGVCUEYgSklUIGNvbXBpbGF0aW9uLgoKTm93LCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgSSYjMzk7bSBhbHJlYWR5IHplcm9pbmcgaW4gb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gYGJwZl9qaXRfZW1pdF9pbnNuYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMsIGFzIHRoZXkmIzM5O3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBzdXBwb3J0IGNoZWNrcy4gSSYjMzk7bSBhbHNvIG5vdGluZyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLCBJIG1pZ2h0IGdpdmUgaXQgbGVzcyBpbml0aWFsIHByaW9yaXR5IHVubGVzcyBpdCYjMzk7cyBpbmRpcmVjdGx5IGV4cG9zZWQgdGhyb3VnaCBhbm90aGVyIGZ1bmN0aW9uLgoKTXkgbmV4dCBzdGVwPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhlbSB0byBiZSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSBoYW5kbGVzIHRoZXNlIG9wZXJhdGlvbnMgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEyMj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmEodm9pZClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjYtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMjc6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUzMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQlBGIEpJVCBmdW5jdGlvbnMsIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBBbmQgaXQmIzM5O3MganVzdCBoaXQgbWU6IHRoZXkmIzM5O3JlIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgaXNuJiMzOTt0IGl0PyBJZiB0aGV5IHdlcmUgYHN0YXRpY2AsIHRoZXkmIzM5O2QgYmUgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBidXQgdGhleSBhcmVuJiMzOTt0LiBIbW0sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgc3BlY2lmaWNhbGx5IGlzbiYjMzk7dCBzdGF0aWMuIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBhY2N1cmF0ZS4gSSBzaG91bGQgZ28gYW5kIGV4YW1pbmUgdGhlIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaD0xMzI1PXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDoxMzI3OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMjgtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgQlBGIEpJVCBDb21waWxhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhhdCYjMzk7cyBjbGVhciBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBicGZfaml0X2VtaXRfaW5zbmAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhbSBJIGNvcnJlY3QgdG8gYXNzdW1lIHRoYXQgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyAqb25seSogY2FsbGVkIGZyb20gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYCBvciBhIHNpbWlsYXJseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZT8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBhbmQgZW5zdXJpbmcgdGhlIEpJVCBjb21waWxlciYjMzk7cyBiZWhhdmlvciBpcyBjb250YWluZWQgb3IgYXQgbGVhc3QgbWFuYWdlYWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGNvdWxkIG1lYW4gdGhhdCBkZWJ1Z2dpbmcgaXMgZWFzaWVyLCB0aGUgY29kZSBpcyBtb3JlIG1hbmFnZWFibGUsIGFuZCB0aGUgSklUIGlzIHNwZWNpZmljIHRvIFJJU0MtVi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjU9dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjEzMjc6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyOC1cdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTk0Mz1zdGF0aWMgdm9pZCBlbWl0X3pleHQ2NChjb25zdCBzOCAqZHN0LCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTk1Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6OTUzOmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy05NTQtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzM9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzY5LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzcwOmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzcxLVx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM9MTk9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGV4dHJhX3Bhc3MsIGludCAqb2Zmc2V0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTI3LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6Mjg6XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9pbnNuKGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yOS1cdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5vbi1TdGF0aWMgU3VycHJpc2UgaW4gQlBGIEpJVCBTdXBwb3J0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHJldmlld2luZyB0aGUgY29kZSBhbmQgc29tZXRoaW5nIGp1c3QganVtcGVkIG91dCBhdCBtZS4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFuZCwgd2FpdCBhIG1pbnV0ZS4uLiB3aHkgaXMgKnRoYXQqIG5vdCBkZWNsYXJlZCBgc3RhdGljYD8gSSBtZWFuLCBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiByZWxhdGVkIHRvIEpJVCBzdXBwb3J0IGZvciBCUEYuIEkmIzM5O2QganVzdCBhc3N1bWVkIGl0IHdvdWxkIGJlIGludGVybmFsIHRvIHRoZSBKSVQgZW5naW5lLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiB3YXMgdGhhdCBpdCB3YXMgYSBoZWxwZXIgZnVuY3Rpb24uIE5vdyBJJiMzOTttIHdvbmRlcmluZyB3aGF0IGV4dGVybmFsIGNvZGUgaXMgYWNjZXNzaW5nIHRoaXMgYW5kIHdoeS4gV2hhdCYjMzk7cyB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb24gaGVyZSB0aGF0IG1hZGUgdGhlbSBkZWNpZGUgdG8gZXhwb3NlIHRoaXMgc3ltYm9sIGV4dGVybmFsbHk/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBhbmQgdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJcyB0aGlzIGFuIGFjY2VzcyBwYXR0ZXJuIEkmIzM5O20gbm90IGZhbWlsaWFyIHdpdGg/IElzIHRoaXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZnJhZ2lsaXR5PyBJcyB0aGlzIGluZGljYXRpdmUgb2YgYSBiaWdnZXIgZGVzaWduIGlzc3VlPyBOb3cgSSBoYXZlIHRvIGdvIGNoYXNlIHRoaXMgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMTIyPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEyNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipJbml0aWFsIEpvbHQgb2YgUmVjb2duaXRpb246IFVuZXhwZWN0ZWQgQ2FsbCBMb2NhdGlvbioqCgpXYWl0IGEgbWludXRlLCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYD8gVGhhdCBmdW5jdGlvbiwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBkZWVwbHkgaW52b2x2ZWQgd2l0aCB0aGUgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGF0aW9uIHN1cHBvcnQgd2l0aGluIEJQRiwgcmlnaHQ/IEFuZCBJJiMzOTttIHNlZWluZyBpdCByZWZlcmVuY2VkLi4uIGZyb20gKmdlbmVyaWMqIEJQRiBjb2RlPyBUaGF04oCZcyBub3QgcXVpdGUgaG93IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0aGluZ3MgdG8gYmUgc3RydWN0dXJlZC4gTXkgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCB0aGUgSklULXNwZWNpZmljIHN0dWZmIHdhcywgd2VsbCwgKnNwZWNpZmljKiB0byB0aGUgSklUIGFuZCBwb3RlbnRpYWxseSBpc29sYXRlZCB0byB0aGUgSklUIGJhY2tlbmQuIFRoaXMgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGEgbG93LWxldmVsIEpJVCBzdXBwb3J0IGZ1bmN0aW9uIGlzIHNlZW1pbmdseSBiZWluZyBpbnZva2VkIGF0IGEgbW9yZSBnZW5lcmFsIGxldmVsLiBJcyB0aGlzIHBhcnQgb2Ygc29tZSBjbGV2ZXIgb3B0aW1pemF0aW9uPyBPciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgZGVzaWduIHRoYXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBjYWxsLiBJcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIGludGVncmF0aW9uLCBhbmQgaWYgc28sIHdoYXQgaXMgaXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGRlY2lzaW9uIGJlaGluZCB0aGlzIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jPTMzMDc9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMzMTEtXG5rZXJuZWwvYnBmL2NvcmUuYzozMzEyOmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEzLXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTY4OD1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy04OTEtXHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg5MjpcdFx0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19pbnNuKGluc24sIHRydWUpKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg5My1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3NpZ24gZXh0ZW5kaW5nIGxvYWRzIGZyb20gYXJlbmEgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0XFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDg1MD1zdGF0aWMgYm9vbCBhdG9taWNfcHRyX3R5cGVfb2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODYxLVx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODYyOlx0XHRyZXR1cm4gYnBmX2ppdF9zdXBwb3J0c19pbnNuKGluc24sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBKSVQgU3VwcG9ydCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIEkga25vdyB0aGlzIGlzIGEgd2VhayBmdW5jdGlvbiBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AsIGJ1dCBpdCYjMzk7cyAqb3ZlcnJpZGRlbiogaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBUaGF0IG1lYW5zIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kLCBwYXJ0aWN1bGFybHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBjb25zaWRlciBhcyBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuIFRoZXkmIzM5O3JlIGNsZWFybHkgaW1wb3J0YW50IGhvb2tzIGZvciB0aGUgUklTQy1WIEpJVC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gYWxyZWFkeSBjZXJ0YWluIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgaW52b2x2ZWQuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggUklTQy1WLCBgQ09ORklHX1JJU0NWYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLCBpbXBsaWVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuIFRoZSBmYWN0IHRoYXQgdGhlIFJJU0MtViBKSVQgc3BlY2lmaWNhbGx5IHRhcmdldHMgNjQtYml0IChgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgaXMgb25seSBjb21waWxlZCBmb3IgNjQtYml0IFJJU0MtVikgbWFrZXMgbWUgd29uZGVyIGlmIGBDT05GSUdfNjRCSVRgIGlzIGFsc28gcmVxdWlyZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXA2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlPTU9aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm9cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTctZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyBSSVNDLVYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gKkNPTkZJR19BUkNIX1JWNjRJKi4uLiBhaGEsIHRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIDY0LWJpdCBSSVNDLVYuIE15IG1lbnRhbCBtb2RlbCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgdGhpcyB0eXBpY2FsbHkgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbi4gTm93LCBpc24mIzM5O3QgKkFSQ0hfUlY2NEkqIHVzdWFsbHkgcHVsbGVkIGluIGJ5IHRoZSAqNjRCSVQqIG9wdGlvbj8gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIGhvdyBpdCBnZW5lcmFsbHkgd29ya3MsIHNvIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHF1aWNrLiBObyBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBkZXRhaWxzIEkgYWxyZWFkeSBrbm93Li4uIGp1c3QgY29uZmlybSB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jeSBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfUlY2NEkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTQwNT1jb25maWcgQVJDSF9SVjMySVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00MTAtXG5hcmNoL3Jpc2N2L0tjb25maWc6NDExOmNvbmZpZyBBUkNIX1JWNjRJXG5hcmNoL3Jpc2N2L0tjb25maWctNDEyLVx0Ym9vbCBcJiMzNDtSVjY0SVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlY2lwaGVyaW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgQVJDSF9SVjY0SWAuLi4gdGhhdCByZXByZXNlbnRzIGEgY29uZmlndXJhdGlvbi4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgYSAqY2hvaWNlKiB0aGF0IGNhbiBiZSBtYWRlLCBvciBpcyBpdCBtb3JlIG9mIGEgYm9vbGVhbiBmbGFnLCBqdXN0IGluZGljYXRpbmcgdGhhdCBSVjY0SSBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZCBvciBwcmVzZW50PyBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNlbWFudGljcyBoZXJlLiBEb2VzIGl0IHJlcHJlc2VudCB0aGUgY29yZSBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uIGl0c2VsZiwgb3IgYSBzaW1wbGUgZmVhdHVyZSBiaXQ/JiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9SVjY0SSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWc9Mzk4PWNob2ljZVxuYXJjaC9yaXNjdi9LY29uZmlnLTM5OS1cdHByb21wdCBcJiMzNDtCYXNlIElTQVwmIzM0O1xuYXJjaC9yaXNjdi9LY29uZmlnOjQwMDpcdGRlZmF1bHQgQVJDSF9SVjY0SVxuYXJjaC9yaXNjdi9LY29uZmlnLTQwMS1cdGhlbHBcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9NDA1PWNvbmZpZyBBUkNIX1JWMzJJXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMC1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTE6Y29uZmlnIEFSQ0hfUlY2NElcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTItXHRib29sIFwmIzM0O1JWNjRJXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTczCgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDU4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRhcmdldHMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBTaW5jZSBgQVJDSF9SVjY0SWAgaXMgdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdC4gV2UgYXJlIGZvY3VzaW5nIG9uIFJJU0MtViwgYnV0IHN5emthbGxlciBjb3VsZCB0ZXN0IG9uIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMsIHNvIEkgc2hvdWxkIGp1c3QgcHJvdmlkZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuCgpJIHJlbWVtYmVyIGZyb20gdGhlIGBhcmNoL3Jpc2N2L0tjb25maWdgIHRoYXQgYEJQRl9KSVRgIGRlcGVuZHMgb24gYE1NVWAsIGJ1dCB0aGF0JiMzOTtzIHR5cGljYWxseSBlbmFibGVkIGFueXdheSwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4gVGhpcyBwYXRjaCAqZnVuY3Rpb25hbGx5KiBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgd2hpY2ggYXJlIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMsIGFzIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24gUklTQy1WLgoKRm9yIHN5bWJvbCB0YXJnZXRpbmcsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgZm9jdXMgb24gYGJwZl9qaXRfZW1pdF9pbnNuYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIEkgZGlkIGNvbnNpZGVyIG90aGVyIGZ1bmN0aW9ucywgc3VjaCBhcyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCBidXQgaXQgaXMgc3RhdGljIGFuZCBub3Qgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gZnV6emluZy4gU2luY2UgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBhIHZlcnkgaG90IHBhdGggZHVyaW5nIEpJVCBjb21waWxhdGlvbiwgaXQgaXMgYSBncmVhdCBjaG9pY2UuIEJvdGggYXJlIGZpbmUuCgpUbyBzdW1tYXJpemUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZXNlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhbmQgdGFyZ2V0IGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1ggaW5zdHJ1Y3Rpb25zIGluIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGVuYWJsZXMgbmV3IEJQRiBpbnN0cnVjdGlvbnMgdG8gYmUgSklUIGNvbXBpbGVkIG9uIFJJU0MtViwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1ggaW5zdHJ1Y3Rpb25zIGluIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGVuYWJsZXMgbmV3IEJQRiBpbnN0cnVjdGlvbnMgdG8gYmUgSklUIGNvbXBpbGVkIG9uIFJJU0MtViwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNpZ24tZXh0ZW5kZWQgbWVtb3J5IGxvYWRzIChCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYKSBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBKSVQgYmFja2VuZCB0byBlbWl0IHRoZSBjb3JyZWN0IFJJU0MtViBpbnN0cnVjdGlvbnMgZm9yIHRoZXNlIEJQRiBvcGVyYXRpb25zIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0cy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtaWdodCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsYXRpb24gd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbmNvcnJlY3QgY29kZSBleGVjdXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGRmYjEyMTdiNjA2YWEwZmNiOTVlOTQ4YTZiN2M2MjE0NjkxZTZjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjU1OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZjlkNTM0N2JhOTY2Yi4uNTc4NmY3ZGZjOGE3MCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC03NzcsNiAmIzQzOzc3Nyw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsCiAJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0gJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTTMyU1ggJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKQogCQlyZXR1cm4gMDsKIApAQCAtMTkwMiwxMyAmIzQzOzE5MDMsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6CiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6CiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOgomIzQzOwkvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyAmIzQzOyBSVl9SRUdfQVJFTkEgJiM0Mzsgb2ZmKSAqLwomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9COgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9IOgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9XOgogCXsKIAkJYm9vbCBzaWduX2V4dDsKIAogCQlzaWduX2V4dCA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWCB8fAotCQkJICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYOwomIzQzOwkJCSAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fAomIzQzOwkJCSAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYOwogCi0JCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHsKJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHwKJiM0MzsJCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCkgewogCQkJZW1pdF9hZGQoUlZfUkVHX1QyLCBycywgUlZfUkVHX0FSRU5BLCBjdHgpOwogCQkJcnMgPSBSVl9SRUdfVDI7CiAJCX0KQEAgLTIxMjYsMTAgJiM0MzsyMTMzLDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKQogCQkJaWYgKGluc24tJmd0O2ltbSA9PSBCUEZfQ01QWENIRykKIAkJCQlyZXR1cm4gcnZfZXh0X2VuYWJsZWQoWkFDQVMpOwogCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COgotCQljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDoKLQkJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6Ci0JCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jCmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYwpAQCAtMjg2LDYgJiM0MzsyODYsMTkgQEAgX19qaXRlZCgmIzM0O2FkZAl4MTEsIHgwLCB4MjgmIzM0OykKIF9faml0ZWQoJiMzNDtsZHJzaAl4MjIsIFt4MTEsICMweDE4XSYjMzQ7KQogX19qaXRlZCgmIzM0O2FkZAl4MTEsIHgwLCB4MjgmIzM0OykKIF9faml0ZWQoJiMzNDtsZHJzYgl4MjIsIFt4MTEsICMweDIwXSYjMzQ7KQomIzQzO19fYXJjaF9yaXNjdjY0CiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTUsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2x3CXMzLCAweDEwKHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGE1LCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsaAlzMywgMHgxOCh0MikmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhNSwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bGIJczMsIDB4MjAodDIpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTAsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2x3CXM0LCAweDEwKHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGEwLCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsaAlzNCwgMHgxOCh0MikmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhMCwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bGIJczQsIDB4MjAodDIpJiMzNDspCiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9kaXNhc20odm9pZCAqY3R4KQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC0zMTcsNiAmIzQzOzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oJiMzNDtBcmVuYSBMRFNYIEV4Y2VwdGlvbiYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfZXhjZXB0aW9uKHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKApAQCAtMzM4LDYgJiM0MzszNTIsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7QXJlbmEgTERTWCwgUzgmIzM0OykKIF9fc3VjY2VzcyBfX3JldHZhbCgtMSkKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAomIzQzO19fYXJjaF9yaXNjdjY0CiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKQEAgLTM2OSw2ICYjNDM7Mzg0LDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O0FyZW5hIExEU1gsIFMxNiYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKC0xKQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3MxNih2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKQEAgLTQwMCw2ICYjNDM7NDE2LDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O0FyZW5hIExEU1gsIFMzMiYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKC0xKQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3MzMih2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTMKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogNzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEJQRiBKSVQgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBgQlBGX1BST0JFX01FTTMyU1hgIGluc3RydWN0aW9ucywgZWZmZWN0aXZlbHkgZW5hYmxpbmcgc2lnbmVkIDMyLWJpdCBtZW1vcnkgYWNjZXNzIHdpdGggc2lnbi1leHRlbnNpb24gd2l0aGluIHRoZSBCUEYgSklULiBJdCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGRlbmlhbCBvZiBzdXBwb3J0IGZvciBzaW1pbGFyIGluc3RydWN0aW9ucyB3aXRoIHNtYWxsZXIgZGF0YSB0eXBlcyAoYEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQmAsIGBIYCwgYW5kIGBXYCkgd2l0aGluIHRoZSBgYnBmX2ppdF9zdXBwb3J0c19pbnNuKClgIGZ1bmN0aW9uLCBpbmRpY2F0aW5nIHRoZXkgYXJlIG5vdyBzdXBwb3J0ZWQuIEZ1cnRoZXJtb3JlLCBpdCB1cGRhdGVzIHRoZSBzZWxmdGVzdHMgdG8gcmVmbGVjdCB0aGVzZSBjaGFuZ2VzIHdpdGggUklTQy1WLXNwZWNpZmljIEpJVCBleHBlY3RhdGlvbnMgYW5kIGVuYWJsZSBzb21lIHJlbGV2YW50IHRlc3RzLgoKTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRocmVlIGZ1bmN0aW9ucy4gSSBjYW4gc2VlIHRoZSBjb3JlIGNoYW5nZXM6CgoxLiAgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgaXMgZW5oYW5jZWQgdG8gaGFuZGxlIGBCUEZfUFJPQkVfTUVNMzJTWGAuCjIuICBgYnBmX2ppdF9lbWl0X2luc25gIGdldHMgdXBkYXRlZCB0byBub3cgdHJhbnNsYXRlIGBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfQmAgKGFuZCBgSGAgYW5kIGBXYCkgaW5zdHJ1Y3Rpb25zLCBzZXR0aW5nIGBzaWduX2V4dGAgdG8gdHJ1ZSBhbmQgYWRkaW5nIGBSVl9SRUdfQVJFTkFgIHRvIHRoZSBzb3VyY2UgcmVnaXN0ZXIuCjMuICBUaGUgY3J1Y2lhbCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHJlbW92ZSBhbiBleHBsaWNpdCBibG9jayB0aGF0IGhhZCBwcmV2ZW50ZWQgdGhlIEpJVCBmcm9tIHN1cHBvcnRpbmcgc2lnbmVkIGV4dGVuZGVkIGxvYWQgaW5zdHJ1Y3Rpb25zLgoKTm93LCBkb2VzIHRoaXMgb3BlbiBhbnkgZG9vcnMgZm9yIEtNU0FOIHRvIGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhIEpJVCBidWcgY291bGQsIGluIHRoZW9yeSwgdHJhbnNsYXRlIEJQRiBpbnN0cnVjdGlvbnMgaW5jb3JyZWN0bHksIGFuZCB0aGF0ICpjb3VsZCogbGVhZCB0byBhIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgdGhhdCYjMzk7cyBub3QgYSB1bmlxdWUgcHJvYmxlbSBmb3IgS01TQU4uIEFueSBKSVQgYnVnIGNhbiBsZWFkIHRvIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgd2lsbCBsaWtlbHkgY2F0Y2ggdmlhIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBmb3IgYSAqc3BlY2lmaWMqIHByb2JsZW0gdGhhdCBLQVNBTiBtYXkgbm90IGNhdGNoLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KClRoaXMgcGF0Y2ggaXMgc2ltcGx5IHRyYW5zbGF0aW5nIEJQRiBpbnN0cnVjdGlvbnMgaW50byBSSVNDLVYgaW5zdHJ1Y3Rpb25zLiBUaGVyZSYjMzk7cyBubyBuZXcga2VybmVsIGRhdGEgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyByZWxpYW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBUaGlzIGlzbiYjMzk7dCBhYm91dCAqYWxsb2NhdGluZyogbWVtb3J5OyBpdCYjMzk7cyBhYm91dCBnZW5lcmF0aW5nIGNvZGUgdG8gKmFjY2VzcyogbWVtb3J5LiBUaGF0IGNvdWxkIGdvIHdyb25nIGFuZCBkbyBhbGwgc29ydHMgb2YgbmFzdHkgdGhpbmdzLiBLQVNBTiBpcyB0aGUgbW9zdCBsaWtlbHkgdG9vbCB0byBjYXRjaCB0aG9zZSBwcm9ibGVtcy4gS01TQU4gaXMgdGhlIHRvb2wgdG8gdXNlIHdoZW4gdGhlcmUmIzM5O3MgYW4gYWN0dWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLgoKVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGUgc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGRlYWxzIHdpdGggSklUIGNvbXBpbGF0aW9uIG9mIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByaXNrIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaXMgYSBnZW5lcmFsIHByb3BlcnR5IG9mIGEgY29kZSBleGVjdXRpb24gYnVnLCB3aGljaCBLQVNBTiwgYW5kIHBvdGVudGlhbGx5IEtNU0FOLCB3b3VsZCBjYXRjaC4gVGhpcyBpc24mIzM5O3QgYSB0YXJnZXRlZCBhdHRhY2sgb24gS01TQU4uIFRoaXMgcGF0Y2ggaXMgb25seSByZWxhdGVkIHRvIGltcGxlbWVudGluZyBzaWduLWV4dGVuZGVkIGxvYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNpZ24tZXh0ZW5kZWQgbWVtb3J5IGxvYWRzIChCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYKSBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBKSVQgYmFja2VuZCB0byBlbWl0IHRoZSBjb3JyZWN0IFJJU0MtViBpbnN0cnVjdGlvbnMgZm9yIHRoZXNlIEJQRiBvcGVyYXRpb25zIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0cy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtaWdodCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsYXRpb24gd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbmNvcnJlY3QgY29kZSBleGVjdXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NTo1MC44NzM5MzM5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ1NDcwNzE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2luc25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGX1BST0JFX01FTTMyU1ggYW5kIEJQRl9NRU1TWCBpbnN0cnVjdGlvbnMgaW4gdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZW5hYmxlcyBuZXcgQlBGIGluc3RydWN0aW9ucyB0byBiZSBKSVQgY29tcGlsZWQgb24gUklTQy1WLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NTo1MC44NzM5NDEyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzM3NDE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkZmIxMjE3YjYwNmFhMGZjYjk1ZTk0OGE2YjdjNjIxNDY5MWU2YzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBmOWQ1MzQ3YmE5NjZiLi41Nzg2ZjdkZmM4YTcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTc3Nyw2ICs3NzcsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxcbiBcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMlNYIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTE5MDIsMTMgKzE5MDMsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuIFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxcbitcXHQvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyArIFJWX1JFR19BUkVOQSArIG9mZikgKi9cXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfQjpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfSDpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfVzpcXG4gXFx0e1xcbiBcXHRcXHRib29sIHNpZ25fZXh0O1xcbiBcXG4gXFx0XFx0c2lnbl9leHQgPSBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcXG4tXFx0XFx0XFx0ICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYO1xcbitcXHRcXHRcXHQgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcXG4rXFx0XFx0XFx0ICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XFxuIFxcbi1cXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XFxuK1xcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcXG4rXFx0XFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYKSB7XFxuIFxcdFxcdFxcdGVtaXRfYWRkKFJWX1JFR19UMiwgcnMsIFJWX1JFR19BUkVOQSwgY3R4KTtcXG4gXFx0XFx0XFx0cnMgPSBSVl9SRUdfVDI7XFxuIFxcdFxcdH1cXG5AQCAtMjEyNiwxMCArMjEzMyw2IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4gXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJ2X2V4dF9lbmFibGVkKFpBQ0FTKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxcbi1cXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcXG4tXFx0XFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guY1xcbmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcXG5AQCAtMjg2LDYgKzI4NiwxOSBAQCBfX2ppdGVkKFxcXCJhZGRcXHR4MTEsIHgwLCB4MjhcXFwiKVxcbiBfX2ppdGVkKFxcXCJsZHJzaFxcdHgyMiwgW3gxMSwgIzB4MThdXFxcIilcXG4gX19qaXRlZChcXFwiYWRkXFx0eDExLCB4MCwgeDI4XFxcIilcXG4gX19qaXRlZChcXFwibGRyc2JcXHR4MjIsIFt4MTEsICMweDIwXVxcXCIpXFxuK19fYXJjaF9yaXNjdjY0XFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhNSwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsd1xcdHMzLCAweDEwKHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhNSwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsaFxcdHMzLCAweDE4KHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhNSwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsYlxcdHMzLCAweDIwKHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhMCwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsd1xcdHM0LCAweDEwKHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhMCwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsaFxcdHM0LCAweDE4KHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhMCwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsYlxcdHM0LCAweDIwKHQyKVxcXCIpXFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2Rpc2FzbSh2b2lkICpjdHgpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtMzE3LDYgKzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oXFxcIkFyZW5hIExEU1ggRXhjZXB0aW9uXFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIF9fYXJjaF94ODZfNjRcXG4gX19hcmNoX2FybTY0XFxuK19fYXJjaF9yaXNjdjY0XFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2V4Y2VwdGlvbih2b2lkICpjdHgpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtMzM4LDYgKzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oXFxcIkFyZW5hIExEU1gsIFM4XFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtMzY5LDYgKzM4NCw3IEBAIF9fZGVzY3JpcHRpb24oXFxcIkFyZW5hIExEU1gsIFMxNlxcXCIpXFxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcXG4gX19hcmNoX3g4Nl82NFxcbiBfX2FyY2hfYXJtNjRcXG4rX19hcmNoX3Jpc2N2NjRcXG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczE2KHZvaWQgKmN0eClcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUgKFxcbkBAIC00MDAsNiArNDE2LDcgQEAgX19kZXNjcmlwdGlvbihcXFwiQXJlbmEgTERTWCwgUzMyXFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMzIodm9pZCAqY3R4KVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU1OjUxLjQyODMwMDQwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1MzEwMTQ4MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfaW5zblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGX1BST0JFX01FTTMyU1ggYW5kIEJQRl9NRU1TWCBpbnN0cnVjdGlvbnMgaW4gdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZW5hYmxlcyBuZXcgQlBGIGluc3RydWN0aW9ucyB0byBiZSBKSVQgY29tcGlsZWQgb24gUklTQy1WLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZGZiMTIxN2I2MDZhYTBmY2I5NWU5NDhhNmI3YzYyMTQ2OTFlNmM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZjlkNTM0N2JhOTY2Yi4uNTc4NmY3ZGZjOGE3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC03NzcsNiArNzc3LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbiBcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0gXHUwMDI2XHUwMDI2XG4gXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggXHUwMDI2XHUwMDI2XG4gXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXHUwMDI2XHUwMDI2XG4rXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE5MDIsMTMgKzE5MDMsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuK1x0LyogTERYIHwgUFJPQkVfTUVNMzJTWDogZHN0ID0gKihzaWduZWQgc2l6ZSAqKShzcmMgKyBSVl9SRUdfQVJFTkEgKyBvZmYpICovXG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9COlxuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfSDpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX1c6XG4gXHR7XG4gXHRcdGJvb2wgc2lnbl9leHQ7XG4gXG4gXHRcdHNpZ25fZXh0ID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcbi1cdFx0XHQgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWDtcbitcdFx0XHQgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuK1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XG4gXG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcbitcdFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1gpIHtcbiBcdFx0XHRlbWl0X2FkZChSVl9SRUdfVDIsIHJzLCBSVl9SRUdfQVJFTkEsIGN0eCk7XG4gXHRcdFx0cnMgPSBSVl9SRUdfVDI7XG4gXHRcdH1cbkBAIC0yMTI2LDEwICsyMTMzLDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuIFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbiBcdFx0XHRcdHJldHVybiBydl9leHRfZW5hYmxlZChaQUNBUyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxuLVx0XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcbi1cdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG5AQCAtMjg2LDYgKzI4NiwxOSBAQCBfX2ppdGVkKFwiYWRkXHR4MTEsIHgwLCB4MjhcIilcbiBfX2ppdGVkKFwibGRyc2hcdHgyMiwgW3gxMSwgIzB4MThdXCIpXG4gX19qaXRlZChcImFkZFx0eDExLCB4MCwgeDI4XCIpXG4gX19qaXRlZChcImxkcnNiXHR4MjIsIFt4MTEsICMweDIwXVwiKVxuK19fYXJjaF9yaXNjdjY0XG4rX19qaXRlZChcImFkZFx0dDIsIGE1LCBzN1wiKVxuK19faml0ZWQoXCJsd1x0czMsIDB4MTAodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGE1LCBzN1wiKVxuK19faml0ZWQoXCJsaFx0czMsIDB4MTgodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGE1LCBzN1wiKVxuK19faml0ZWQoXCJsYlx0czMsIDB4MjAodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGEwLCBzN1wiKVxuK19faml0ZWQoXCJsd1x0czQsIDB4MTAodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGEwLCBzN1wiKVxuK19faml0ZWQoXCJsaFx0czQsIDB4MTgodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGEwLCBzN1wiKVxuK19faml0ZWQoXCJsYlx0czQsIDB4MjAodDIpXCIpXG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfZGlzYXNtKHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuQEAgLTMxNyw2ICszMzAsNyBAQCBfX2Rlc2NyaXB0aW9uKFwiQXJlbmEgTERTWCBFeGNlcHRpb25cIilcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9leGNlcHRpb24odm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtMzM4LDYgKzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oXCJBcmVuYSBMRFNYLCBTOFwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zNjksNiArMzg0LDcgQEAgX19kZXNjcmlwdGlvbihcIkFyZW5hIExEU1gsIFMxNlwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMTYodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtNDAwLDYgKzQxNiw3IEBAIF9fZGVzY3JpcHRpb24oXCJBcmVuYSBMRFNYLCBTMzJcIilcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuK19fYXJjaF9yaXNjdjY0XG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczMyKHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTU6NTEuNDI4MzAyNjk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0MjgyNzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgYSBzZWxmdGVzdCBmaWxlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgc3VwcG9ydCBmb3IgYEJQRl9QUk9CRV9NRU0zMlNYYCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBKSVQgY29tcGlsZXIsIGFuZCBhbHNvIGNvcnJlY3Rpbmcgc29tZSBsaW1pdGF0aW9ucyBhcm91bmQgYEJQRl9NRU1TWGAgdmFyaWFudHMuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBlbmhhbmNlbWVudCB0byB0aGUgSklULCBlbmFibGluZyB0aGUgSklUIGNvbXBpbGF0aW9uIG9mIGluc3RydWN0aW9ucyBpdCBjb3VsZG4ndCBoYW5kbGUgYmVmb3JlLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXJlYSwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBjaGFuZ2VzIG9jY3VyIHdpdGhpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgZXhwZWN0IHRvIHNlZSBtb2RpZmljYXRpb25zIGluIHRoZSBmdW5jdGlvbnMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAsIGBicGZfaml0X2VtaXRfaW5zbmAsIGFuZCBjcnVjaWFsbHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIEpJVCdzIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBzdXBwb3J0IGNoZWNrcy5cblxuQmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX0pJVGAgaXMgdGhlIG1haW4gb25lLCBzbyBJJ2xsIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBwbGF5cyBuaWNlbHkgd2l0aCB0aGF0LiBUbyBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgYmVpbmcgY2hhbmdlZCwgSSdsbCBzdGFydCBieSBncmVwcGluZyBmb3IgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiB0aGUgZmlsZS4gVGhhdCB3aWxsIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSBsaW5lcyBvZiBjb2RlIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGlzIHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpbXBvcnRhbnQgYWRkaXRpb24gdG8gdGhlIFJJU0MtViBCUEYgSklULlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTU6NTcuNDcxMTMyOTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjYzOTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMzMz1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2OS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNzA6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzcxLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTU6NTcuNTczNzc3Mzk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjI1NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipSSVNDLVYgQlBGIEpJVCBJbnN0cnVjdGlvbiBFbWlzc2lvbiBVcGRhdGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbiDigJMgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBpbnN0cnVjdGlvbiBlbWlzc2lvbiBwcm9jZXNzLiBJdCdzIHRoZSBlbmdpbmUsIHJlYWxseSwgZm9yIGdlbmVyYXRpbmcgdGhlIG1hY2hpbmUgY29kZS4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhZGQgc3VwcG9ydCBmb3IgYSBjb3VwbGUgb2Ygc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uczogYEJQRl9QUk9CRV9NRU0zMlNYYCBhbmQgYEJQRl9NRU1TWGAuIFRoZXNlIGxvb2sgbGlrZSBtZW1vcnkgYWNjZXNzIHdpdGggc2lnbiBleHRlbnNpb247IHRoaXMgaXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciB1cyBoZXJlLCBnaXZlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgMzJiaXQgdGFyZ2V0IGFuZCBtZW1vcnkgb3BlcmF0aW9ucyB3aXRoIHNpZ24gZXh0ZW5zaW9uIGlzIGltcG9ydGFudCBmb3IgYWNoaWV2aW5nIG91ciB0YXJnZXQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gR290dGEgbWFrZSBzdXJlIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgY29ycmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGZsYWdzIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgYXMgZXhwZWN0ZWQgZnJvbSB0aGUgc3RhcnQsIGFzIEkgZG9uJ3Qgd2FudCB0byBjaGFzZSBteSB0YWlsIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MDEuMDQ2MDM3MDQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTE3ODQ2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjAzLjg1NzgzMzUwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjcxODkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEpJVCBTdXBwb3J0IG9uIFJJU0MtVioqXG5cbkFscmlnaHQsIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC4gQ2xlYXJseSwgYEJQRl9KSVRgIGlzIHRoZSBvbmUgdGhhdCdzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlLiBJdCdzIHRoZSBKSVQgY29tcGlsZXIsIGFmdGVyIGFsbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBzdXBwb3J0IGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciBKSVQgY29tcGlsZXIuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGV5J3ZlIGVuYWJsZWQgSklUIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCwgSSBrbm93IHRoZXJlIHdpbGwgYmUgYSBzZWN0aW9uIGluIHRoYXQgZmlsZSBzcGVjaWZpY2FsbHkgZm9yIEJQRiBhbmQgSSdtIGtlZW4gdG8gc2VlIHRoZSBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl0ZWN0dXJlIGV2ZW4gKmFsbG93cyogYSBKSVQgZm9yIEJQRiBhbmQsIGlmIHNvLCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjowNy40MjUwMjUzMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NzU5MjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBIQVZFX0JQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjowNy40ODE1MTAzODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAzNTYxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgU3VwcG9ydCBpbiBSSVNDLVYqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBCUEYgSklUIGlzIHN1cHBvcnRlZCBpbiB0aGUgUklTQy1WIGtlcm5lbC4gVGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHVzdWFsbHkgdGhlIGJlc3QsIHNvIGxldCdzIGp1c3QgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSdsbCBvcGVuIHVwIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGUgZ29hbCBpcyB0byBzZWUgaWYgdGhlcmUncyBhIGBIQVZFX0JQRl9KSVRgIG9wdGlvbiBkZWNsYXJlZCwgb3IsIGF0IGxlYXN0LCBzb21ldGhpbmcgY2xlYXJseSByZWxhdGVkLiBHcmVwcGluZyBmb3IgdGhlIHN0cmluZyBcIkhBVkVfQlBGX0pJVFwiIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIGFuc3dlci4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB0aGVyZSdzIGV4cGxpY2l0IEpJVCBzdXBwb3J0LCBhbmQgcG9zc2libHkgaG93IGl0J3MgZW5hYmxlZCBvciBjb25maWd1cmVkLiBGcm9tIHRoZXJlLCBJIGNhbiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGlmIG5lY2Vzc2FyeSwgYnV0IHRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjEwLjU4NTA3NDI5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NDkxNTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjEwLjY3NjkzMDMxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUwOTQ4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIGZvciBCUEYgSklUIFN1cHBvcnQgaW4gUklTQy1WKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIGxpa2UgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjb3VsZCBgSEFWRV9CUEZfSklUYCBiZSBzZWxlY3RlZCBzb21ld2hlcmUgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2A/IEl0IHdvdWxkIGJlIHNpbGx5IHRvIHJlLWludmVudCB0aGUgd2hlZWwgaWYgaXQncyBhbHJlYWR5IHRoZXJlISBTbywgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBhcmNoL3Jpc2N2L0tjb25maWdgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBzZWFyY2ggZm9yIGBCUEZfSklUYC4gVGhhdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBuZWNlc3NhcnkgSklUIHN1cHBvcnQgZXhpc3RzIHdpdGhpbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSdzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBObyBuZWVkIHRvIGdvIGRvd24gdGhlIHJhYmJpdCBob2xlIGlmIGl0J3MgYWxyZWFkeSByZWFkaWx5IGF2YWlsYWJsZS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoxNC4wMjc4ODE4OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDQxNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTY4OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjktXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19USUZfQklUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoxNC4wODU5MjgxNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0NjU5Mjg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEVCUEYgSklUIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBgSEFWRV9FQlBGX0pJVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MgaGVyZSBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcywgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVhbGluZyB3aXRoIGVCUEYgSklUIGNvbXBpbGF0aW9uLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBJJ20gYWxyZWFkeSB6ZXJvaW5nIGluIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFyZSB0aGUgb2J2aW91cyB0YXJnZXRzLCBhcyB0aGV5J3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBzdXBwb3J0IGNoZWNrcy4gSSdtIGFsc28gbm90aW5nIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCBidXQgc2luY2UgaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgSSBtaWdodCBnaXZlIGl0IGxlc3MgaW5pdGlhbCBwcmlvcml0eSB1bmxlc3MgaXQncyBpbmRpcmVjdGx5IGV4cG9zZWQgdGhyb3VnaCBhbm90aGVyIGZ1bmN0aW9uLlxuXG5NeSBuZXh0IHN0ZXA/IExldCdzIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBleHBlY3RpbmcgdGhlbSB0byBiZSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSBoYW5kbGVzIHRoZXNlIG9wZXJhdGlvbnMgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjIwLjAzMjUyMzc3NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwNTIzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMTIyPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI2LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEyNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MjAuMTAxNTgxMDA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODI1OTM0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgQlBGIEpJVCBmdW5jdGlvbnMsIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBBbmQgaXQncyBqdXN0IGhpdCBtZTogdGhleSdyZSBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiwgaXNuJ3QgaXQ/IElmIHRoZXkgd2VyZSBgc3RhdGljYCwgdGhleSdkIGJlIGludGVybmFsIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgYnV0IHRoZXkgYXJlbid0LiBIbW0sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgc3BlY2lmaWNhbGx5IGlzbid0IHN0YXRpYy4gSXQncyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuIEkgc2hvdWxkIGdvIGFuZCBleGFtaW5lIHRoZSBkZWNsYXJhdGlvbiB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTMwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MjMuMDg0MTc2ODU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM2NzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjU9dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyOC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoyMy4xNzM1NTM4MDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5MTY4NjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIEJQRiBKSVQgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0J3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgYnBmX2ppdF9lbWl0X2luc25gLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgYW0gSSBjb3JyZWN0IHRvIGFzc3VtZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuY2Agb3IgYSBzaW1pbGFybHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGU/IFRoYXQncyB0aGUgY3J1eCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCBlbnN1cmluZyB0aGUgSklUIGNvbXBpbGVyJ3MgYmVoYXZpb3IgaXMgY29udGFpbmVkIG9yIGF0IGxlYXN0IG1hbmFnZWFibGUgYWNyb3NzIGFyY2hpdGVjdHVyZXMuIFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBjb3VsZCBtZWFuIHRoYXQgZGVidWdnaW5nIGlzIGVhc2llciwgdGhlIGNvZGUgaXMgbW9yZSBtYW5hZ2VhYmxlLCBhbmQgdGhlIEpJVCBpcyBzcGVjaWZpYyB0byBSSVNDLVYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoyNy4xNjUyNDI3NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY3MjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjU9dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyOC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz05NDM9c3RhdGljIHZvaWQgZW1pdF96ZXh0NjQoY29uc3QgczggKmRzdCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTk1Mi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjk1MzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTk1NC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzM9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjktXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzcwOmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM3MS1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcywgaW50ICpvZmZzZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoyODpcXHRcXHRyZXQgPSBicGZfaml0X2VtaXRfaW5zbihpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTI5LVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoyNy4yNzI5MjAzNDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzODcxMjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTm9uLVN0YXRpYyBTdXJwcmlzZSBpbiBCUEYgSklUIFN1cHBvcnQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIHNvbWV0aGluZyBqdXN0IGp1bXBlZCBvdXQgYXQgbWUuIEknbSB0YWtpbmcgYSBsb29rIGF0IGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFuZCwgd2FpdCBhIG1pbnV0ZS4uLiB3aHkgaXMgKnRoYXQqIG5vdCBkZWNsYXJlZCBgc3RhdGljYD8gSSBtZWFuLCBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gSklUIHN1cHBvcnQgZm9yIEJQRi4gSSdkIGp1c3QgYXNzdW1lZCBpdCB3b3VsZCBiZSBpbnRlcm5hbCB0byB0aGUgSklUIGVuZ2luZS4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gd2FzIHRoYXQgaXQgd2FzIGEgaGVscGVyIGZ1bmN0aW9uLiBOb3cgSSdtIHdvbmRlcmluZyB3aGF0IGV4dGVybmFsIGNvZGUgaXMgYWNjZXNzaW5nIHRoaXMgYW5kIHdoeS4gV2hhdCdzIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbiBoZXJlIHRoYXQgbWFkZSB0aGVtIGRlY2lkZSB0byBleHBvc2UgdGhpcyBzeW1ib2wgZXh0ZXJuYWxseT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIElzIHRoaXMgYW4gYWNjZXNzIHBhdHRlcm4gSSdtIG5vdCBmYW1pbGlhciB3aXRoPyBJcyB0aGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIGZyYWdpbGl0eT8gSXMgdGhpcyBpbmRpY2F0aXZlIG9mIGEgYmlnZ2VyIGRlc2lnbiBpc3N1ZT8gTm93IEkgaGF2ZSB0byBnbyBjaGFzZSB0aGlzIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjMyLjExMTYzOTA0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NDQyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTIxMjI9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjYtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTI3OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjozMi4xODAyODc4NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MDA1Njc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkluaXRpYWwgSm9sdCBvZiBSZWNvZ25pdGlvbjogVW5leHBlY3RlZCBDYWxsIExvY2F0aW9uKipcblxuV2FpdCBhIG1pbnV0ZSwgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmA/IFRoYXQgZnVuY3Rpb24sIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgZGVlcGx5IGludm9sdmVkIHdpdGggdGhlIEp1c3QtSW4tVGltZSAoSklUKSBjb21waWxhdGlvbiBzdXBwb3J0IHdpdGhpbiBCUEYsIHJpZ2h0PyBBbmQgSSdtIHNlZWluZyBpdCByZWZlcmVuY2VkLi4uIGZyb20gKmdlbmVyaWMqIEJQRiBjb2RlPyBUaGF04oCZcyBub3QgcXVpdGUgaG93IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0aGluZ3MgdG8gYmUgc3RydWN0dXJlZC4gTXkgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCB0aGUgSklULXNwZWNpZmljIHN0dWZmIHdhcywgd2VsbCwgKnNwZWNpZmljKiB0byB0aGUgSklUIGFuZCBwb3RlbnRpYWxseSBpc29sYXRlZCB0byB0aGUgSklUIGJhY2tlbmQuIFRoaXMgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGEgbG93LWxldmVsIEpJVCBzdXBwb3J0IGZ1bmN0aW9uIGlzIHNlZW1pbmdseSBiZWluZyBpbnZva2VkIGF0IGEgbW9yZSBnZW5lcmFsIGxldmVsLiBJcyB0aGlzIHBhcnQgb2Ygc29tZSBjbGV2ZXIgb3B0aW1pemF0aW9uPyBPciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgZGVzaWduIHRoYXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBjYWxsLiBJcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIGludGVncmF0aW9uLCBhbmQgaWYgc28sIHdoYXQgaXMgaXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGRlY2lzaW9uIGJlaGluZCB0aGlzIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjozNS45NjAzNDY5NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAxMDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MzMwNz1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzExLVxcbmtlcm5lbC9icGYvY29yZS5jOjMzMTI6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEzLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9Njg4PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODkxLVxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1gpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg5MjpcXHRcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKSkge1xcbmtlcm5lbC9icGYvZml4dXBzLmMtODkzLVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic2lnbiBleHRlbmRpbmcgbG9hZHMgZnJvbSBhcmVuYSBhcmUgbm90IHN1cHBvcnRlZCB5ZXRcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4NTA9c3RhdGljIGJvb2wgYXRvbWljX3B0cl90eXBlX29rKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODYxLVxcdGlmIChpc19hcmVuYV9yZWcoZW52LCByZWdubykpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4NjI6XFx0XFx0cmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDg2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MzYuMDcyMzYxOTg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODgzODI5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBKSVQgU3VwcG9ydCBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIGtub3cgdGhpcyBpcyBhIHdlYWsgZnVuY3Rpb24gZGVmaW5lZCBpbiBga2VybmVsL2JwZi9jb3JlLmNgLCBidXQgaXQncyAqb3ZlcnJpZGRlbiogaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBUaGF0IG1lYW5zIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kLCBwYXJ0aWN1bGFybHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBjb25zaWRlciBhcyBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuIFRoZXkncmUgY2xlYXJseSBpbXBvcnRhbnQgaG9va3MgZm9yIHRoZSBSSVNDLVYgSklULlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbSBhbHJlYWR5IGNlcnRhaW4gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBpbnZvbHZlZC4gQnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIFJJU0MtViwgYENPTkZJR19SSVNDVmAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiwgaW1wbGllZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBUaGUgZmFjdCB0aGF0IHRoZSBSSVNDLVYgSklUIHNwZWNpZmljYWxseSB0YXJnZXRzIDY0LWJpdCAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIGlzIG9ubHkgY29tcGlsZWQgZm9yIDY0LWJpdCBSSVNDLVYpIG1ha2VzIG1lIHdvbmRlciBpZiBgQ09ORklHXzY0QklUYCBpcyBhbHNvIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBlbnN1cmUgSSdtIGFjY291bnRpbmcgZm9yIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6NDAuNTYwNzQ3MTMzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg5OTk4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9NT1pZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm9cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZS03LWVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6NDAuNjY5NzUxNzIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODgzOTU5NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgUklTQy1WIEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gKkNPTkZJR19BUkNIX1JWNjRJKi4uLiBhaGEsIHRoYXQncyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3IgNjQtYml0IFJJU0MtVi4gTXkgbWVudGFsIG1vZGVsIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGhvdyB0aGlzIHR5cGljYWxseSBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uLiBOb3csIGlzbid0ICpBUkNIX1JWNjRJKiB1c3VhbGx5IHB1bGxlZCBpbiBieSB0aGUgKjY0QklUKiBvcHRpb24/IEknbSBwcmV0dHkgc3VyZSB0aGF0J3MgaG93IGl0IGdlbmVyYWxseSB3b3Jrcywgc28gbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBxdWljay4gTm8gbmVlZCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gZGV0YWlscyBJIGFscmVhZHkga25vdy4uLiBqdXN0IGNvbmZpcm0gdGhlIGV4cGVjdGVkIGRlcGVuZGVuY3kgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Njo0My42NTgxNDk4NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzUwMzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTQwNT1jb25maWcgQVJDSF9SVjMySVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMC1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDExOmNvbmZpZyBBUkNIX1JWNjRJXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMi1cXHRib29sIFxcXCJSVjY0SVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6NDMuNzY1NjU3NjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1ODMzMjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlY2lwaGVyaW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgYEFSQ0hfUlY2NElgLi4uIHRoYXQgcmVwcmVzZW50cyBhIGNvbmZpZ3VyYXRpb24uIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGlzIGEgKmNob2ljZSogdGhhdCBjYW4gYmUgbWFkZSwgb3IgaXMgaXQgbW9yZSBvZiBhIGJvb2xlYW4gZmxhZywganVzdCBpbmRpY2F0aW5nIHRoYXQgUlY2NEkgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQgb3IgcHJlc2VudD8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNlbWFudGljcyBoZXJlLiBEb2VzIGl0IHJlcHJlc2VudCB0aGUgY29yZSBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uIGl0c2VsZiwgb3IgYSBzaW1wbGUgZmVhdHVyZSBiaXQ/XCJcblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjQ3LjMyMzk5Mjk5MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MDM3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTM5OD1jaG9pY2VcXG5hcmNoL3Jpc2N2L0tjb25maWctMzk5LVxcdHByb21wdCBcXFwiQmFzZSBJU0FcXFwiXFxuYXJjaC9yaXNjdi9LY29uZmlnOjQwMDpcXHRkZWZhdWx0IEFSQ0hfUlY2NElcXG5hcmNoL3Jpc2N2L0tjb25maWctNDAxLVxcdGhlbHBcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz00MDU9Y29uZmlnIEFSQ0hfUlYzMklcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTAtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjQxMTpjb25maWcgQVJDSF9SVjY0SVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTItXFx0Ym9vbCBcXFwiUlY2NElcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjQ3LjM4NTkwMTkyNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjI1MjUxOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBCUEYgSklUIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGZvciBlZmZlY3RpdmUgZnV6emluZy4gU2luY2UgYEFSQ0hfUlY2NElgIGlzIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSwgSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdC4gV2UgYXJlIGZvY3VzaW5nIG9uIFJJU0MtViwgYnV0IHN5emthbGxlciBjb3VsZCB0ZXN0IG9uIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMsIHNvIEkgc2hvdWxkIGp1c3QgcHJvdmlkZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuXG5cbkkgcmVtZW1iZXIgZnJvbSB0aGUgYGFyY2gvcmlzY3YvS2NvbmZpZ2AgdGhhdCBgQlBGX0pJVGAgZGVwZW5kcyBvbiBgTU1VYCwgYnV0IHRoYXQncyB0eXBpY2FsbHkgZW5hYmxlZCBhbnl3YXksIHNvIHRoYXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4gVGhpcyBwYXRjaCAqZnVuY3Rpb25hbGx5KiBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgd2hpY2ggYXJlIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMsIGFzIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24gUklTQy1WLlxuXG5Gb3Igc3ltYm9sIHRhcmdldGluZywgSSdtIHRoaW5raW5nIEkgc2hvdWxkIGZvY3VzIG9uIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIGRpZCBjb25zaWRlciBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgYnV0IGl0IGlzIHN0YXRpYyBhbmQgbm90IHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gZnV6emluZy4gU2luY2UgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBhIHZlcnkgaG90IHBhdGggZHVyaW5nIEpJVCBjb21waWxhdGlvbiwgaXQgaXMgYSBncmVhdCBjaG9pY2UuIEJvdGggYXJlIGZpbmUuXG5cblRvIHN1bW1hcml6ZSwgSSdtIGdvaW5nIHRvIHNldCB0aGVzZSBjb25maWdzOiBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAgYW5kIHRhcmdldCBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNzMsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjU2LjYxMTE1NjkwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzI4NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjU2LjczODQ1NDQyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTAxNzMyOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Njo1Ni43MzkzNDkyODNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI1ODkyNzIzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkZmIxMjE3YjYwNmFhMGZjYjk1ZTk0OGE2YjdjNjIxNDY5MWU2YzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzo1NTo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBmOWQ1MzQ3YmE5NjZiLi41Nzg2ZjdkZmM4YTcwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTc3Nyw2ICs3NzcsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcdTAwMjZcdTAwMjZcbitcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMlNYIFx1MDAyNlx1MDAyNlxuIFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTkwMiwxMyArMTkwMywxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XG4rXHQvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyArIFJWX1JFR19BUkVOQSArIG9mZikgKi9cbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0I6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfVzpcbiBcdHtcbiBcdFx0Ym9vbCBzaWduX2V4dDtcbiBcbiBcdFx0c2lnbl9leHQgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCB8fFxuLVx0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYO1xuK1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8XG4rXHRcdFx0ICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWDtcbiBcbi1cdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4rXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fFxuK1x0XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCkge1xuIFx0XHRcdGVtaXRfYWRkKFJWX1JFR19UMiwgcnMsIFJWX1JFR19BUkVOQSwgY3R4KTtcbiBcdFx0XHRycyA9IFJWX1JFR19UMjtcbiBcdFx0fVxuQEAgLTIxMjYsMTAgKzIxMzMsNiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuIFx0XHRcdFx0cmV0dXJuIHJ2X2V4dF9lbmFibGVkKFpBQ0FTKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6XG4tXHRcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuLVx0XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzpcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guY1xuaW5kZXggNDEzNDA4NzdkYzlkOS4uZWQwYTBmMTU5YmMxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbkBAIC0yODYsNiArMjg2LDE5IEBAIF9faml0ZWQoXCJhZGRcdHgxMSwgeDAsIHgyOFwiKVxuIF9faml0ZWQoXCJsZHJzaFx0eDIyLCBbeDExLCAjMHgxOF1cIilcbiBfX2ppdGVkKFwiYWRkXHR4MTEsIHgwLCB4MjhcIilcbiBfX2ppdGVkKFwibGRyc2JcdHgyMiwgW3gxMSwgIzB4MjBdXCIpXG4rX19hcmNoX3Jpc2N2NjRcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTUsIHM3XCIpXG4rX19qaXRlZChcImx3XHRzMywgMHgxMCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTUsIHM3XCIpXG4rX19qaXRlZChcImxoXHRzMywgMHgxOCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTUsIHM3XCIpXG4rX19qaXRlZChcImxiXHRzMywgMHgyMCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTAsIHM3XCIpXG4rX19qaXRlZChcImx3XHRzNCwgMHgxMCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTAsIHM3XCIpXG4rX19qaXRlZChcImxoXHRzNCwgMHgxOCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTAsIHM3XCIpXG4rX19qaXRlZChcImxiXHRzNCwgMHgyMCh0MilcIilcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9kaXNhc20odm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtMzE3LDYgKzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oXCJBcmVuYSBMRFNYIEV4Y2VwdGlvblwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2V4Y2VwdGlvbih2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zMzgsNiArMzUyLDcgQEAgX19kZXNjcmlwdGlvbihcIkFyZW5hIExEU1gsIFM4XCIpXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3M4KHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuQEAgLTM2OSw2ICszODQsNyBAQCBfX2Rlc2NyaXB0aW9uKFwiQXJlbmEgTERTWCwgUzE2XCIpXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3MxNih2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC00MDAsNiArNDE2LDcgQEAgX19kZXNjcmlwdGlvbihcIkFyZW5hIExEU1gsIFMzMlwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMzIodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Njo1Ni43MzkzNTExODNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1ODkyNDI5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgaW5zdHJ1Y3Rpb25zLCBlZmZlY3RpdmVseSBlbmFibGluZyBzaWduZWQgMzItYml0IG1lbW9yeSBhY2Nlc3Mgd2l0aCBzaWduLWV4dGVuc2lvbiB3aXRoaW4gdGhlIEJQRiBKSVQuIEl0IGFsc28gcmVtb3ZlcyB0aGUgZXhwbGljaXQgZGVuaWFsIG9mIHN1cHBvcnQgZm9yIHNpbWlsYXIgaW5zdHJ1Y3Rpb25zIHdpdGggc21hbGxlciBkYXRhIHR5cGVzIChgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9CYCwgYEhgLCBhbmQgYFdgKSB3aXRoaW4gdGhlIGBicGZfaml0X3N1cHBvcnRzX2luc24oKWAgZnVuY3Rpb24sIGluZGljYXRpbmcgdGhleSBhcmUgbm93IHN1cHBvcnRlZC4gRnVydGhlcm1vcmUsIGl0IHVwZGF0ZXMgdGhlIHNlbGZ0ZXN0cyB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMgd2l0aCBSSVNDLVYtc3BlY2lmaWMgSklUIGV4cGVjdGF0aW9ucyBhbmQgZW5hYmxlIHNvbWUgcmVsZXZhbnQgdGVzdHMuXG5cbk15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aHJlZSBmdW5jdGlvbnMuIEkgY2FuIHNlZSB0aGUgY29yZSBjaGFuZ2VzOlxuXG4xLiAgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgaXMgZW5oYW5jZWQgdG8gaGFuZGxlIGBCUEZfUFJPQkVfTUVNMzJTWGAuXG4yLiAgYGJwZl9qaXRfZW1pdF9pbnNuYCBnZXRzIHVwZGF0ZWQgdG8gbm93IHRyYW5zbGF0ZSBgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0JgIChhbmQgYEhgIGFuZCBgV2ApIGluc3RydWN0aW9ucywgc2V0dGluZyBgc2lnbl9leHRgIHRvIHRydWUgYW5kIGFkZGluZyBgUlZfUkVHX0FSRU5BYCB0byB0aGUgc291cmNlIHJlZ2lzdGVyLlxuMy4gIFRoZSBjcnVjaWFsIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGZ1bmN0aW9uIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIGFuIGV4cGxpY2l0IGJsb2NrIHRoYXQgaGFkIHByZXZlbnRlZCB0aGUgSklUIGZyb20gc3VwcG9ydGluZyBzaWduZWQgZXh0ZW5kZWQgbG9hZCBpbnN0cnVjdGlvbnMuXG5cbk5vdywgZG9lcyB0aGlzIG9wZW4gYW55IGRvb3JzIGZvciBLTVNBTiB0byBmbGFnIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYSBKSVQgYnVnIGNvdWxkLCBpbiB0aGVvcnksIHRyYW5zbGF0ZSBCUEYgaW5zdHJ1Y3Rpb25zIGluY29ycmVjdGx5LCBhbmQgdGhhdCAqY291bGQqIGxlYWQgdG8gYSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIHRoYXQncyBub3QgYSB1bmlxdWUgcHJvYmxlbSBmb3IgS01TQU4uIEFueSBKSVQgYnVnIGNhbiBsZWFkIHRvIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgd2lsbCBsaWtlbHkgY2F0Y2ggdmlhIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBmb3IgYSAqc3BlY2lmaWMqIHByb2JsZW0gdGhhdCBLQVNBTiBtYXkgbm90IGNhdGNoLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuVGhpcyBwYXRjaCBpcyBzaW1wbHkgdHJhbnNsYXRpbmcgQlBGIGluc3RydWN0aW9ucyBpbnRvIFJJU0MtViBpbnN0cnVjdGlvbnMuIFRoZXJlJ3Mgbm8gbmV3IGtlcm5lbCBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVsaWFudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gVGhpcyBpc24ndCBhYm91dCAqYWxsb2NhdGluZyogbWVtb3J5OyBpdCdzIGFib3V0IGdlbmVyYXRpbmcgY29kZSB0byAqYWNjZXNzKiBtZW1vcnkuIFRoYXQgY291bGQgZ28gd3JvbmcgYW5kIGRvIGFsbCBzb3J0cyBvZiBuYXN0eSB0aGluZ3MuIEtBU0FOIGlzIHRoZSBtb3N0IGxpa2VseSB0b29sIHRvIGNhdGNoIHRob3NlIHByb2JsZW1zLiBLTVNBTiBpcyB0aGUgdG9vbCB0byB1c2Ugd2hlbiB0aGVyZSdzIGFuIGFjdHVhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGUgc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGRlYWxzIHdpdGggSklUIGNvbXBpbGF0aW9uIG9mIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHJpc2sgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpcyBhIGdlbmVyYWwgcHJvcGVydHkgb2YgYSBjb2RlIGV4ZWN1dGlvbiBidWcsIHdoaWNoIEtBU0FOLCBhbmQgcG90ZW50aWFsbHkgS01TQU4sIHdvdWxkIGNhdGNoLiBUaGlzIGlzbid0IGEgdGFyZ2V0ZWQgYXR0YWNrIG9uIEtNU0FOLiBUaGlzIHBhdGNoIGlzIG9ubHkgcmVsYXRlZCB0byBpbXBsZW1lbnRpbmcgc2lnbi1leHRlbmRlZCBsb2Fkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxMywiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NzowOS4zMjg1OTg1MzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 07:37:21 +0000 UTC FinishedAt: 2026-08-17 07:57:11 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "d6a26af1-4785-407a-a97e-18adb9ff4c4a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_emit_insn", "bpf_jit_supports_insn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNpZ24tZXh0ZW5kZWQgbWVtb3J5IGxvYWRzIChCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYKSBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBKSVQgYmFja2VuZCB0byBlbWl0IHRoZSBjb3JyZWN0IFJJU0MtViBpbnN0cnVjdGlvbnMgZm9yIHRoZXNlIEJQRiBvcGVyYXRpb25zIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0cy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtaWdodCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsYXRpb24gd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbmNvcnJlY3QgY29kZSBleGVjdXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZGZiMTIxN2I2MDZhYTBmY2I5NWU5NDhhNmI3YzYyMTQ2OTFlNmM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGY5ZDUzNDdiYTk2NmIuLjU3ODZmN2RmYzhhNzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtNzc3LDYgJiM0Mzs3NzcsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE5MDIsMTMgJiM0MzsxOTAzLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcbiYjNDM7XHQvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyAmIzQzOyBSVl9SRUdfQVJFTkEgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0I6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9XOlxuIFx0e1xuIFx0XHRib29sIHNpZ25fZXh0O1xuIFxuIFx0XHRzaWduX2V4dCA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYIHx8XG4tXHRcdFx0ICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1g7XG4mIzQzO1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8XG4mIzQzO1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XG4gXG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xuJiM0MztcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8XG4mIzQzO1x0XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCkge1xuIFx0XHRcdGVtaXRfYWRkKFJWX1JFR19UMiwgcnMsIFJWX1JFR19BUkVOQSwgY3R4KTtcbiBcdFx0XHRycyA9IFJWX1JFR19UMjtcbiBcdFx0fVxuQEAgLTIxMjYsMTAgJiM0MzsyMTMzLDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuIFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbiBcdFx0XHRcdHJldHVybiBydl9leHRfZW5hYmxlZChaQUNBUyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxuLVx0XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcbi1cdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG5AQCAtMjg2LDYgJiM0MzsyODYsMTkgQEAgX19qaXRlZChcJiMzNDthZGRcdHgxMSwgeDAsIHgyOFwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O2xkcnNoXHR4MjIsIFt4MTEsICMweDE4XVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O2FkZFx0eDExLCB4MCwgeDI4XCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7bGRyc2JcdHgyMiwgW3gxMSwgIzB4MjBdXCYjMzQ7KVxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGE1LCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsd1x0czMsIDB4MTAodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGE1LCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsaFx0czMsIDB4MTgodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGE1LCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsYlx0czMsIDB4MjAodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGEwLCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsd1x0czQsIDB4MTAodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGEwLCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsaFx0czQsIDB4MTgodDIpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2FkZFx0dDIsIGEwLCBzN1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtsYlx0czQsIDB4MjAodDIpXCYjMzQ7KVxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2Rpc2FzbSh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zMTcsNiAmIzQzOzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7QXJlbmEgTERTWCBFeGNlcHRpb25cJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuJiM0MztfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2V4Y2VwdGlvbih2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zMzgsNiAmIzQzOzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7QXJlbmEgTERTWCwgUzhcJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiYjNDM7X19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zNjksNiAmIzQzOzM4NCw3IEBAIF9fZGVzY3JpcHRpb24oXCYjMzQ7QXJlbmEgTERTWCwgUzE2XCYjMzQ7KVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4mIzQzO19fYXJjaF9yaXNjdjY0XG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczE2KHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuQEAgLTQwMCw2ICYjNDM7NDE2LDcgQEAgX19kZXNjcmlwdGlvbihcJiMzNDtBcmVuYSBMRFNYLCBTMzJcJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiYjNDM7X19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMzIodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZGZiMTIxN2I2MDZhYTBmY2I5NWU5NDhhNmI3YzYyMTQ2OTFlNmM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwppbmRleCBmOWQ1MzQ3YmE5NjZiLi41Nzg2ZjdkZmM4YTcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKQEAgLTc3Nyw2ICYjNDM7Nzc3LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywKIAlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTSAmYW1wOyZhbXA7CiAJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCAmYW1wOyZhbXA7CiAJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiAmYW1wOyZhbXA7CiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzJTWCAmYW1wOyZhbXA7CiAJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpCiAJCXJldHVybiAwOwogCkBAIC0xOTAyLDEzICYjNDM7MTkwMywxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDoKIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzoKIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6CiYjNDM7CS8qIExEWCB8IFBST0JFX01FTTMyU1g6IGRzdCA9ICooc2lnbmVkIHNpemUgKikoc3JjICYjNDM7IFJWX1JFR19BUkVOQSAmIzQzOyBvZmYpICovCiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX1c6CiAJewogCQlib29sIHNpZ25fZXh0OwogCiAJCXNpZ25fZXh0ID0gQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTVNYIHx8Ci0JCQkgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1g7CiYjNDM7CQkJICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8CiYjNDM7CQkJICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7CiAKLQkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMikgewomIzQzOwkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fAomIzQzOwkJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYKSB7CiAJCQllbWl0X2FkZChSVl9SRUdfVDIsIHJzLCBSVl9SRUdfQVJFTkEsIGN0eCk7CiAJCQlycyA9IFJWX1JFR19UMjsKIAkJfQpAQCAtMjEyNiwxMCAmIzQzOzIxMzMsNiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpCiAJCQlpZiAoaW5zbi0mZ3Q7aW1tID09IEJQRl9DTVBYQ0hHKQogCQkJCXJldHVybiBydl9leHRfZW5hYmxlZChaQUNBUyk7CiAJCQlicmVhazsKLQkJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6Ci0JCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOgotCQljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzoKLQkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmMKaW5kZXggNDEzNDA4NzdkYzlkOS4uZWQwYTBmMTU5YmMxMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jCkBAIC0yODYsNiAmIzQzOzI4NiwxOSBAQCBfX2ppdGVkKCYjMzQ7YWRkCXgxMSwgeDAsIHgyOCYjMzQ7KQogX19qaXRlZCgmIzM0O2xkcnNoCXgyMiwgW3gxMSwgIzB4MThdJiMzNDspCiBfX2ppdGVkKCYjMzQ7YWRkCXgxMSwgeDAsIHgyOCYjMzQ7KQogX19qaXRlZCgmIzM0O2xkcnNiCXgyMiwgW3gxMSwgIzB4MjBdJiMzNDspCiYjNDM7X19hcmNoX3Jpc2N2NjQKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhNSwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bHcJczMsIDB4MTAodDIpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTUsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2xoCXMzLCAweDE4KHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGE1LCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsYglzMywgMHgyMCh0MikmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhMCwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bHcJczQsIDB4MTAodDIpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTAsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2xoCXM0LCAweDE4KHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGEwLCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsYglzNCwgMHgyMCh0MikmIzM0OykKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2Rpc2FzbSh2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKQEAgLTMxNyw2ICYjNDM7MzMwLDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O0FyZW5hIExEU1ggRXhjZXB0aW9uJiMzNDspCiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAomIzQzO19fYXJjaF9yaXNjdjY0CiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9leGNlcHRpb24odm9pZCAqY3R4KQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC0zMzgsNiAmIzQzOzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oJiMzNDtBcmVuYSBMRFNYLCBTOCYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKC0xKQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3M4KHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKApAQCAtMzY5LDYgJiM0MzszODQsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7QXJlbmEgTERTWCwgUzE2JiMzNDspCiBfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczE2KHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKApAQCAtNDAwLDYgJiM0Mzs0MTYsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7QXJlbmEgTERTWCwgUzMyJiMzNDspCiBfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczMyKHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE2CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW1wYWN0cyB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgYW5kIGEgc2VsZnRlc3QgZmlsZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUgSklUIGNvbXBpbGVyLCBhbmQgYWxzbyBjb3JyZWN0aW5nIHNvbWUgbGltaXRhdGlvbnMgYXJvdW5kIGBCUEZfTUVNU1hgIHZhcmlhbnRzLiBFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgZW5oYW5jZW1lbnQgdG8gdGhlIEpJVCwgZW5hYmxpbmcgdGhlIEpJVCBjb21waWxhdGlvbiBvZiBpbnN0cnVjdGlvbnMgaXQgY291bGRuJiMzOTt0IGhhbmRsZSBiZWZvcmUuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXJlYSwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBjaGFuZ2VzIG9jY3VyIHdpdGhpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgZXhwZWN0IHRvIHNlZSBtb2RpZmljYXRpb25zIGluIHRoZSBmdW5jdGlvbnMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAsIGBicGZfaml0X2VtaXRfaW5zbmAsIGFuZCBjcnVjaWFsbHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIEpJVCYjMzk7cyBpbnN0cnVjdGlvbiBlbWlzc2lvbiBhbmQgc3VwcG9ydCBjaGVja3MuCgpCZWZvcmUgSSBkaWcgaW50byB0aGUgY29kZSwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19CUEZfSklUYCBpcyB0aGUgbWFpbiBvbmUsIHNvIEkmIzM5O2xsIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBwbGF5cyBuaWNlbHkgd2l0aCB0aGF0LiBUbyBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQsIEkmIzM5O2xsIHN0YXJ0IGJ5IGdyZXBwaW5nIGZvciBgYnBmX2ppdF9lbWl0X2luc25gIGluIHRoZSBmaWxlLiBUaGF0IHdpbGwgcXVpY2tseSBoaWdobGlnaHQgdGhlIGxpbmVzIG9mIGNvZGUgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGltcG9ydGFudCBhZGRpdGlvbiB0byB0aGUgUklTQy1WIEJQRiBKSVQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMzMz1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjktXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNzA6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNzEtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipSSVNDLVYgQlBGIEpJVCBJbnN0cnVjdGlvbiBFbWlzc2lvbiBVcGRhdGUqKgoKQWxyaWdodCwgc28gdGhlIGBicGZfaml0X2VtaXRfaW5zbmAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIFJJU0MtViBCUEYgSklUIGluc3RydWN0aW9uIGVtaXNzaW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBlbmdpbmUsIHJlYWxseSwgZm9yIGdlbmVyYXRpbmcgdGhlIG1hY2hpbmUgY29kZS4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhZGQgc3VwcG9ydCBmb3IgYSBjb3VwbGUgb2Ygc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uczogYEJQRl9QUk9CRV9NRU0zMlNYYCBhbmQgYEJQRl9NRU1TWGAuIFRoZXNlIGxvb2sgbGlrZSBtZW1vcnkgYWNjZXNzIHdpdGggc2lnbiBleHRlbnNpb247IHRoaXMgaXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciB1cyBoZXJlLCBnaXZlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgMzJiaXQgdGFyZ2V0IGFuZCBtZW1vcnkgb3BlcmF0aW9ucyB3aXRoIHNpZ24gZXh0ZW5zaW9uIGlzIGltcG9ydGFudCBmb3IgYWNoaWV2aW5nIG91ciB0YXJnZXQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIGNvcnJlY3RseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBmbGFncyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGFzIGV4cGVjdGVkIGZyb20gdGhlIHN0YXJ0LCBhcyBJIGRvbiYjMzk7dCB3YW50IHRvIGNoYXNlIG15IHRhaWwgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFN1cHBvcnQgb24gUklTQy1WKioKCkFscmlnaHQsIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFyZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIENsZWFybHksIGBCUEZfSklUYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuIEl0JiMzOTtzIHRoZSBKSVQgY29tcGlsZXIsIGFmdGVyIGFsbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBzdXBwb3J0IGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciBKSVQgY29tcGlsZXIuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGV5JiMzOTt2ZSBlbmFibGVkIEpJVCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLCBJIGtub3cgdGhlcmUgd2lsbCBiZSBhIHNlY3Rpb24gaW4gdGhhdCBmaWxlIHNwZWNpZmljYWxseSBmb3IgQlBGIGFuZCBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl0ZWN0dXJlIGV2ZW4gKmFsbG93cyogYSBKSVQgZm9yIEJQRiBhbmQsIGlmIHNvLCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFN1cHBvcnQgaW4gUklTQy1WKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEJQRiBKSVQgaXMgc3VwcG9ydGVkIGluIHRoZSBSSVNDLVYga2VybmVsLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdXN1YWxseSB0aGUgYmVzdCwgc28gbGV0JiMzOTtzIGp1c3QgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgb3BlbiB1cCB0aGUgYGFyY2gvcmlzY3YvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoZSBnb2FsIGlzIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGBIQVZFX0JQRl9KSVRgIG9wdGlvbiBkZWNsYXJlZCwgb3IsIGF0IGxlYXN0LCBzb21ldGhpbmcgY2xlYXJseSByZWxhdGVkLiBHcmVwcGluZyBmb3IgdGhlIHN0cmluZyAmIzM0O0hBVkVfQlBGX0pJVCYjMzQ7IGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIGFuc3dlci4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB0aGVyZSYjMzk7cyBleHBsaWNpdCBKSVQgc3VwcG9ydCwgYW5kIHBvc3NpYmx5IGhvdyBpdCYjMzk7cyBlbmFibGVkIG9yIGNvbmZpZ3VyZWQuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIGZ1cnRoZXIgaWYgbmVjZXNzYXJ5LCBidXQgdGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBmb3IgQlBGIEpJVCBTdXBwb3J0IGluIFJJU0MtVioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIGxpa2UgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjb3VsZCBgSEFWRV9CUEZfSklUYCBiZSBzZWxlY3RlZCBzb21ld2hlcmUgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2A/IEl0IHdvdWxkIGJlIHNpbGx5IHRvIHJlLWludmVudCB0aGUgd2hlZWwgaWYgaXQmIzM5O3MgYWxyZWFkeSB0aGVyZSEgU28sIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvcmlzY3YvS2NvbmZpZ2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IHNlYXJjaCBmb3IgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBuZWNlc3NhcnkgSklUIHN1cHBvcnQgZXhpc3RzIHdpdGhpbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSYjMzk7cyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTm8gbmVlZCB0byBnbyBkb3duIHRoZSByYWJiaXQgaG9sZSBpZiBpdCYjMzk7cyBhbHJlYWR5IHJlYWRpbHkgYXZhaWxhYmxlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRVxuYXJjaC9yaXNjdi9LY29uZmlnOjE2ODpcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTE2OS1cdHNlbGVjdCBIQVZFX0dFTkVSSUNfVElGX0JJVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEVCUEYgSklUIEFzc2Vzc21lbnQqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIGBIQVZFX0VCUEZfSklUYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLCB3aGljaCwgb2YgY291cnNlLCBhcmUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVhbGluZyB3aXRoIGVCUEYgSklUIGNvbXBpbGF0aW9uLgoKTm93LCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgSSYjMzk7bSBhbHJlYWR5IHplcm9pbmcgaW4gb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gYGJwZl9qaXRfZW1pdF9pbnNuYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMsIGFzIHRoZXkmIzM5O3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBzdXBwb3J0IGNoZWNrcy4gSSYjMzk7bSBhbHNvIG5vdGluZyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLCBJIG1pZ2h0IGdpdmUgaXQgbGVzcyBpbml0aWFsIHByaW9yaXR5IHVubGVzcyBpdCYjMzk7cyBpbmRpcmVjdGx5IGV4cG9zZWQgdGhyb3VnaCBhbm90aGVyIGZ1bmN0aW9uLgoKTXkgbmV4dCBzdGVwPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhlbSB0byBiZSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSBoYW5kbGVzIHRoZXNlIG9wZXJhdGlvbnMgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEyMj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmEodm9pZClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjYtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMjc6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUzMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQlBGIEpJVCBmdW5jdGlvbnMsIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBBbmQgaXQmIzM5O3MganVzdCBoaXQgbWU6IHRoZXkmIzM5O3JlIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgaXNuJiMzOTt0IGl0PyBJZiB0aGV5IHdlcmUgYHN0YXRpY2AsIHRoZXkmIzM5O2QgYmUgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBidXQgdGhleSBhcmVuJiMzOTt0LiBIbW0sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgc3BlY2lmaWNhbGx5IGlzbiYjMzk7dCBzdGF0aWMuIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBhY2N1cmF0ZS4gSSBzaG91bGQgZ28gYW5kIGV4YW1pbmUgdGhlIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaD0xMzI1PXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaDoxMzI3OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oLTEzMjgtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgQlBGIEpJVCBDb21waWxhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhhdCYjMzk7cyBjbGVhciBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBicGZfaml0X2VtaXRfaW5zbmAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhbSBJIGNvcnJlY3QgdG8gYXNzdW1lIHRoYXQgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyAqb25seSogY2FsbGVkIGZyb20gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jYCBvciBhIHNpbWlsYXJseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZT8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBhbmQgZW5zdXJpbmcgdGhlIEpJVCBjb21waWxlciYjMzk7cyBiZWhhdmlvciBpcyBjb250YWluZWQgb3IgYXQgbGVhc3QgbWFuYWdlYWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGNvdWxkIG1lYW4gdGhhdCBkZWJ1Z2dpbmcgaXMgZWFzaWVyLCB0aGUgY29kZSBpcyBtb3JlIG1hbmFnZWFibGUsIGFuZCB0aGUgSklUIGlzIHNwZWNpZmljIHRvIFJJU0MtVi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjU9dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXQuaC0xMzI2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oOjEzMjc6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyOC1cdFx0ICAgICAgYm9vbCBleHRyYV9wYXNzKTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTk0Mz1zdGF0aWMgdm9pZCBlbWl0X3pleHQ2NChjb25zdCBzOCAqZHN0LCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTk1Mi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6OTUzOmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy05NTQtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzM9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzY5LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzcwOmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzcxLVx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM9MTk9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGV4dHJhX3Bhc3MsIGludCAqb2Zmc2V0KVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTI3LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6Mjg6XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9pbnNuKGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yOS1cdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5vbi1TdGF0aWMgU3VycHJpc2UgaW4gQlBGIEpJVCBTdXBwb3J0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHJldmlld2luZyB0aGUgY29kZSBhbmQgc29tZXRoaW5nIGp1c3QganVtcGVkIG91dCBhdCBtZS4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFuZCwgd2FpdCBhIG1pbnV0ZS4uLiB3aHkgaXMgKnRoYXQqIG5vdCBkZWNsYXJlZCBgc3RhdGljYD8gSSBtZWFuLCBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiByZWxhdGVkIHRvIEpJVCBzdXBwb3J0IGZvciBCUEYuIEkmIzM5O2QganVzdCBhc3N1bWVkIGl0IHdvdWxkIGJlIGludGVybmFsIHRvIHRoZSBKSVQgZW5naW5lLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiB3YXMgdGhhdCBpdCB3YXMgYSBoZWxwZXIgZnVuY3Rpb24uIE5vdyBJJiMzOTttIHdvbmRlcmluZyB3aGF0IGV4dGVybmFsIGNvZGUgaXMgYWNjZXNzaW5nIHRoaXMgYW5kIHdoeS4gV2hhdCYjMzk7cyB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb24gaGVyZSB0aGF0IG1hZGUgdGhlbSBkZWNpZGUgdG8gZXhwb3NlIHRoaXMgc3ltYm9sIGV4dGVybmFsbHk/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBhbmQgdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJcyB0aGlzIGFuIGFjY2VzcyBwYXR0ZXJuIEkmIzM5O20gbm90IGZhbWlsaWFyIHdpdGg/IElzIHRoaXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZnJhZ2lsaXR5PyBJcyB0aGlzIGluZGljYXRpdmUgb2YgYSBiaWdnZXIgZGVzaWduIGlzc3VlPyBOb3cgSSBoYXZlIHRvIGdvIGNoYXNlIHRoaXMgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMTIyPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEyNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEyNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipJbml0aWFsIEpvbHQgb2YgUmVjb2duaXRpb246IFVuZXhwZWN0ZWQgQ2FsbCBMb2NhdGlvbioqCgpXYWl0IGEgbWludXRlLCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYD8gVGhhdCBmdW5jdGlvbiwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBkZWVwbHkgaW52b2x2ZWQgd2l0aCB0aGUgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGF0aW9uIHN1cHBvcnQgd2l0aGluIEJQRiwgcmlnaHQ/IEFuZCBJJiMzOTttIHNlZWluZyBpdCByZWZlcmVuY2VkLi4uIGZyb20gKmdlbmVyaWMqIEJQRiBjb2RlPyBUaGF04oCZcyBub3QgcXVpdGUgaG93IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0aGluZ3MgdG8gYmUgc3RydWN0dXJlZC4gTXkgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCB0aGUgSklULXNwZWNpZmljIHN0dWZmIHdhcywgd2VsbCwgKnNwZWNpZmljKiB0byB0aGUgSklUIGFuZCBwb3RlbnRpYWxseSBpc29sYXRlZCB0byB0aGUgSklUIGJhY2tlbmQuIFRoaXMgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGEgbG93LWxldmVsIEpJVCBzdXBwb3J0IGZ1bmN0aW9uIGlzIHNlZW1pbmdseSBiZWluZyBpbnZva2VkIGF0IGEgbW9yZSBnZW5lcmFsIGxldmVsLiBJcyB0aGlzIHBhcnQgb2Ygc29tZSBjbGV2ZXIgb3B0aW1pemF0aW9uPyBPciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgZGVzaWduIHRoYXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBjYWxsLiBJcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIGludGVncmF0aW9uLCBhbmQgaWYgc28sIHdoYXQgaXMgaXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGRlY2lzaW9uIGJlaGluZCB0aGlzIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jPTMzMDc9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMzMTEtXG5rZXJuZWwvYnBmL2NvcmUuYzozMzEyOmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEzLXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTY4OD1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy04OTEtXHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg5MjpcdFx0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19pbnNuKGluc24sIHRydWUpKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg5My1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3NpZ24gZXh0ZW5kaW5nIGxvYWRzIGZyb20gYXJlbmEgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0XFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDg1MD1zdGF0aWMgYm9vbCBhdG9taWNfcHRyX3R5cGVfb2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODYxLVx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODYyOlx0XHRyZXR1cm4gYnBmX2ppdF9zdXBwb3J0c19pbnNuKGluc24sIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBKSVQgU3VwcG9ydCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIEkga25vdyB0aGlzIGlzIGEgd2VhayBmdW5jdGlvbiBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AsIGJ1dCBpdCYjMzk7cyAqb3ZlcnJpZGRlbiogaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBUaGF0IG1lYW5zIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kLCBwYXJ0aWN1bGFybHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBjb25zaWRlciBhcyBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuIFRoZXkmIzM5O3JlIGNsZWFybHkgaW1wb3J0YW50IGhvb2tzIGZvciB0aGUgUklTQy1WIEpJVC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gYWxyZWFkeSBjZXJ0YWluIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgaW52b2x2ZWQuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggUklTQy1WLCBgQ09ORklHX1JJU0NWYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLCBpbXBsaWVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuIFRoZSBmYWN0IHRoYXQgdGhlIFJJU0MtViBKSVQgc3BlY2lmaWNhbGx5IHRhcmdldHMgNjQtYml0IChgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgaXMgb25seSBjb21waWxlZCBmb3IgNjQtYml0IFJJU0MtVikgbWFrZXMgbWUgd29uZGVyIGlmIGBDT05GSUdfNjRCSVRgIGlzIGFsc28gcmVxdWlyZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXA2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L01ha2VmaWxlPTU9aWZlcSAoJChDT05GSUdfQVJDSF9SVjY0SSkseSlcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcDY0Lm9cbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlLTctZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyBSSVNDLVYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gKkNPTkZJR19BUkNIX1JWNjRJKi4uLiBhaGEsIHRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIDY0LWJpdCBSSVNDLVYuIE15IG1lbnRhbCBtb2RlbCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgdGhpcyB0eXBpY2FsbHkgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbi4gTm93LCBpc24mIzM5O3QgKkFSQ0hfUlY2NEkqIHVzdWFsbHkgcHVsbGVkIGluIGJ5IHRoZSAqNjRCSVQqIG9wdGlvbj8gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIGhvdyBpdCBnZW5lcmFsbHkgd29ya3MsIHNvIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHF1aWNrLiBObyBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBkZXRhaWxzIEkgYWxyZWFkeSBrbm93Li4uIGp1c3QgY29uZmlybSB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jeSBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfUlY2NEkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTQwNT1jb25maWcgQVJDSF9SVjMySVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00MTAtXG5hcmNoL3Jpc2N2L0tjb25maWc6NDExOmNvbmZpZyBBUkNIX1JWNjRJXG5hcmNoL3Jpc2N2L0tjb25maWctNDEyLVx0Ym9vbCBcJiMzNDtSVjY0SVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlY2lwaGVyaW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgQVJDSF9SVjY0SWAuLi4gdGhhdCByZXByZXNlbnRzIGEgY29uZmlndXJhdGlvbi4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgYSAqY2hvaWNlKiB0aGF0IGNhbiBiZSBtYWRlLCBvciBpcyBpdCBtb3JlIG9mIGEgYm9vbGVhbiBmbGFnLCBqdXN0IGluZGljYXRpbmcgdGhhdCBSVjY0SSBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZCBvciBwcmVzZW50PyBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNlbWFudGljcyBoZXJlLiBEb2VzIGl0IHJlcHJlc2VudCB0aGUgY29yZSBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uIGl0c2VsZiwgb3IgYSBzaW1wbGUgZmVhdHVyZSBiaXQ/JiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9SVjY0SSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWc9Mzk4PWNob2ljZVxuYXJjaC9yaXNjdi9LY29uZmlnLTM5OS1cdHByb21wdCBcJiMzNDtCYXNlIElTQVwmIzM0O1xuYXJjaC9yaXNjdi9LY29uZmlnOjQwMDpcdGRlZmF1bHQgQVJDSF9SVjY0SVxuYXJjaC9yaXNjdi9LY29uZmlnLTQwMS1cdGhlbHBcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9NDA1PWNvbmZpZyBBUkNIX1JWMzJJXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMC1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0MTE6Y29uZmlnIEFSQ0hfUlY2NElcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTItXHRib29sIFwmIzM0O1JWNjRJXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTczCgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDU4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRhcmdldHMgdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBTaW5jZSBgQVJDSF9SVjY0SWAgaXMgdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdC4gV2UgYXJlIGZvY3VzaW5nIG9uIFJJU0MtViwgYnV0IHN5emthbGxlciBjb3VsZCB0ZXN0IG9uIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMsIHNvIEkgc2hvdWxkIGp1c3QgcHJvdmlkZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuCgpJIHJlbWVtYmVyIGZyb20gdGhlIGBhcmNoL3Jpc2N2L0tjb25maWdgIHRoYXQgYEJQRl9KSVRgIGRlcGVuZHMgb24gYE1NVWAsIGJ1dCB0aGF0JiMzOTtzIHR5cGljYWxseSBlbmFibGVkIGFueXdheSwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4gVGhpcyBwYXRjaCAqZnVuY3Rpb25hbGx5KiBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgd2hpY2ggYXJlIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMsIGFzIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24gUklTQy1WLgoKRm9yIHN5bWJvbCB0YXJnZXRpbmcsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgZm9jdXMgb24gYGJwZl9qaXRfZW1pdF9pbnNuYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIEkgZGlkIGNvbnNpZGVyIG90aGVyIGZ1bmN0aW9ucywgc3VjaCBhcyBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCBidXQgaXQgaXMgc3RhdGljIGFuZCBub3Qgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gZnV6emluZy4gU2luY2UgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBhIHZlcnkgaG90IHBhdGggZHVyaW5nIEpJVCBjb21waWxhdGlvbiwgaXQgaXMgYSBncmVhdCBjaG9pY2UuIEJvdGggYXJlIGZpbmUuCgpUbyBzdW1tYXJpemUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZXNlIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhbmQgdGFyZ2V0IGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1ggaW5zdHJ1Y3Rpb25zIGluIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGVuYWJsZXMgbmV3IEJQRiBpbnN0cnVjdGlvbnMgdG8gYmUgSklUIGNvbXBpbGVkIG9uIFJJU0MtViwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1ggaW5zdHJ1Y3Rpb25zIGluIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGVuYWJsZXMgbmV3IEJQRiBpbnN0cnVjdGlvbnMgdG8gYmUgSklUIGNvbXBpbGVkIG9uIFJJU0MtViwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNpZ24tZXh0ZW5kZWQgbWVtb3J5IGxvYWRzIChCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYKSBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBKSVQgYmFja2VuZCB0byBlbWl0IHRoZSBjb3JyZWN0IFJJU0MtViBpbnN0cnVjdGlvbnMgZm9yIHRoZXNlIEJQRiBvcGVyYXRpb25zIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0cy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtaWdodCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsYXRpb24gd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbmNvcnJlY3QgY29kZSBleGVjdXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGRmYjEyMTdiNjA2YWEwZmNiOTVlOTQ4YTZiN2M2MjE0NjkxZTZjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjU1OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggZjlkNTM0N2JhOTY2Yi4uNTc4NmY3ZGZjOGE3MCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC03NzcsNiAmIzQzOzc3Nyw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsCiAJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0gJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX01FTTMyU1ggJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKQogCQlyZXR1cm4gMDsKIApAQCAtMTkwMiwxMyAmIzQzOzE5MDMsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6CiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6CiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOgomIzQzOwkvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyAmIzQzOyBSVl9SRUdfQVJFTkEgJiM0Mzsgb2ZmKSAqLwomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9COgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9IOgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9XOgogCXsKIAkJYm9vbCBzaWduX2V4dDsKIAogCQlzaWduX2V4dCA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWCB8fAotCQkJICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYOwomIzQzOwkJCSAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fAomIzQzOwkJCSAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYOwogCi0JCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIpIHsKJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHwKJiM0MzsJCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCkgewogCQkJZW1pdF9hZGQoUlZfUkVHX1QyLCBycywgUlZfUkVHX0FSRU5BLCBjdHgpOwogCQkJcnMgPSBSVl9SRUdfVDI7CiAJCX0KQEAgLTIxMjYsMTAgJiM0MzsyMTMzLDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKQogCQkJaWYgKGluc24tJmd0O2ltbSA9PSBCUEZfQ01QWENIRykKIAkJCQlyZXR1cm4gcnZfZXh0X2VuYWJsZWQoWkFDQVMpOwogCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COgotCQljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDoKLQkJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6Ci0JCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jCmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYwpAQCAtMjg2LDYgJiM0MzsyODYsMTkgQEAgX19qaXRlZCgmIzM0O2FkZAl4MTEsIHgwLCB4MjgmIzM0OykKIF9faml0ZWQoJiMzNDtsZHJzaAl4MjIsIFt4MTEsICMweDE4XSYjMzQ7KQogX19qaXRlZCgmIzM0O2FkZAl4MTEsIHgwLCB4MjgmIzM0OykKIF9faml0ZWQoJiMzNDtsZHJzYgl4MjIsIFt4MTEsICMweDIwXSYjMzQ7KQomIzQzO19fYXJjaF9yaXNjdjY0CiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTUsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2x3CXMzLCAweDEwKHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGE1LCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsaAlzMywgMHgxOCh0MikmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhNSwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bGIJczMsIDB4MjAodDIpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2FkZAl0MiwgYTAsIHM3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2x3CXM0LCAweDEwKHQyKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDthZGQJdDIsIGEwLCBzNyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtsaAlzNCwgMHgxOCh0MikmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7YWRkCXQyLCBhMCwgczcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7bGIJczQsIDB4MjAodDIpJiMzNDspCiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9kaXNhc20odm9pZCAqY3R4KQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC0zMTcsNiAmIzQzOzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oJiMzNDtBcmVuYSBMRFNYIEV4Y2VwdGlvbiYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBfX2FyY2hfeDg2XzY0CiBfX2FyY2hfYXJtNjQKJiM0MztfX2FyY2hfcmlzY3Y2NAogX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfZXhjZXB0aW9uKHZvaWQgKmN0eCkKIHsKIAlhc20gdm9sYXRpbGUgKApAQCAtMzM4LDYgJiM0MzszNTIsNyBAQCBfX2Rlc2NyaXB0aW9uKCYjMzQ7QXJlbmEgTERTWCwgUzgmIzM0OykKIF9fc3VjY2VzcyBfX3JldHZhbCgtMSkKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAomIzQzO19fYXJjaF9yaXNjdjY0CiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKQEAgLTM2OSw2ICYjNDM7Mzg0LDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O0FyZW5hIExEU1gsIFMxNiYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKC0xKQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3MxNih2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKQEAgLTQwMCw2ICYjNDM7NDE2LDcgQEAgX19kZXNjcmlwdGlvbigmIzM0O0FyZW5hIExEU1gsIFMzMiYjMzQ7KQogX19zdWNjZXNzIF9fcmV0dmFsKC0xKQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CiYjNDM7X19hcmNoX3Jpc2N2NjQKIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3MzMih2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlICgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTMKCQkJCQkJCW91dHB1dDogMTg2CgkJCQkJCQl0aG91Z2h0czogNzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEJQRiBKSVQgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBgQlBGX1BST0JFX01FTTMyU1hgIGluc3RydWN0aW9ucywgZWZmZWN0aXZlbHkgZW5hYmxpbmcgc2lnbmVkIDMyLWJpdCBtZW1vcnkgYWNjZXNzIHdpdGggc2lnbi1leHRlbnNpb24gd2l0aGluIHRoZSBCUEYgSklULiBJdCBhbHNvIHJlbW92ZXMgdGhlIGV4cGxpY2l0IGRlbmlhbCBvZiBzdXBwb3J0IGZvciBzaW1pbGFyIGluc3RydWN0aW9ucyB3aXRoIHNtYWxsZXIgZGF0YSB0eXBlcyAoYEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQmAsIGBIYCwgYW5kIGBXYCkgd2l0aGluIHRoZSBgYnBmX2ppdF9zdXBwb3J0c19pbnNuKClgIGZ1bmN0aW9uLCBpbmRpY2F0aW5nIHRoZXkgYXJlIG5vdyBzdXBwb3J0ZWQuIEZ1cnRoZXJtb3JlLCBpdCB1cGRhdGVzIHRoZSBzZWxmdGVzdHMgdG8gcmVmbGVjdCB0aGVzZSBjaGFuZ2VzIHdpdGggUklTQy1WLXNwZWNpZmljIEpJVCBleHBlY3RhdGlvbnMgYW5kIGVuYWJsZSBzb21lIHJlbGV2YW50IHRlc3RzLgoKTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRocmVlIGZ1bmN0aW9ucy4gSSBjYW4gc2VlIHRoZSBjb3JlIGNoYW5nZXM6CgoxLiAgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgaXMgZW5oYW5jZWQgdG8gaGFuZGxlIGBCUEZfUFJPQkVfTUVNMzJTWGAuCjIuICBgYnBmX2ppdF9lbWl0X2luc25gIGdldHMgdXBkYXRlZCB0byBub3cgdHJhbnNsYXRlIGBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfQmAgKGFuZCBgSGAgYW5kIGBXYCkgaW5zdHJ1Y3Rpb25zLCBzZXR0aW5nIGBzaWduX2V4dGAgdG8gdHJ1ZSBhbmQgYWRkaW5nIGBSVl9SRUdfQVJFTkFgIHRvIHRoZSBzb3VyY2UgcmVnaXN0ZXIuCjMuICBUaGUgY3J1Y2lhbCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIHJlbW92ZSBhbiBleHBsaWNpdCBibG9jayB0aGF0IGhhZCBwcmV2ZW50ZWQgdGhlIEpJVCBmcm9tIHN1cHBvcnRpbmcgc2lnbmVkIGV4dGVuZGVkIGxvYWQgaW5zdHJ1Y3Rpb25zLgoKTm93LCBkb2VzIHRoaXMgb3BlbiBhbnkgZG9vcnMgZm9yIEtNU0FOIHRvIGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhIEpJVCBidWcgY291bGQsIGluIHRoZW9yeSwgdHJhbnNsYXRlIEJQRiBpbnN0cnVjdGlvbnMgaW5jb3JyZWN0bHksIGFuZCB0aGF0ICpjb3VsZCogbGVhZCB0byBhIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgdGhhdCYjMzk7cyBub3QgYSB1bmlxdWUgcHJvYmxlbSBmb3IgS01TQU4uIEFueSBKSVQgYnVnIGNhbiBsZWFkIHRvIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgd2lsbCBsaWtlbHkgY2F0Y2ggdmlhIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBmb3IgYSAqc3BlY2lmaWMqIHByb2JsZW0gdGhhdCBLQVNBTiBtYXkgbm90IGNhdGNoLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KClRoaXMgcGF0Y2ggaXMgc2ltcGx5IHRyYW5zbGF0aW5nIEJQRiBpbnN0cnVjdGlvbnMgaW50byBSSVNDLVYgaW5zdHJ1Y3Rpb25zLiBUaGVyZSYjMzk7cyBubyBuZXcga2VybmVsIGRhdGEgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyByZWxpYW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBUaGlzIGlzbiYjMzk7dCBhYm91dCAqYWxsb2NhdGluZyogbWVtb3J5OyBpdCYjMzk7cyBhYm91dCBnZW5lcmF0aW5nIGNvZGUgdG8gKmFjY2VzcyogbWVtb3J5LiBUaGF0IGNvdWxkIGdvIHdyb25nIGFuZCBkbyBhbGwgc29ydHMgb2YgbmFzdHkgdGhpbmdzLiBLQVNBTiBpcyB0aGUgbW9zdCBsaWtlbHkgdG9vbCB0byBjYXRjaCB0aG9zZSBwcm9ibGVtcy4gS01TQU4gaXMgdGhlIHRvb2wgdG8gdXNlIHdoZW4gdGhlcmUmIzM5O3MgYW4gYWN0dWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLgoKVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGUgc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGRlYWxzIHdpdGggSklUIGNvbXBpbGF0aW9uIG9mIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByaXNrIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaXMgYSBnZW5lcmFsIHByb3BlcnR5IG9mIGEgY29kZSBleGVjdXRpb24gYnVnLCB3aGljaCBLQVNBTiwgYW5kIHBvdGVudGlhbGx5IEtNU0FOLCB3b3VsZCBjYXRjaC4gVGhpcyBpc24mIzM5O3QgYSB0YXJnZXRlZCBhdHRhY2sgb24gS01TQU4uIFRoaXMgcGF0Y2ggaXMgb25seSByZWxhdGVkIHRvIGltcGxlbWVudGluZyBzaWduLWV4dGVuZGVkIGxvYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNpZ24tZXh0ZW5kZWQgbWVtb3J5IGxvYWRzIChCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYKSBpbiB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBKSVQgYmFja2VuZCB0byBlbWl0IHRoZSBjb3JyZWN0IFJJU0MtViBpbnN0cnVjdGlvbnMgZm9yIHRoZXNlIEJQRiBvcGVyYXRpb25zIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0cy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBtaWdodCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsYXRpb24gd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbmNvcnJlY3QgY29kZSBleGVjdXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NTo1MC44NzM5MzM5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ1NDcwNzE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2luc25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGX1BST0JFX01FTTMyU1ggYW5kIEJQRl9NRU1TWCBpbnN0cnVjdGlvbnMgaW4gdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZW5hYmxlcyBuZXcgQlBGIGluc3RydWN0aW9ucyB0byBiZSBKSVQgY29tcGlsZWQgb24gUklTQy1WLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NTo1MC44NzM5NDEyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzM3NDE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkZmIxMjE3YjYwNmFhMGZjYjk1ZTk0OGE2YjdjNjIxNDY5MWU2YzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBmOWQ1MzQ3YmE5NjZiLi41Nzg2ZjdkZmM4YTcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTc3Nyw2ICs3NzcsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxcbiBcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMlNYIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTE5MDIsMTMgKzE5MDMsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuIFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxcbitcXHQvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyArIFJWX1JFR19BUkVOQSArIG9mZikgKi9cXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfQjpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfSDpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfVzpcXG4gXFx0e1xcbiBcXHRcXHRib29sIHNpZ25fZXh0O1xcbiBcXG4gXFx0XFx0c2lnbl9leHQgPSBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcXG4tXFx0XFx0XFx0ICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYO1xcbitcXHRcXHRcXHQgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcXG4rXFx0XFx0XFx0ICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XFxuIFxcbi1cXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XFxuK1xcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcXG4rXFx0XFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMlNYKSB7XFxuIFxcdFxcdFxcdGVtaXRfYWRkKFJWX1JFR19UMiwgcnMsIFJWX1JFR19BUkVOQSwgY3R4KTtcXG4gXFx0XFx0XFx0cnMgPSBSVl9SRUdfVDI7XFxuIFxcdFxcdH1cXG5AQCAtMjEyNiwxMCArMjEzMyw2IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4gXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJ2X2V4dF9lbmFibGVkKFpBQ0FTKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxcbi1cXHRcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcXG4tXFx0XFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guY1xcbmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcXG5AQCAtMjg2LDYgKzI4NiwxOSBAQCBfX2ppdGVkKFxcXCJhZGRcXHR4MTEsIHgwLCB4MjhcXFwiKVxcbiBfX2ppdGVkKFxcXCJsZHJzaFxcdHgyMiwgW3gxMSwgIzB4MThdXFxcIilcXG4gX19qaXRlZChcXFwiYWRkXFx0eDExLCB4MCwgeDI4XFxcIilcXG4gX19qaXRlZChcXFwibGRyc2JcXHR4MjIsIFt4MTEsICMweDIwXVxcXCIpXFxuK19fYXJjaF9yaXNjdjY0XFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhNSwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsd1xcdHMzLCAweDEwKHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhNSwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsaFxcdHMzLCAweDE4KHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhNSwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsYlxcdHMzLCAweDIwKHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhMCwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsd1xcdHM0LCAweDEwKHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhMCwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsaFxcdHM0LCAweDE4KHQyKVxcXCIpXFxuK19faml0ZWQoXFxcImFkZFxcdHQyLCBhMCwgczdcXFwiKVxcbitfX2ppdGVkKFxcXCJsYlxcdHM0LCAweDIwKHQyKVxcXCIpXFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2Rpc2FzbSh2b2lkICpjdHgpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtMzE3LDYgKzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oXFxcIkFyZW5hIExEU1ggRXhjZXB0aW9uXFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIF9fYXJjaF94ODZfNjRcXG4gX19hcmNoX2FybTY0XFxuK19fYXJjaF9yaXNjdjY0XFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2V4Y2VwdGlvbih2b2lkICpjdHgpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtMzM4LDYgKzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oXFxcIkFyZW5hIExEU1gsIFM4XFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtMzY5LDYgKzM4NCw3IEBAIF9fZGVzY3JpcHRpb24oXFxcIkFyZW5hIExEU1gsIFMxNlxcXCIpXFxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcXG4gX19hcmNoX3g4Nl82NFxcbiBfX2FyY2hfYXJtNjRcXG4rX19hcmNoX3Jpc2N2NjRcXG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczE2KHZvaWQgKmN0eClcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUgKFxcbkBAIC00MDAsNiArNDE2LDcgQEAgX19kZXNjcmlwdGlvbihcXFwiQXJlbmEgTERTWCwgUzMyXFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcbitfX2FyY2hfcmlzY3Y2NFxcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMzIodm9pZCAqY3R4KVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU1OjUxLjQyODMwMDQwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1MzEwMTQ4MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfaW5zblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGX1BST0JFX01FTTMyU1ggYW5kIEJQRl9NRU1TWCBpbnN0cnVjdGlvbnMgaW4gdGhlIFJJU0MtViA2NC1iaXQgQlBGIEpJVCBjb21waWxlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZW5hYmxlcyBuZXcgQlBGIGluc3RydWN0aW9ucyB0byBiZSBKSVQgY29tcGlsZWQgb24gUklTQy1WLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZGZiMTIxN2I2MDZhYTBmY2I5NWU5NDhhNmI3YzYyMTQ2OTFlNmM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTU6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZjlkNTM0N2JhOTY2Yi4uNTc4NmY3ZGZjOGE3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC03NzcsNiArNzc3LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbiBcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0gXHUwMDI2XHUwMDI2XG4gXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggXHUwMDI2XHUwMDI2XG4gXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXHUwMDI2XHUwMDI2XG4rXHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzJTWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE5MDIsMTMgKzE5MDMsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuK1x0LyogTERYIHwgUFJPQkVfTUVNMzJTWDogZHN0ID0gKihzaWduZWQgc2l6ZSAqKShzcmMgKyBSVl9SRUdfQVJFTkEgKyBvZmYpICovXG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9COlxuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfSDpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX1c6XG4gXHR7XG4gXHRcdGJvb2wgc2lnbl9leHQ7XG4gXG4gXHRcdHNpZ25fZXh0ID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcbi1cdFx0XHQgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWDtcbitcdFx0XHQgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuK1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1g7XG4gXG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMikge1xuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcbitcdFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyU1gpIHtcbiBcdFx0XHRlbWl0X2FkZChSVl9SRUdfVDIsIHJzLCBSVl9SRUdfQVJFTkEsIGN0eCk7XG4gXHRcdFx0cnMgPSBSVl9SRUdfVDI7XG4gXHRcdH1cbkBAIC0yMTI2LDEwICsyMTMzLDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuIFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbiBcdFx0XHRcdHJldHVybiBydl9leHRfZW5hYmxlZChaQUNBUyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxuLVx0XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcbi1cdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbmluZGV4IDQxMzQwODc3ZGM5ZDkuLmVkMGEwZjE1OWJjMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jXG5AQCAtMjg2LDYgKzI4NiwxOSBAQCBfX2ppdGVkKFwiYWRkXHR4MTEsIHgwLCB4MjhcIilcbiBfX2ppdGVkKFwibGRyc2hcdHgyMiwgW3gxMSwgIzB4MThdXCIpXG4gX19qaXRlZChcImFkZFx0eDExLCB4MCwgeDI4XCIpXG4gX19qaXRlZChcImxkcnNiXHR4MjIsIFt4MTEsICMweDIwXVwiKVxuK19fYXJjaF9yaXNjdjY0XG4rX19qaXRlZChcImFkZFx0dDIsIGE1LCBzN1wiKVxuK19faml0ZWQoXCJsd1x0czMsIDB4MTAodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGE1LCBzN1wiKVxuK19faml0ZWQoXCJsaFx0czMsIDB4MTgodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGE1LCBzN1wiKVxuK19faml0ZWQoXCJsYlx0czMsIDB4MjAodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGEwLCBzN1wiKVxuK19faml0ZWQoXCJsd1x0czQsIDB4MTAodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGEwLCBzN1wiKVxuK19faml0ZWQoXCJsaFx0czQsIDB4MTgodDIpXCIpXG4rX19qaXRlZChcImFkZFx0dDIsIGEwLCBzN1wiKVxuK19faml0ZWQoXCJsYlx0czQsIDB4MjAodDIpXCIpXG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfZGlzYXNtKHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuQEAgLTMxNyw2ICszMzAsNyBAQCBfX2Rlc2NyaXB0aW9uKFwiQXJlbmEgTERTWCBFeGNlcHRpb25cIilcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9leGNlcHRpb24odm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtMzM4LDYgKzM1Miw3IEBAIF9fZGVzY3JpcHRpb24oXCJBcmVuYSBMRFNYLCBTOFwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zOCh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zNjksNiArMzg0LDcgQEAgX19kZXNjcmlwdGlvbihcIkFyZW5hIExEU1gsIFMxNlwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMTYodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtNDAwLDYgKzQxNiw3IEBAIF9fZGVzY3JpcHRpb24oXCJBcmVuYSBMRFNYLCBTMzJcIilcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuK19fYXJjaF9yaXNjdjY0XG4gX19uYWtlZCB2b2lkIGFyZW5hX2xkc3hfczMyKHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTU6NTEuNDI4MzAyNjk2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0MjgyNzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCBhbmQgYSBzZWxmdGVzdCBmaWxlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgc3VwcG9ydCBmb3IgYEJQRl9QUk9CRV9NRU0zMlNYYCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBKSVQgY29tcGlsZXIsIGFuZCBhbHNvIGNvcnJlY3Rpbmcgc29tZSBsaW1pdGF0aW9ucyBhcm91bmQgYEJQRl9NRU1TWGAgdmFyaWFudHMuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBlbmhhbmNlbWVudCB0byB0aGUgSklULCBlbmFibGluZyB0aGUgSklUIGNvbXBpbGF0aW9uIG9mIGluc3RydWN0aW9ucyBpdCBjb3VsZG4ndCBoYW5kbGUgYmVmb3JlLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXJlYSwgSSBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSBjaGFuZ2VzIG9jY3VyIHdpdGhpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgZXhwZWN0IHRvIHNlZSBtb2RpZmljYXRpb25zIGluIHRoZSBmdW5jdGlvbnMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAsIGBicGZfaml0X2VtaXRfaW5zbmAsIGFuZCBjcnVjaWFsbHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIEpJVCdzIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBzdXBwb3J0IGNoZWNrcy5cblxuQmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX0pJVGAgaXMgdGhlIG1haW4gb25lLCBzbyBJJ2xsIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBwbGF5cyBuaWNlbHkgd2l0aCB0aGF0LiBUbyBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgYmVpbmcgY2hhbmdlZCwgSSdsbCBzdGFydCBieSBncmVwcGluZyBmb3IgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiB0aGUgZmlsZS4gVGhhdCB3aWxsIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSBsaW5lcyBvZiBjb2RlIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGlzIHNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpbXBvcnRhbnQgYWRkaXRpb24gdG8gdGhlIFJJU0MtViBCUEYgSklULlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTU6NTcuNDcxMTMyOTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjYzOTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMzMz1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2OS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNzA6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzcxLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTU6NTcuNTczNzc3Mzk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjI1NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipSSVNDLVYgQlBGIEpJVCBJbnN0cnVjdGlvbiBFbWlzc2lvbiBVcGRhdGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbiDigJMgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBSSVNDLVYgQlBGIEpJVCBpbnN0cnVjdGlvbiBlbWlzc2lvbiBwcm9jZXNzLiBJdCdzIHRoZSBlbmdpbmUsIHJlYWxseSwgZm9yIGdlbmVyYXRpbmcgdGhlIG1hY2hpbmUgY29kZS4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhZGQgc3VwcG9ydCBmb3IgYSBjb3VwbGUgb2Ygc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uczogYEJQRl9QUk9CRV9NRU0zMlNYYCBhbmQgYEJQRl9NRU1TWGAuIFRoZXNlIGxvb2sgbGlrZSBtZW1vcnkgYWNjZXNzIHdpdGggc2lnbiBleHRlbnNpb247IHRoaXMgaXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciB1cyBoZXJlLCBnaXZlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgMzJiaXQgdGFyZ2V0IGFuZCBtZW1vcnkgb3BlcmF0aW9ucyB3aXRoIHNpZ24gZXh0ZW5zaW9uIGlzIGltcG9ydGFudCBmb3IgYWNoaWV2aW5nIG91ciB0YXJnZXQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gR290dGEgbWFrZSBzdXJlIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgY29ycmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGZsYWdzIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgYXMgZXhwZWN0ZWQgZnJvbSB0aGUgc3RhcnQsIGFzIEkgZG9uJ3Qgd2FudCB0byBjaGFzZSBteSB0YWlsIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MDEuMDQ2MDM3MDQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTE3ODQ2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjAzLjg1NzgzMzUwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjcxODkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEpJVCBTdXBwb3J0IG9uIFJJU0MtVioqXG5cbkFscmlnaHQsIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC4gQ2xlYXJseSwgYEJQRl9KSVRgIGlzIHRoZSBvbmUgdGhhdCdzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlLiBJdCdzIHRoZSBKSVQgY29tcGlsZXIsIGFmdGVyIGFsbC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBzdXBwb3J0IGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciBKSVQgY29tcGlsZXIuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGV5J3ZlIGVuYWJsZWQgSklUIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCwgSSBrbm93IHRoZXJlIHdpbGwgYmUgYSBzZWN0aW9uIGluIHRoYXQgZmlsZSBzcGVjaWZpY2FsbHkgZm9yIEJQRiBhbmQgSSdtIGtlZW4gdG8gc2VlIHRoZSBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl0ZWN0dXJlIGV2ZW4gKmFsbG93cyogYSBKSVQgZm9yIEJQRiBhbmQsIGlmIHNvLCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjowNy40MjUwMjUzMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NzU5MjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBIQVZFX0JQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjowNy40ODE1MTAzODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAzNTYxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgU3VwcG9ydCBpbiBSSVNDLVYqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBCUEYgSklUIGlzIHN1cHBvcnRlZCBpbiB0aGUgUklTQy1WIGtlcm5lbC4gVGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHVzdWFsbHkgdGhlIGJlc3QsIHNvIGxldCdzIGp1c3QgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSdsbCBvcGVuIHVwIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGUgZ29hbCBpcyB0byBzZWUgaWYgdGhlcmUncyBhIGBIQVZFX0JQRl9KSVRgIG9wdGlvbiBkZWNsYXJlZCwgb3IsIGF0IGxlYXN0LCBzb21ldGhpbmcgY2xlYXJseSByZWxhdGVkLiBHcmVwcGluZyBmb3IgdGhlIHN0cmluZyBcIkhBVkVfQlBGX0pJVFwiIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIGFuc3dlci4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB0aGVyZSdzIGV4cGxpY2l0IEpJVCBzdXBwb3J0LCBhbmQgcG9zc2libHkgaG93IGl0J3MgZW5hYmxlZCBvciBjb25maWd1cmVkLiBGcm9tIHRoZXJlLCBJIGNhbiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGlmIG5lY2Vzc2FyeSwgYnV0IHRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjEwLjU4NTA3NDI5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NDkxNTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjEwLjY3NjkzMDMxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUwOTQ4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIGZvciBCUEYgSklUIFN1cHBvcnQgaW4gUklTQy1WKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIGxpa2UgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjb3VsZCBgSEFWRV9CUEZfSklUYCBiZSBzZWxlY3RlZCBzb21ld2hlcmUgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2A/IEl0IHdvdWxkIGJlIHNpbGx5IHRvIHJlLWludmVudCB0aGUgd2hlZWwgaWYgaXQncyBhbHJlYWR5IHRoZXJlISBTbywgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBhcmNoL3Jpc2N2L0tjb25maWdgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBzZWFyY2ggZm9yIGBCUEZfSklUYC4gVGhhdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBuZWNlc3NhcnkgSklUIHN1cHBvcnQgZXhpc3RzIHdpdGhpbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSdzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBObyBuZWVkIHRvIGdvIGRvd24gdGhlIHJhYmJpdCBob2xlIGlmIGl0J3MgYWxyZWFkeSByZWFkaWx5IGF2YWlsYWJsZS4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoxNC4wMjc4ODE4OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDQxNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTY4OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjktXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19USUZfQklUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoxNC4wODU5MjgxNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0NjU5Mjg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEVCUEYgSklUIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBgSEFWRV9FQlBGX0pJVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MgaGVyZSBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcywgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gZGVhbGluZyB3aXRoIGVCUEYgSklUIGNvbXBpbGF0aW9uLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBJJ20gYWxyZWFkeSB6ZXJvaW5nIGluIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFyZSB0aGUgb2J2aW91cyB0YXJnZXRzLCBhcyB0aGV5J3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIGluc3RydWN0aW9uIGVtaXNzaW9uIGFuZCBzdXBwb3J0IGNoZWNrcy4gSSdtIGFsc28gbm90aW5nIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgLCBidXQgc2luY2UgaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgSSBtaWdodCBnaXZlIGl0IGxlc3MgaW5pdGlhbCBwcmlvcml0eSB1bmxlc3MgaXQncyBpbmRpcmVjdGx5IGV4cG9zZWQgdGhyb3VnaCBhbm90aGVyIGZ1bmN0aW9uLlxuXG5NeSBuZXh0IHN0ZXA/IExldCdzIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBleHBlY3RpbmcgdGhlbSB0byBiZSBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSBoYW5kbGVzIHRoZXNlIG9wZXJhdGlvbnMgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlaXIgZnV6emluZyBwb3RlbnRpYWwgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjIwLjAzMjUyMzc3NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwNTIzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMTIyPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI2LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEyNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MjAuMTAxNTgxMDA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODI1OTM0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgQlBGIEpJVCBmdW5jdGlvbnMsIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBBbmQgaXQncyBqdXN0IGhpdCBtZTogdGhleSdyZSBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiwgaXNuJ3QgaXQ/IElmIHRoZXkgd2VyZSBgc3RhdGljYCwgdGhleSdkIGJlIGludGVybmFsIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgYnV0IHRoZXkgYXJlbid0LiBIbW0sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgc3BlY2lmaWNhbGx5IGlzbid0IHN0YXRpYy4gSXQncyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuIEkgc2hvdWxkIGdvIGFuZCBleGFtaW5lIHRoZSBkZWNsYXJhdGlvbiB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTMwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MjMuMDg0MTc2ODU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM2NzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjU9dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyOC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoyMy4xNzM1NTM4MDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5MTY4NjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIEJQRiBKSVQgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0J3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgYnBmX2ppdF9lbWl0X2luc25gLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgYW0gSSBjb3JyZWN0IHRvIGFzc3VtZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuY2Agb3IgYSBzaW1pbGFybHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGU/IFRoYXQncyB0aGUgY3J1eCBvZiBteSBpbnZlc3RpZ2F0aW9uLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCBlbnN1cmluZyB0aGUgSklUIGNvbXBpbGVyJ3MgYmVoYXZpb3IgaXMgY29udGFpbmVkIG9yIGF0IGxlYXN0IG1hbmFnZWFibGUgYWNyb3NzIGFyY2hpdGVjdHVyZXMuIFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBjb3VsZCBtZWFuIHRoYXQgZGVidWdnaW5nIGlzIGVhc2llciwgdGhlIGNvZGUgaXMgbW9yZSBtYW5hZ2VhYmxlLCBhbmQgdGhlIEpJVCBpcyBzcGVjaWZpYyB0byBSSVNDLVYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoyNy4xNjUyNDI3NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY3MjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdC5oPTEzMjU9dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0Lmg6MTMyNzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0LmgtMTMyOC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz05NDM9c3RhdGljIHZvaWQgZW1pdF96ZXh0NjQoY29uc3QgczggKmRzdCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTk1Mi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjk1MzppbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTk1NC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzM9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjktXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzcwOmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM3MS1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0xOT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcywgaW50ICpvZmZzZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy0yNy1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYzoyODpcXHRcXHRyZXQgPSBicGZfaml0X2VtaXRfaW5zbihpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTI5LVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjoyNy4yNzI5MjAzNDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzODcxMjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTm9uLVN0YXRpYyBTdXJwcmlzZSBpbiBCUEYgSklUIFN1cHBvcnQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIHNvbWV0aGluZyBqdXN0IGp1bXBlZCBvdXQgYXQgbWUuIEknbSB0YWtpbmcgYSBsb29rIGF0IGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFuZCwgd2FpdCBhIG1pbnV0ZS4uLiB3aHkgaXMgKnRoYXQqIG5vdCBkZWNsYXJlZCBgc3RhdGljYD8gSSBtZWFuLCBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gSklUIHN1cHBvcnQgZm9yIEJQRi4gSSdkIGp1c3QgYXNzdW1lZCBpdCB3b3VsZCBiZSBpbnRlcm5hbCB0byB0aGUgSklUIGVuZ2luZS4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gd2FzIHRoYXQgaXQgd2FzIGEgaGVscGVyIGZ1bmN0aW9uLiBOb3cgSSdtIHdvbmRlcmluZyB3aGF0IGV4dGVybmFsIGNvZGUgaXMgYWNjZXNzaW5nIHRoaXMgYW5kIHdoeS4gV2hhdCdzIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbiBoZXJlIHRoYXQgbWFkZSB0aGVtIGRlY2lkZSB0byBleHBvc2UgdGhpcyBzeW1ib2wgZXh0ZXJuYWxseT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIElzIHRoaXMgYW4gYWNjZXNzIHBhdHRlcm4gSSdtIG5vdCBmYW1pbGlhciB3aXRoPyBJcyB0aGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIGZyYWdpbGl0eT8gSXMgdGhpcyBpbmRpY2F0aXZlIG9mIGEgYmlnZ2VyIGRlc2lnbiBpc3N1ZT8gTm93IEkgaGF2ZSB0byBnbyBjaGFzZSB0aGlzIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjMyLjExMTYzOTA0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NDQyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTIxMjI9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjYtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTI3OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMjgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjozMi4xODAyODc4NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MDA1Njc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkluaXRpYWwgSm9sdCBvZiBSZWNvZ25pdGlvbjogVW5leHBlY3RlZCBDYWxsIExvY2F0aW9uKipcblxuV2FpdCBhIG1pbnV0ZSwgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmA/IFRoYXQgZnVuY3Rpb24sIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgZGVlcGx5IGludm9sdmVkIHdpdGggdGhlIEp1c3QtSW4tVGltZSAoSklUKSBjb21waWxhdGlvbiBzdXBwb3J0IHdpdGhpbiBCUEYsIHJpZ2h0PyBBbmQgSSdtIHNlZWluZyBpdCByZWZlcmVuY2VkLi4uIGZyb20gKmdlbmVyaWMqIEJQRiBjb2RlPyBUaGF04oCZcyBub3QgcXVpdGUgaG93IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0aGluZ3MgdG8gYmUgc3RydWN0dXJlZC4gTXkgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCB0aGUgSklULXNwZWNpZmljIHN0dWZmIHdhcywgd2VsbCwgKnNwZWNpZmljKiB0byB0aGUgSklUIGFuZCBwb3RlbnRpYWxseSBpc29sYXRlZCB0byB0aGUgSklUIGJhY2tlbmQuIFRoaXMgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGEgbG93LWxldmVsIEpJVCBzdXBwb3J0IGZ1bmN0aW9uIGlzIHNlZW1pbmdseSBiZWluZyBpbnZva2VkIGF0IGEgbW9yZSBnZW5lcmFsIGxldmVsLiBJcyB0aGlzIHBhcnQgb2Ygc29tZSBjbGV2ZXIgb3B0aW1pemF0aW9uPyBPciBpcyBpdCBpbmRpY2F0aXZlIG9mIGEgZGVzaWduIHRoYXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBjYWxsLiBJcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIGludGVncmF0aW9uLCBhbmQgaWYgc28sIHdoYXQgaXMgaXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGRlY2lzaW9uIGJlaGluZCB0aGlzIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NjozNS45NjAzNDY5NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAxMDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MzMwNz1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzExLVxcbmtlcm5lbC9icGYvY29yZS5jOjMzMTI6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEzLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9Njg4PWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODkxLVxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1gpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg5MjpcXHRcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKSkge1xcbmtlcm5lbC9icGYvZml4dXBzLmMtODkzLVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwic2lnbiBleHRlbmRpbmcgbG9hZHMgZnJvbSBhcmVuYSBhcmUgbm90IHN1cHBvcnRlZCB5ZXRcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4NTA9c3RhdGljIGJvb2wgYXRvbWljX3B0cl90eXBlX29rKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODYxLVxcdGlmIChpc19hcmVuYV9yZWcoZW52LCByZWdubykpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4NjI6XFx0XFx0cmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDg2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6MzYuMDcyMzYxOTg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODgzODI5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBKSVQgU3VwcG9ydCBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIGtub3cgdGhpcyBpcyBhIHdlYWsgZnVuY3Rpb24gZGVmaW5lZCBpbiBga2VybmVsL2JwZi9jb3JlLmNgLCBidXQgaXQncyAqb3ZlcnJpZGRlbiogaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBUaGF0IG1lYW5zIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kLCBwYXJ0aWN1bGFybHksIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBjb25zaWRlciBhcyBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuIFRoZXkncmUgY2xlYXJseSBpbXBvcnRhbnQgaG9va3MgZm9yIHRoZSBSSVNDLVYgSklULlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbSBhbHJlYWR5IGNlcnRhaW4gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBpbnZvbHZlZC4gQnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIFJJU0MtViwgYENPTkZJR19SSVNDVmAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiwgaW1wbGllZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBUaGUgZmFjdCB0aGF0IHRoZSBSSVNDLVYgSklUIHNwZWNpZmljYWxseSB0YXJnZXRzIDY0LWJpdCAoYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIGlzIG9ubHkgY29tcGlsZWQgZm9yIDY0LWJpdCBSSVNDLVYpIG1ha2VzIG1lIHdvbmRlciBpZiBgQ09ORklHXzY0QklUYCBpcyBhbHNvIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBlbnN1cmUgSSdtIGFjY291bnRpbmcgZm9yIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6NDAuNTYwNzQ3MTMzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg5OTk4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9uZXQvTWFrZWZpbGU9NT1pZmVxICgkKENPTkZJR19BUkNIX1JWNjRJKSx5KVxcbmFyY2gvcmlzY3YvbmV0L01ha2VmaWxlOjY6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDY0Lm9cXG5hcmNoL3Jpc2N2L25ldC9NYWtlZmlsZS03LWVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6NDAuNjY5NzUxNzIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODgzOTU5NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgUklTQy1WIEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gKkNPTkZJR19BUkNIX1JWNjRJKi4uLiBhaGEsIHRoYXQncyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3IgNjQtYml0IFJJU0MtVi4gTXkgbWVudGFsIG1vZGVsIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGhvdyB0aGlzIHR5cGljYWxseSBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uLiBOb3csIGlzbid0ICpBUkNIX1JWNjRJKiB1c3VhbGx5IHB1bGxlZCBpbiBieSB0aGUgKjY0QklUKiBvcHRpb24/IEknbSBwcmV0dHkgc3VyZSB0aGF0J3MgaG93IGl0IGdlbmVyYWxseSB3b3Jrcywgc28gbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBxdWljay4gTm8gbmVlZCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gZGV0YWlscyBJIGFscmVhZHkga25vdy4uLiBqdXN0IGNvbmZpcm0gdGhlIGV4cGVjdGVkIGRlcGVuZGVuY3kgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Njo0My42NTgxNDk4NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzUwMzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTQwNT1jb25maWcgQVJDSF9SVjMySVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMC1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDExOmNvbmZpZyBBUkNIX1JWNjRJXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQxMi1cXHRib29sIFxcXCJSVjY0SVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTY6NDMuNzY1NjU3NjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1ODMzMjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlY2lwaGVyaW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgYEFSQ0hfUlY2NElgLi4uIHRoYXQgcmVwcmVzZW50cyBhIGNvbmZpZ3VyYXRpb24uIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGlzIGEgKmNob2ljZSogdGhhdCBjYW4gYmUgbWFkZSwgb3IgaXMgaXQgbW9yZSBvZiBhIGJvb2xlYW4gZmxhZywganVzdCBpbmRpY2F0aW5nIHRoYXQgUlY2NEkgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQgb3IgcHJlc2VudD8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNlbWFudGljcyBoZXJlLiBEb2VzIGl0IHJlcHJlc2VudCB0aGUgY29yZSBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uIGl0c2VsZiwgb3IgYSBzaW1wbGUgZmVhdHVyZSBiaXQ/XCJcblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjQ3LjMyMzk5Mjk5MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MDM3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9SVjY0SVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTM5OD1jaG9pY2VcXG5hcmNoL3Jpc2N2L0tjb25maWctMzk5LVxcdHByb21wdCBcXFwiQmFzZSBJU0FcXFwiXFxuYXJjaC9yaXNjdi9LY29uZmlnOjQwMDpcXHRkZWZhdWx0IEFSQ0hfUlY2NElcXG5hcmNoL3Jpc2N2L0tjb25maWctNDAxLVxcdGhlbHBcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz00MDU9Y29uZmlnIEFSQ0hfUlYzMklcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTAtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjQxMTpjb25maWcgQVJDSF9SVjY0SVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00MTItXFx0Ym9vbCBcXFwiUlY2NElcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjQ3LjM4NTkwMTkyNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjI1MjUxOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBCUEYgSklUIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBSSVNDLVYgNjQtYml0IEJQRiBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGZvciBlZmZlY3RpdmUgZnV6emluZy4gU2luY2UgYEFSQ0hfUlY2NElgIGlzIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSwgSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdC4gV2UgYXJlIGZvY3VzaW5nIG9uIFJJU0MtViwgYnV0IHN5emthbGxlciBjb3VsZCB0ZXN0IG9uIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMsIHNvIEkgc2hvdWxkIGp1c3QgcHJvdmlkZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuXG5cbkkgcmVtZW1iZXIgZnJvbSB0aGUgYGFyY2gvcmlzY3YvS2NvbmZpZ2AgdGhhdCBgQlBGX0pJVGAgZGVwZW5kcyBvbiBgTU1VYCwgYnV0IHRoYXQncyB0eXBpY2FsbHkgZW5hYmxlZCBhbnl3YXksIHNvIHRoYXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4gVGhpcyBwYXRjaCAqZnVuY3Rpb25hbGx5KiBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgd2hpY2ggYXJlIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBpc3N1ZXMsIGFzIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24gUklTQy1WLlxuXG5Gb3Igc3ltYm9sIHRhcmdldGluZywgSSdtIHRoaW5raW5nIEkgc2hvdWxkIGZvY3VzIG9uIGBicGZfaml0X2VtaXRfaW5zbmAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2luc25gLiBJIGRpZCBjb25zaWRlciBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgYnV0IGl0IGlzIHN0YXRpYyBhbmQgbm90IHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gZnV6emluZy4gU2luY2UgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBhIHZlcnkgaG90IHBhdGggZHVyaW5nIEpJVCBjb21waWxhdGlvbiwgaXQgaXMgYSBncmVhdCBjaG9pY2UuIEJvdGggYXJlIGZpbmUuXG5cblRvIHN1bW1hcml6ZSwgSSdtIGdvaW5nIHRvIHNldCB0aGVzZSBjb25maWdzOiBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAgYW5kIHRhcmdldCBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNzMsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjU2LjYxMTE1NjkwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzI4NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfTUVNMzJTWCBhbmQgQlBGX01FTVNYIGluc3RydWN0aW9ucyBpbiB0aGUgUklTQy1WIDY0LWJpdCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBlbmFibGVzIG5ldyBCUEYgaW5zdHJ1Y3Rpb25zIHRvIGJlIEpJVCBjb21waWxlZCBvbiBSSVNDLVYsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjU2OjU2LjczODQ1NDQyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTAxNzMyOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Njo1Ni43MzkzNDkyODNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI1ODkyNzIzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkZmIxMjE3YjYwNmFhMGZjYjk1ZTk0OGE2YjdjNjIxNDY5MWU2YzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzo1NTo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBmOWQ1MzQ3YmE5NjZiLi41Nzg2ZjdkZmM4YTcwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTc3Nyw2ICs3NzcsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcdTAwMjZcdTAwMjZcbitcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMlNYIFx1MDAyNlx1MDAyNlxuIFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTkwMiwxMyArMTkwMywxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XG4rXHQvKiBMRFggfCBQUk9CRV9NRU0zMlNYOiBkc3QgPSAqKHNpZ25lZCBzaXplICopKHNyYyArIFJWX1JFR19BUkVOQSArIG9mZikgKi9cbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0I6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzJTWCB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyU1ggfCBCUEZfVzpcbiBcdHtcbiBcdFx0Ym9vbCBzaWduX2V4dDtcbiBcbiBcdFx0c2lnbl9leHQgPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCB8fFxuLVx0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYO1xuK1x0XHRcdCAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8XG4rXHRcdFx0ICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWDtcbiBcbi1cdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4rXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU0zMiB8fFxuK1x0XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzJTWCkge1xuIFx0XHRcdGVtaXRfYWRkKFJWX1JFR19UMiwgcnMsIFJWX1JFR19BUkVOQSwgY3R4KTtcbiBcdFx0XHRycyA9IFJWX1JFR19UMjtcbiBcdFx0fVxuQEAgLTIxMjYsMTAgKzIxMzMsNiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG4gXHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuIFx0XHRcdFx0cmV0dXJuIHJ2X2V4dF9lbmFibGVkKFpBQ0FTKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6XG4tXHRcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuLVx0XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzpcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRzeC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkc3guY1xuaW5kZXggNDEzNDA4NzdkYzlkOS4uZWQwYTBmMTU5YmMxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZHN4LmNcbkBAIC0yODYsNiArMjg2LDE5IEBAIF9faml0ZWQoXCJhZGRcdHgxMSwgeDAsIHgyOFwiKVxuIF9faml0ZWQoXCJsZHJzaFx0eDIyLCBbeDExLCAjMHgxOF1cIilcbiBfX2ppdGVkKFwiYWRkXHR4MTEsIHgwLCB4MjhcIilcbiBfX2ppdGVkKFwibGRyc2JcdHgyMiwgW3gxMSwgIzB4MjBdXCIpXG4rX19hcmNoX3Jpc2N2NjRcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTUsIHM3XCIpXG4rX19qaXRlZChcImx3XHRzMywgMHgxMCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTUsIHM3XCIpXG4rX19qaXRlZChcImxoXHRzMywgMHgxOCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTUsIHM3XCIpXG4rX19qaXRlZChcImxiXHRzMywgMHgyMCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTAsIHM3XCIpXG4rX19qaXRlZChcImx3XHRzNCwgMHgxMCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTAsIHM3XCIpXG4rX19qaXRlZChcImxoXHRzNCwgMHgxOCh0MilcIilcbitfX2ppdGVkKFwiYWRkXHR0MiwgYTAsIHM3XCIpXG4rX19qaXRlZChcImxiXHRzNCwgMHgyMCh0MilcIilcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9kaXNhc20odm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtMzE3LDYgKzMzMCw3IEBAIF9fZGVzY3JpcHRpb24oXCJBcmVuYSBMRFNYIEV4Y2VwdGlvblwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X2V4Y2VwdGlvbih2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC0zMzgsNiArMzUyLDcgQEAgX19kZXNjcmlwdGlvbihcIkFyZW5hIExEU1gsIFM4XCIpXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3M4KHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuQEAgLTM2OSw2ICszODQsNyBAQCBfX2Rlc2NyaXB0aW9uKFwiQXJlbmEgTERTWCwgUzE2XCIpXG4gX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbitfX2FyY2hfcmlzY3Y2NFxuIF9fbmFrZWQgdm9pZCBhcmVuYV9sZHN4X3MxNih2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbkBAIC00MDAsNiArNDE2LDcgQEAgX19kZXNjcmlwdGlvbihcIkFyZW5hIExEU1gsIFMzMlwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgtMSlcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4rX19hcmNoX3Jpc2N2NjRcbiBfX25ha2VkIHZvaWQgYXJlbmFfbGRzeF9zMzIodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Njo1Ni43MzkzNTExODNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1ODkyNDI5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgQlBGIEpJVCBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgUklTQy1WIEJQRiBKSVQgY29tcGlsZXIgaW4gYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfTUVNMzJTWGAgaW5zdHJ1Y3Rpb25zLCBlZmZlY3RpdmVseSBlbmFibGluZyBzaWduZWQgMzItYml0IG1lbW9yeSBhY2Nlc3Mgd2l0aCBzaWduLWV4dGVuc2lvbiB3aXRoaW4gdGhlIEJQRiBKSVQuIEl0IGFsc28gcmVtb3ZlcyB0aGUgZXhwbGljaXQgZGVuaWFsIG9mIHN1cHBvcnQgZm9yIHNpbWlsYXIgaW5zdHJ1Y3Rpb25zIHdpdGggc21hbGxlciBkYXRhIHR5cGVzIChgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9CYCwgYEhgLCBhbmQgYFdgKSB3aXRoaW4gdGhlIGBicGZfaml0X3N1cHBvcnRzX2luc24oKWAgZnVuY3Rpb24sIGluZGljYXRpbmcgdGhleSBhcmUgbm93IHN1cHBvcnRlZC4gRnVydGhlcm1vcmUsIGl0IHVwZGF0ZXMgdGhlIHNlbGZ0ZXN0cyB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMgd2l0aCBSSVNDLVYtc3BlY2lmaWMgSklUIGV4cGVjdGF0aW9ucyBhbmQgZW5hYmxlIHNvbWUgcmVsZXZhbnQgdGVzdHMuXG5cbk15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aHJlZSBmdW5jdGlvbnMuIEkgY2FuIHNlZSB0aGUgY29yZSBjaGFuZ2VzOlxuXG4xLiAgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgaXMgZW5oYW5jZWQgdG8gaGFuZGxlIGBCUEZfUFJPQkVfTUVNMzJTWGAuXG4yLiAgYGJwZl9qaXRfZW1pdF9pbnNuYCBnZXRzIHVwZGF0ZWQgdG8gbm93IHRyYW5zbGF0ZSBgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMlNYIHwgQlBGX0JgIChhbmQgYEhgIGFuZCBgV2ApIGluc3RydWN0aW9ucywgc2V0dGluZyBgc2lnbl9leHRgIHRvIHRydWUgYW5kIGFkZGluZyBgUlZfUkVHX0FSRU5BYCB0byB0aGUgc291cmNlIHJlZ2lzdGVyLlxuMy4gIFRoZSBjcnVjaWFsIGBicGZfaml0X3N1cHBvcnRzX2luc25gIGZ1bmN0aW9uIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIGFuIGV4cGxpY2l0IGJsb2NrIHRoYXQgaGFkIHByZXZlbnRlZCB0aGUgSklUIGZyb20gc3VwcG9ydGluZyBzaWduZWQgZXh0ZW5kZWQgbG9hZCBpbnN0cnVjdGlvbnMuXG5cbk5vdywgZG9lcyB0aGlzIG9wZW4gYW55IGRvb3JzIGZvciBLTVNBTiB0byBmbGFnIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYSBKSVQgYnVnIGNvdWxkLCBpbiB0aGVvcnksIHRyYW5zbGF0ZSBCUEYgaW5zdHJ1Y3Rpb25zIGluY29ycmVjdGx5LCBhbmQgdGhhdCAqY291bGQqIGxlYWQgdG8gYSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIHRoYXQncyBub3QgYSB1bmlxdWUgcHJvYmxlbSBmb3IgS01TQU4uIEFueSBKSVQgYnVnIGNhbiBsZWFkIHRvIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgd2lsbCBsaWtlbHkgY2F0Y2ggdmlhIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBmb3IgYSAqc3BlY2lmaWMqIHByb2JsZW0gdGhhdCBLQVNBTiBtYXkgbm90IGNhdGNoLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuVGhpcyBwYXRjaCBpcyBzaW1wbHkgdHJhbnNsYXRpbmcgQlBGIGluc3RydWN0aW9ucyBpbnRvIFJJU0MtViBpbnN0cnVjdGlvbnMuIFRoZXJlJ3Mgbm8gbmV3IGtlcm5lbCBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVsaWFudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gVGhpcyBpc24ndCBhYm91dCAqYWxsb2NhdGluZyogbWVtb3J5OyBpdCdzIGFib3V0IGdlbmVyYXRpbmcgY29kZSB0byAqYWNjZXNzKiBtZW1vcnkuIFRoYXQgY291bGQgZ28gd3JvbmcgYW5kIGRvIGFsbCBzb3J0cyBvZiBuYXN0eSB0aGluZ3MuIEtBU0FOIGlzIHRoZSBtb3N0IGxpa2VseSB0b29sIHRvIGNhdGNoIHRob3NlIHByb2JsZW1zLiBLTVNBTiBpcyB0aGUgdG9vbCB0byB1c2Ugd2hlbiB0aGVyZSdzIGFuIGFjdHVhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGUgc3BlY2lmaWMgbmF0dXJlIG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGRlYWxzIHdpdGggSklUIGNvbXBpbGF0aW9uIG9mIGBCUEZfUFJPQkVfTUVNMzJTWGAgYW5kIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHJpc2sgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpcyBhIGdlbmVyYWwgcHJvcGVydHkgb2YgYSBjb2RlIGV4ZWN1dGlvbiBidWcsIHdoaWNoIEtBU0FOLCBhbmQgcG90ZW50aWFsbHkgS01TQU4sIHdvdWxkIGNhdGNoLiBUaGlzIGlzbid0IGEgdGFyZ2V0ZWQgYXR0YWNrIG9uIEtNU0FOLiBUaGlzIHBhdGNoIGlzIG9ubHkgcmVsYXRlZCB0byBpbXBsZW1lbnRpbmcgc2lnbi1leHRlbmRlZCBsb2Fkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxMywiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1NzowOS4zMjg1OTg1MzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2lnbi1leHRlbmRlZCBtZW1vcnkgbG9hZHMgKEJQRl9QUk9CRV9NRU0zMlNYIGFuZCBCUEZfTUVNU1gpIGluIHRoZSBSSVNDLVYgQlBGIEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEpJVCBiYWNrZW5kIHRvIGVtaXQgdGhlIGNvcnJlY3QgUklTQy1WIGluc3RydWN0aW9ucyBmb3IgdGhlc2UgQlBGIG9wZXJhdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3RzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIG1lbW9yeSB0aGF0IG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxhdGlvbiB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGluY29ycmVjdCBjb2RlIGV4ZWN1dGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[1] Phase: Succeeded StartedAt: 2026-08-17 07:57:21 +0000 UTC FinishedAt: 2026-08-17 07:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 07:57:21 +0000 UTC FinishedAt: 2026-08-17 07:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2] Phase: Succeeded StartedAt: 2026-08-17 07:57:21 +0000 UTC FinishedAt: 2026-08-17 08:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 07:57:21 +0000 UTC FinishedAt: 2026-08-17 08:38:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","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-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 07:57:21 +0000 UTC FinishedAt: 2026-08-17 07:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 07:57:21 +0000 UTC FinishedAt: 2026-08-17 07:57:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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-workflows8pjr/series-workflows8pjr-convert-artifact-1092526123/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 07:57:31 +0000 UTC FinishedAt: 2026-08-17 08:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 07:57:31 +0000 UTC FinishedAt: 2026-08-17 08:15:10 +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:*3cd2bd57-5455-49de-9b15-e2c16772824a,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-workflows8pjr/series-workflows8pjr-convert-artifact-1092526123/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": "24f39d8c-d8c7-4a9e-a7ec-0ac444f140f2", "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-workflows8pjr/series-workflows8pjr-build-action-2171744553/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 07:57:31 +0000 UTC FinishedAt: 2026-08-17 08:14: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:*3cd2bd57-5455-49de-9b15-e2c16772824a,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-workflows8pjr/series-workflows8pjr-convert-artifact-1092526123/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": "24f39d8c-d8c7-4a9e-a7ec-0ac444f140f2", "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-workflows8pjr/series-workflows8pjr-build-action-2171744553/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 08:15:10 +0000 UTC FinishedAt: 2026-08-17 08:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 08:15:10 +0000 UTC FinishedAt: 2026-08-17 08:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 08:15:10 +0000 UTC FinishedAt: 2026-08-17 08:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 08:15:10 +0000 UTC FinishedAt: 2026-08-17 08:15:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","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-workflows8pjr/series-workflows8pjr-convert-artifact-1317468162/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 08:15:20 +0000 UTC FinishedAt: 2026-08-17 08:17:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 08:15:20 +0000 UTC FinishedAt: 2026-08-17 08:17:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24f39d8c-d8c7-4a9e-a7ec-0ac444f140f2,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-workflows8pjr/series-workflows8pjr-build-action-2171744553/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-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 08:17:27 +0000 UTC FinishedAt: 2026-08-17 08:17:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 08:17:27 +0000 UTC FinishedAt: 2026-08-17 08:17:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 08:17:27 +0000 UTC FinishedAt: 2026-08-17 08:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 08:17:27 +0000 UTC FinishedAt: 2026-08-17 08:34:55 +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:*3cd2bd57-5455-49de-9b15-e2c16772824a,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-workflows8pjr/series-workflows8pjr-convert-artifact-1317468162/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": "b28c6c01-e4e9-4230-836c-3c5c5139a9dd", "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-workflows8pjr/series-workflows8pjr-build-action-2478498390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 08:17:27 +0000 UTC FinishedAt: 2026-08-17 08:34:45 +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:*3cd2bd57-5455-49de-9b15-e2c16772824a,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-workflows8pjr/series-workflows8pjr-convert-artifact-1317468162/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": "b28c6c01-e4e9-4230-836c-3c5c5139a9dd", "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-workflows8pjr/series-workflows8pjr-build-action-2478498390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 08:34:55 +0000 UTC FinishedAt: 2026-08-17 08:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 08:34:55 +0000 UTC FinishedAt: 2026-08-17 08:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 08:34:55 +0000 UTC FinishedAt: 2026-08-17 08:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 08:34:55 +0000 UTC FinishedAt: 2026-08-17 08:36:51 +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:*b28c6c01-e4e9-4230-836c-3c5c5139a9dd,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-workflows8pjr/series-workflows8pjr-build-action-2478498390/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-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 08:37:01 +0000 UTC FinishedAt: 2026-08-17 08:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 08:37:01 +0000 UTC FinishedAt: 2026-08-17 08:38:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"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:*24f39d8c-d8c7-4a9e-a7ec-0ac444f140f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b28c6c01-e4e9-4230-836c-3c5c5139a9dd,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-workflows8pjr/series-workflows8pjr-build-action-2171744553/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-workflows8pjr/series-workflows8pjr-build-action-2478498390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 08:37:01 +0000 UTC FinishedAt: 2026-08-17 08:37:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 08:37:01 +0000 UTC FinishedAt: 2026-08-17 08:37:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"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-workflows8pjr/series-workflows8pjr-convert-artifact-78197815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 08:37:01 +0000 UTC FinishedAt: 2026-08-17 08:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 08:37:01 +0000 UTC FinishedAt: 2026-08-17 08:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 08:37:01 +0000 UTC FinishedAt: 2026-08-17 08:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 08:37:11 +0000 UTC FinishedAt: 2026-08-17 08:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8pjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","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":["bpf_jit_emit_insn","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"d6a26af1-4785-407a-a97e-18adb9ff4c4a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 08:37:11 +0000 UTC FinishedAt: 2026-08-17 08:38:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24f39d8c-d8c7-4a9e-a7ec-0ac444f140f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b28c6c01-e4e9-4230-836c-3c5c5139a9dd,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-workflows8pjr/series-workflows8pjr-build-action-2171744553/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-workflows8pjr/series-workflows8pjr-build-action-2478498390/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-workflows8pjr/series-workflows8pjr-convert-artifact-78197815/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,}