Name: series-workflow8szn7 Phase: Succeeded StartedAt: 2026-09-10 18:39:53 +0000 UTC FinishedAt: 2026-09-10 22:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[0] Phase: Succeeded StartedAt: 2026-09-10 18:39:53 +0000 UTC FinishedAt: 2026-09-10 19:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 18:39:53 +0000 UTC FinishedAt: 2026-09-10 19:04:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "KPROBE_EVENTS" ], "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": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "KPROBE_EVENTS" ], "series_id": "65413d4b-ab1a-4116-a09f-05929a4451ca" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "sort_r", "check_dup_ids", "bpf_tracing_multi_attach" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvcnRfciYjMzQ7LAogICAgJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwmIzM5O3Mgc29ydCBsaWJyYXJ5IGJ5IGVsaW1pbmF0aW5nIHNvcnRfbm9uYXRvbWljIGFuZCBzb3J0X3Jfbm9uYXRvbWljIChhbmQgdGhlIHVuZGVybHlpbmcgY29uZF9yZXNjaGVkIGxvb3AgbG9naWMpLCByZWltcGxlbWVudGluZyBzb3J0X3IgZGlyZWN0bHkuIEl0IGFsc28gbW9kaWZpZXMga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIChjaGVja19kdXBfaWRzKSB0byBpbnZva2Ugc29ydF9yIGRpcmVjdGx5IGluc3RlYWQgb2Ygc29ydF9yX25vbmF0b21pYy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiByZWFjaGFibGUgY29yZSBsaWJyYXJ5IGFuZCBCUEYgdHJhY2luZyBzdWJzeXN0ZW1zIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGwgaW50ZXJmYWNlcyAoZS5nLiwgQlBGX0xJTktfQ1JFQVRFIGZvciBtdWx0aS10cmFjaW5nKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxOTowMjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvcnQuaCBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5pbmRleCBjMDFlZjgwNGEwZWIyLi44NzE3NzU5NzhhZjBhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5AQCAtMjMsMTUgJiM0MzsyMyw0IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbiBcdCAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKTtcbiBcbi0vKiBWZXJzaW9ucyB0aGF0IHBlcmlvZGljYWxseSBjYWxsIGNvbmRfcmVzY2hlZCgpOiAqL1xuLVxuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcbi1cdFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdik7XG4tXG4tdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpO1xuLVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggMjkyNjA5NTFhYTg3MS4uMWQ3ZTczZGRiYWZiZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMzgyNiw3ICYjNDM7MzgyNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuIFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xuIFx0ICogYXJlIGxlZnQgc29ydGVkLlxuIFx0ICovXG4tXHRzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcbiYjNDM7XHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG5kaWZmIC0tZ2l0IGEvbGliL3NvcnQuYyBiL2xpYi9zb3J0LmNcbmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0XG4tLS0gYS9saWIvc29ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvc29ydC5jXG5AQCAtMTg2LDEzICYjNDM7MTg2LDM2IEBAIHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIGkgLyAyO1xuIH1cbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnByaXYsXG4tXHRcdCAgICAgYm9vbCBtYXlfc2NoZWR1bGUpXG4mIzQzOy8qKlxuJiM0MzsgKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzXG4mIzQzOyAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuJiM0MzsgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbiYjNDM7ICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50XG4mIzQzOyAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4mIzQzOyAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4mIzQzOyAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGVcbiYjNDM7ICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuJiM0MzsgKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuJiM0MzsgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuJiM0MzsgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzpcbiYjNDM7ICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mXG4mIzQzOyAqIGNtcF9mdW5jKGIsIGEpLlxuJiM0MzsgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgXHUwMDNjPSAwIGFuZCBjbXBfZnVuYyhiLCBjKSBcdTAwM2M9IDAsIHRoZW5cbiYjNDM7ICogY21wX2Z1bmMoYSwgYykgXHUwMDNjPSAwLlxuJiM0MzsgKlxuJiM0MzsgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlXG4mIzQzOyAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlXG4mIzQzOyAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuJiM0MzsgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4mIzQzO1x0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbiYjNDM7XHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4mIzQzO1x0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4ge1xuIFx0LyogcHJlLXNjYWxlIGNvdW50ZXJzIGZvciBwZXJmb3JtYW5jZSAqL1xuIFx0c2l6ZV90IG4gPSBudW0gKiBzaXplLCBhID0gKG51bS8yKSAqIHNpemU7XG5AQCAtMjYzLDkgJiM0MzsyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHRiID0gcGFyZW50KGIsIGxzYml0LCBzaXplKTtcbiBcdFx0XHRkb19zd2FwKGJhc2UgJiM0MzsgYiwgYmFzZSAmIzQzOyBjLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChtYXlfc2NoZWR1bGUpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRuIC09IHNpemU7XG5AQCAtMjczLDYzICYjNDM7MjkzLDggQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHRpZiAobiA9PSBzaXplICogMiBcdTAwMjZcdTAwMjYgZG9fY21wKGJhc2UsIGJhc2UgJiM0Mzsgc2l6ZSwgY21wX2Z1bmMsIHByaXYpIFx1MDAzZSAwKVxuIFx0XHRkb19zd2FwKGJhc2UsIGJhc2UgJiM0Mzsgc2l6ZSwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcbiB9XG4tXG4tLyoqXG4tICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xuLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxuLSAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcbi0gKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuLSAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cbi0gKlxuLSAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuLSAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxuLSAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxuLSAqIGNtcF9mdW5jKGIsIGEpLlxuLSAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFx1MDAzYz0gMCwgdGhlblxuLSAqIGNtcF9mdW5jKGEsIGMpIFx1MDAzYz0gMC5cbi0gKlxuLSAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcbi0gKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxuLSAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuLSAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXG4tICovXG4tdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCBmYWxzZSk7XG4tfVxuIEVYUE9SVF9TWU1CT0woc29ydF9yKTtcbiBcbi0vKipcbi0gKiBzb3J0X3Jfbm9uYXRvbWljIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cywgd2l0aCBjb25kX3Jlc2NoZWRcbi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcbi0gKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcbi0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuLSAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4tICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICpcbi0gKiBTYW1lIGFzIHNvcnRfciwgYnV0IHByZWZlcnJlZCBmb3IgbGFyZ2VyIGFycmF5cyBhcyBpdCBkb2VzIGEgcGVyaW9kaWNcbi0gKiBjb25kX3Jlc2NoZWQoKS5cbi0gKi9cbi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCB0cnVlKTtcbi19XG4tRVhQT1JUX1NZTUJPTChzb3J0X3Jfbm9uYXRvbWljKTtcbi1cbiB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHQgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4gXHQgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbkBAIC0zMzksMTkgJiM0MzszMDQsNiBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHRcdC5zd2FwID0gc3dhcF9mdW5jLFxuIFx0fTtcbiBcbi1cdHJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcdTAwMjZ3LCBmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcdTAwMjZ3KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChzb3J0KTtcbi1cbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbi17XG4tXHRzdHJ1Y3Qgd3JhcHBlciB3ID0ge1xuLVx0XHQuY21wICA9IGNtcF9mdW5jLFxuLVx0XHQuc3dhcCA9IHN3YXBfZnVuYyxcbi1cdH07XG4tXG4tXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dywgdHJ1ZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvcnRfciYjMzQ7LAogICAgJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGtlcm5lbCYjMzk7cyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGYwNjI5ZGNhNmI1ZWU4OTljNjE2OWEzYzIxYjU4ZThkMWMxMmM3OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE5OjAyOjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb3J0LmggYi9pbmNsdWRlL2xpbnV4L3NvcnQuaAppbmRleCBjMDFlZjgwNGEwZWIyLi44NzE3NzU5NzhhZjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvcnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvcnQuaApAQCAtMjMsMTUgJiM0MzsyMyw0IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCiAJICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpOwogCi0vKiBWZXJzaW9ucyB0aGF0IHBlcmlvZGljYWxseSBjYWxsIGNvbmRfcmVzY2hlZCgpOiAqLwotCi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCi0JCSAgICAgIGNvbnN0IHZvaWQgKnByaXYpOwotCi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCQkgICAgY21wX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDI5MjYwOTUxYWE4NzEuLjFkN2U3M2RkYmFmYmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTM4MjYsNyAmIzQzOzM4MjYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudCkKIAkgKiBhbmQgY2hlY2sgaXQgZm9yIGR1cGxpY2F0ZXMuIFRoZSBpZHMgYW5kIGNvb2tpZXMgYXJyYXlzCiAJICogYXJlIGxlZnQgc29ydGVkLgogCSAqLwotCXNvcnRfcl9ub25hdG9taWMoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpOwomIzQzOwlzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpOwogCiAJZm9yIChpbnQgaSA9IDE7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkgewpkaWZmIC0tZ2l0IGEvbGliL3NvcnQuYyBiL2xpYi9zb3J0LmMKaW5kZXggNTIzNjM5OTVjY2M1Yy4uOGU3M2RjNTU0NzZiYiAxMDA2NDQKLS0tIGEvbGliL3NvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvc29ydC5jCkBAIC0xODYsMTMgJiM0MzsxODYsMzYgQEAgc3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpCiAJcmV0dXJuIGkgLyAyOwogfQogCi0jaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKLQotc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLAotCQkgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLAotCQkgICAgIGNvbnN0IHZvaWQgKnByaXYsCi0JCSAgICAgYm9vbCBtYXlfc2NoZWR1bGUpCiYjNDM7LyoqCiYjNDM7ICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cwomIzQzOyAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydAomIzQzOyAqIEBudW06IG51bWJlciBvZiBlbGVtZW50cwomIzQzOyAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudAomIzQzOyAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uCiYjNDM7ICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTEwKJiM0MzsgKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZQomIzQzOyAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnkKJiM0MzsgKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcAomIzQzOyAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbAomIzQzOyAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOgomIzQzOyAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZgomIzQzOyAqIGNtcF9mdW5jKGIsIGEpLgomIzQzOyAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSAmbHQ7PSAwIGFuZCBjbXBfZnVuYyhiLCBjKSAmbHQ7PSAwLCB0aGVuCiYjNDM7ICogY21wX2Z1bmMoYSwgYykgJmx0Oz0gMC4KJiM0MzsgKgomIzQzOyAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGUKJiM0MzsgKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZQomIzQzOyAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZQomIzQzOyAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuCiYjNDM7ICovCiYjNDM7dm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiYjNDM7CSAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsCiYjNDM7CSAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYywKJiM0MzsJICAgIGNvbnN0IHZvaWQgKnByaXYpCiB7CiAJLyogcHJlLXNjYWxlIGNvdW50ZXJzIGZvciBwZXJmb3JtYW5jZSAqLwogCXNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplOwpAQCAtMjYzLDkgJiM0MzsyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkJCWIgPSBwYXJlbnQoYiwgbHNiaXQsIHNpemUpOwogCQkJZG9fc3dhcChiYXNlICYjNDM7IGIsIGJhc2UgJiM0MzsgYywgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTsKIAkJfQotCi0JCWlmIChtYXlfc2NoZWR1bGUpCi0JCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKIAluIC09IHNpemU7CkBAIC0yNzMsNjMgJiM0MzsyOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAlpZiAobiA9PSBzaXplICogMiAmYW1wOyZhbXA7IGRvX2NtcChiYXNlLCBiYXNlICYjNDM7IHNpemUsIGNtcF9mdW5jLCBwcml2KSAmZ3Q7IDApCiAJCWRvX3N3YXAoYmFzZSwgYmFzZSAmIzQzOyBzaXplLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpOwogfQotCi0vKioKLSAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHMKLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydAotICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzCi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnQKLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uCi0gKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTAotICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uCi0gKgotICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlCi0gKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5Ci0gKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcAotICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLgotICoKLSAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbAotICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6Ci0gKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2YKLSAqIGNtcF9mdW5jKGIsIGEpLgotICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpICZsdDs9IDAgYW5kIGNtcF9mdW5jKGIsIGMpICZsdDs9IDAsIHRoZW4KLSAqIGNtcF9mdW5jKGEsIGMpICZsdDs9IDAuCi0gKgotICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZQotICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGUKLSAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZQotICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS4KLSAqLwotdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCi0JICAgIGNvbnN0IHZvaWQgKnByaXYpCi17Ci0JX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCBmYWxzZSk7Ci19CiBFWFBPUlRfU1lNQk9MKHNvcnRfcik7CiAKLS8qKgotICogc29ydF9yX25vbmF0b21pYyAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHMsIHdpdGggY29uZF9yZXNjaGVkCi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnQKLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50cwotICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50Ci0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTEwKLSAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICoKLSAqIFNhbWUgYXMgc29ydF9yLCBidXQgcHJlZmVycmVkIGZvciBsYXJnZXIgYXJyYXlzIGFzIGl0IGRvZXMgYSBwZXJpb2RpYwotICogY29uZF9yZXNjaGVkKCkuCi0gKi8KLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKLQkJICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLAotCQkgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYywKLQkJICAgICAgY29uc3Qgdm9pZCAqcHJpdikKLXsKLQlfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIHRydWUpOwotfQotRVhQT1JUX1NZTUJPTChzb3J0X3Jfbm9uYXRvbWljKTsKLQogdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAogCSAgY21wX2Z1bmNfdCBjbXBfZnVuYywKIAkgIHN3YXBfZnVuY190IHN3YXBfZnVuYykKQEAgLTMzOSwxOSAmIzQzOzMwNCw2IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkJLnN3YXAgPSBzd2FwX2Z1bmMsCiAJfTsKIAotCXJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCAmYW1wO3csIGZhbHNlKTsKJiM0MzsJcmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCAmYW1wO3cpOwogfQogRVhQT1JUX1NZTUJPTChzb3J0KTsKLQotdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKLQkJICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCi0JCSAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpCi17Ci0Jc3RydWN0IHdyYXBwZXIgdyA9IHsKLQkJLmNtcCAgPSBjbXBfZnVuYywKLQkJLnN3YXAgPSBzd2FwX2Z1bmMsCi0JfTsKLQotCXJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCAmYW1wO3csIHRydWUpOwotfQotRVhQT1JUX1NZTUJPTChzb3J0X25vbmF0b21pYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3Mgc2ltcGxpZnlpbmcgdGhlIHNvcnRpbmcgaW1wbGVtZW50YXRpb25zLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemluZyBhd2F5IHNvbWUgb3ZlcmhlYWQuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgX25vbmF0b21pY2AgdmFyaWFudHMgb2YgdGhlIHNvcnQgZnVuY3Rpb25zIChgc29ydF9yX25vbmF0b21pY2AsIGBzb3J0X25vbmF0b21pY2ApIGluIGBpbmNsdWRlL2xpbnV4L3NvcnQuaGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGltcGxlbWVudGF0aW9uIGluIGBsaWIvc29ydC5jYC4gVGhlc2UgYF9ub25hdG9taWNgIHZhcmlhbnRzIHdlcmUgbGlrZWx5IGRlc2lnbmVkIGZvciBzY2VuYXJpb3Mgd2hlcmUgcHJlZW1wdGlvbiB3YXMgdW5kZXNpcmFibGUgZHVyaW5nIHRoZSBzb3J0LCBwZXJoYXBzIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24gb3IgaW50ZXJydXB0IGNvbnRleHQuIFRoZSByZW1vdmFsIHN1Z2dlc3RzIGVpdGhlcjoKCjEuICBUaGF0IHRoZXNlIHNjZW5hcmlvcyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50LAoyLiAgVGhhdCB0aGUgbG9ja2luZyBzdHJhdGVneSBhcm91bmQgdGhlc2Ugc29ydHMgaGFzIGNoYW5nZWQsIG9yCjMuICBUaGF0IGEgbGVzcyBpbnRydXNpdmUgbWVjaGFuaXNtIGlzIG5vdyBpbiBwbGFjZSB0byBoYW5kbGUgdGhvc2UgY29uY2VybnMuCgpUaGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgY2hhbmdlLCB3aGVyZSBgc29ydF9yX25vbmF0b21pY2AgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RhbmRhcmQgYHNvcnRfcmAgaW4gYGNoZWNrX2R1cF9pZHMoKWAsIGlzIHRlbGxpbmcuIFRoaXMgZnVuY3Rpb24sIGBjaGVja19kdXBfaWRzKClgLCBsaWtlbHkgaW52b2x2ZXMgYSBkYXRhIHN0cnVjdHVyZSAocGVyaGFwcyBhIGxpc3Qgb2YgdHJhY2Vwb2ludHMgb3IgQlBGIHByb2dyYW0gaWRlbnRpZmllcnMpIHRoYXQgbmVlZHMgdG8gYmUgc29ydGVkIGZvciBlZmZpY2llbnQgbG9va3VwIG9yIGNvbXBhcmlzb24uIFRoZSBmYWN0IHRoYXQgdGhlIGBfbm9uYXRvbWljYCB2ZXJzaW9uIHdhcyAqb3JpZ2luYWxseSogdXNlZCBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgb3IgYWNjZXNzIHBhdHRlcm5zIGluIGBjaGVja19kdXBfaWRzKClgIGNvdWxkIGJlIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaWYgbm90IGNhcmVmdWxseSBtYW5hZ2VkLiBIb3dldmVyLCB0aGUgc3dpdGNoIHRvIHRoZSBzdGFuZGFyZCBgc29ydF9yYCBzaWduYWxzIGEgc2hpZnQgdG93YXJkcyBhbGxvd2luZyBwcmVlbXB0aW9uIHdpdGhpbiB0aGF0IHNvcnQsIGltcGx5aW5nIHRoZSBkZXNpZ24gaGFzIGJlZW4gbW9kaWZpZWQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgY2hlY2tfZHVwX2lkcygpYCBpcyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSByZXN0IG9mIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBmb3IgZnVydGhlciB1c2VzIG9mIHRoaXMgc29ydCBvciBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIGRlc2lnbiBvZiB0aGUgbG9ja2luZy9wcmVlbXB0aW9uIHN0cmF0ZWdpZXMuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgcmVnYXJkaW5nIGNvbmN1cnJlbmN5IGFuZCBzY2hlZHVsaW5nLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBjb25kX3Jlc2NoZWQoKWAgZnJvbSB0aGUgbmV3IGBzb3J0X3JgIGluIGBsaWIvc29ydC5jYCByYWlzZXMgcXVlc3Rpb25zIHJlZ2FyZGluZyBzY2hlZHVsaW5nIGJlaGF2aW9yLgoKVGhpcyBpcyB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGlzIHBhdGNoIG1vZGlmaWVzIHByZWVtcHRpb24gc2FmZXR5IGluIHRoZXNlIGZ1bmN0aW9ucyBhbmQgaWYgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGNvdWxkIG5vdyBiZSBzdWJqZWN0IHRvIHVuZXhwZWN0ZWQgaW50ZXJydXB0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIHBhdGNoIGFuZCBJIG11c3QgZW5zdXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgdGhvcm91Z2hseSB1bmRlcnN0b29kIGFuZCB3ZWxsLXRlc3RlZCBiZWZvcmUgYmVpbmcgYWNjZXB0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfZHVwX2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgwMT1zdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODE4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4MTk6c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgyMC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4NDA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODgyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4ODM6XHRlcnIgPSBjaGVja19kdXBfaWRzKGlkcywgY29va2llcywgY250KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODg0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTk3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBUcmFjaW5nIElzc3VlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBjb25kaXRpb25zIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbmQgYGNoZWNrX2R1cF9pZHNgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggQlBGIGludGVybmFscywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgZGVsdmUgaW50byBgYnBmX3RyYWNlLmNgIGFuZCBmb2N1cyBvbiB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lcyAzODAwIHRvIDM5MDAuIFRoYXQgcmFuZ2UgaXMgYSBsaWtlbHkgaG90c3BvdCBmb3IgdGhlIGxvZ2ljIHRoYXQgZ292ZXJucyBmdW5jdGlvbiBhdHRhY2htZW50IGFuZCBwb3RlbnRpYWwgSUQgY2xhc2hlcy4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGNyaXRpY2FsIGNoZWNrcyBhbmQgY29uZGl0aW9uYWwgY2FsbHMgdGhhdCBJIG5lZWQgdG8gZGlzc2VjdC4gR3JhYmJpbmcgbXkgdHJ1c3R5IGRlYnVnZ2VyLCBhbmQgb3BlbmluZyBgYnBmX3RyYWNlLmNgIHRvIHRoYXQgZXhhY3Qgc3BvdCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBjb250cm9sIGZsb3cgYW5kIGhlbHAgbWUgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBpbnZva2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzgwMDpcdFxuMzgwMTpcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXG4zODAyOlx0XHRcdCAgICAgICBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxuMzgwMzpcdHtcbjM4MDQ6XHRcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XG4zODA1Olx0XHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XG4zODA2Olx0XHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xuMzgwNzpcdFxuMzgwODpcdFx0aWRzICAgICA9IGRhdGFbMF07XG4zODA5Olx0XHRjb29raWVzID0gZGF0YVsxXTtcbjM4MTA6XHRcbjM4MTE6XHRcdGlmIChjb29raWVzKSB7XG4zODEyOlx0XHRcdGNvb2tpZV9hID0gY29va2llcyAmIzQzOyAoaWRfYSAtIGlkcyk7XG4zODEzOlx0XHRcdGNvb2tpZV9iID0gY29va2llcyAmIzQzOyAoaWRfYiAtIGlkcyk7XG4zODE0Olx0XHRcdHN3YXAoKmNvb2tpZV9hLCAqY29va2llX2IpO1xuMzgxNTpcdFx0fVxuMzgxNjpcdFx0c3dhcCgqaWRfYSwgKmlkX2IpO1xuMzgxNzpcdH1cbjM4MTg6XHRcbjM4MTk6XHRzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbjM4MjA6XHR7XG4zODIxOlx0XHR2b2lkICpkYXRhWzJdID0geyBpZHMsIGNvb2tpZXMgfTtcbjM4MjI6XHRcdGludCBlcnIgPSAwO1xuMzgyMzpcdFxuMzgyNDpcdFx0LypcbjM4MjU6XHRcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcbjM4MjY6XHRcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcbjM4Mjc6XHRcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cbjM4Mjg6XHRcdCAqL1xuMzgyOTpcdFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcbjM4MzA6XHRcbjM4MzE6XHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4zODMyOlx0XHRcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xuMzgzMzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zODM0Olx0XHRcdFx0YnJlYWs7XG4zODM1Olx0XHRcdH1cbjM4MzY6XHRcdH1cbjM4Mzc6XHRcdHJldHVybiBlcnI7XG4zODM4Olx0fVxuMzgzOTpcdFxuMzg0MDpcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjM4NDE6XHR7XG4zODQyOlx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XG4zODQzOlx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XG4zODQ0Olx0XHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xuMzg0NTpcdFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XG4zODQ2Olx0XHR1NjQgX191c2VyICp1Y29va2llcztcbjM4NDc6XHRcdHU2NCAqY29va2llcyA9IE5VTEw7XG4zODQ4Olx0XHR1MzIgX191c2VyICp1aWRzO1xuMzg0OTpcdFx0aW50IGVycjtcbjM4NTA6XHRcbjM4NTE6XHRcdHVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XG4zODUyOlx0XHRjbnQgPSBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY250O1xuMzg1MzpcdFxuMzg1NDpcdFx0aWYgKCFjbnQgfHwgIXVpZHMpXG4zODU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg1NjpcdFx0aWYgKGNudCBcdTAwM2UgTUFYX1RSQUNJTkdfTVVMVElfQ05UKVxuMzg1NzpcdFx0XHRyZXR1cm4gLUUyQklHO1xuMzg1ODpcdFx0aWYgKGF0dHItXHUwMDNlbGlua19jcmVhdGUuZmxhZ3MgfHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQpXG4zODU5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg2MDpcdFxuMzg2MTpcdFx0aWRzID0ga3ZtYWxsb2Nfb2JqcygqaWRzLCBjbnQpO1xuMzg2MjpcdFx0aWYgKCFpZHMpXG4zODYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzg2NDpcdFxuMzg2NTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGlkcywgdWlkcywgY250ICogc2l6ZW9mKCppZHMpKSkge1xuMzg2NjpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMzg2NzpcdFx0XHRnb3RvIGVycm9yO1xuMzg2ODpcdFx0fVxuMzg2OTpcdFxuMzg3MDpcdFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNvb2tpZXMpO1xuMzg3MTpcdFx0aWYgKHVjb29raWVzKSB7XG4zODcyOlx0XHRcdGNvb2tpZXMgPSBrdm1hbGxvY19vYmpzKCpjb29raWVzLCBjbnQpO1xuMzg3MzpcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbjM4NzQ6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg3NTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4zODc2Olx0XHRcdH1cbjM4Nzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xuMzg3ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODc5Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4ODA6XHRcdFx0fVxuMzg4MTpcdFx0fVxuMzg4MjpcdFxuMzg4MzpcdFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XG4zODg0Olx0XHRpZiAoZXJyKVxuMzg4NTpcdFx0XHRnb3RvIGVycm9yO1xuMzg4NjpcdFxuMzg4NzpcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJKSB7XG4zODg4Olx0XHRcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcbjM4ODk6XHRcdFx0aWYgKCFmZXhpdHMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFNvcnQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc29ydF9ub25hdG9taWNgIGFuZCBgc29ydF9yX25vbmF0b21pY2AgYXJlIGdvbmUuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgd2VyZSByZW1vdmVkLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYWR2YW5jZW1lbnRzIGluIHRoZSBrZXJuZWwmIzM5O3MgcHJlZW1wdGlvbiBtZWNoYW5pc21zIOKAkyBzcGVjaWZpY2FsbHkgbGF6eSBwcmVlbXB0aW9uLCBkeW5hbWljIHByZWVtcHRpb24sIG9yIHBlcmhhcHMgYmVjYXVzZSBgY29uZF9yZXNjaGVkYCBiZWNhbWUgdW5uZWNlc3Nhcnkgb3Igd2FzIGVsaW1pbmF0ZWQgaW4gbWFueSBhcmVhcywgaW5jbHVkaW5nIHdpdGhpbiB0aGUgc29ydCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcywgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbGliL3NvcnQuY2AuIExldCYjMzk7cyBleGFtaW5lIHRoYXQgZmlsZS4gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBhdCB0aGUgZnVsbCBmaWxlLCBvciBhdCBsZWFzdCBhIHNpemVhYmxlIGNodW5rIG9mIGl0LCBpbiBvcmRlciB0byBnZXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFRoaXMgc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIHJlbW92YWwgb2YgdGhvc2Ugc3BlY2lmaWMgc29ydCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvc29ydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHQgKi9cbiAxODE6XHRfX2F0dHJpYnV0ZV9jb25zdF9fIF9fYWx3YXlzX2lubGluZVxuIDE4MjpcdHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuIDE4MzpcdHtcbiAxODQ6XHRcdGkgLT0gc2l6ZTtcbiAxODU6XHRcdGkgLT0gc2l6ZSBcdTAwMjYgLShpIFx1MDAyNiBsc2JpdCk7XG4gMTg2Olx0XHRyZXR1cm4gaSAvIDI7XG4gMTg3Olx0fVxuIDE4ODpcdFxuIDE4OTpcdC8qKlxuIDE5MDpcdCAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHNcbiAxOTE6XHQgKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcbiAxOTI6XHQgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbiAxOTM6XHQgKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcbiAxOTQ6XHQgKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuIDE5NTpcdCAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4gMTk2Olx0ICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4gMTk3Olx0ICpcbiAxOTg6XHQgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGVcbiAxOTk6XHQgKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5XG4gMjAwOlx0ICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXBcbiAyMDE6XHQgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuXG4gMjAyOlx0ICpcbiAyMDM6XHQgKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWxcbiAyMDQ6XHQgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzpcbiAyMDU6XHQgKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2ZcbiAyMDY6XHQgKiBjbXBfZnVuYyhiLCBhKS5cbiAyMDc6XHQgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgXHUwMDNjPSAwIGFuZCBjbXBfZnVuYyhiLCBjKSBcdTAwM2M9IDAsIHRoZW5cbiAyMDg6XHQgKiBjbXBfZnVuYyhhLCBjKSBcdTAwM2M9IDAuXG4gMjA5Olx0ICpcbiAyMTA6XHQgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlXG4gMjExOlx0ICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGVcbiAyMTI6XHQgKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2VcbiAyMTM6XHQgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLlxuIDIxNDpcdCAqL1xuIDIxNTpcdHZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIDIxNjpcdFx0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbiAyMTc6XHRcdCAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcbiAyMTg6XHRcdCAgICBjb25zdCB2b2lkICpwcml2KVxuIDIxOTpcdHtcbiAyMjA6XHRcdC8qIHByZS1zY2FsZSBjb3VudGVycyBmb3IgcGVyZm9ybWFuY2UgKi9cbiAyMjE6XHRcdHNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplO1xuIDIyMjpcdFx0Y29uc3QgdW5zaWduZWQgaW50IGxzYml0ID0gc2l6ZSBcdTAwMjYgLXNpemU7ICAvKiBVc2VkIHRvIGZpbmQgcGFyZW50ICovXG4gMjIzOlx0XHRzaXplX3Qgc2hpZnQgPSAwO1xuIDIyNDpcdFxuIDIyNTpcdFx0aWYgKCFhKVx0XHQvKiBudW0gXHUwMDNjIDIgfHwgc2l6ZSA9PSAwICovXG4gMjI2Olx0XHRcdHJldHVybjtcbiAyMjc6XHRcbiAyMjg6XHRcdC8qIGNhbGxlZCBmcm9tICYjMzk7c29ydCYjMzk7IHdpdGhvdXQgc3dhcCBmdW5jdGlvbiwgbGV0JiMzOTtzIHBpY2sgdGhlIGRlZmF1bHQgKi9cbiAyMjk6XHRcdGlmIChzd2FwX2Z1bmMgPT0gU1dBUF9XUkFQUEVSIFx1MDAyNlx1MDAyNiAhKChzdHJ1Y3Qgd3JhcHBlciAqKXByaXYpLVx1MDAzZXN3YXApXG4gMjMwOlx0XHRcdHN3YXBfZnVuYyA9IE5VTEw7XG4gMjMxOlx0XG4gMjMyOlx0XHRpZiAoIXN3YXBfZnVuYykge1xuIDIzMzpcdFx0XHRpZiAoaXNfYWxpZ25lZChiYXNlLCBzaXplLCA4KSlcbiAyMzQ6XHRcdFx0XHRzd2FwX2Z1bmMgPSBTV0FQX1dPUkRTXzY0O1xuIDIzNTpcdFx0XHRlbHNlIGlmIChpc19hbGlnbmVkKGJhc2UsIHNpemUsIDQpKVxuIDIzNjpcdFx0XHRcdHN3YXBfZnVuYyA9IFNXQVBfV09SRFNfMzI7XG4gMjM3Olx0XHRcdGVsc2VcbiAyMzg6XHRcdFx0XHRzd2FwX2Z1bmMgPSBTV0FQX0JZVEVTO1xuIDIzOTpcdFx0fVxuIDI0MDpcdFxuIDI0MTpcdFx0LypcbiAyNDI6XHRcdCAqIExvb3AgaW52YXJpYW50czpcbiAyNDM6XHRcdCAqIDEuIGVsZW1lbnRzIFthLG4pIHNhdGlzZnkgdGhlIGhlYXAgcHJvcGVydHkgKGNvbXBhcmUgZ3JlYXRlciB0aGFuXG4gMjQ0Olx0XHQgKiAgICBhbGwgb2YgdGhlaXIgY2hpbGRyZW4pLFxuIDI0NTpcdFx0ICogMi4gZWxlbWVudHMgW24sbnVtKnNpemUpIGFyZSBzb3J0ZWQsIGFuZFxuIDI0NjpcdFx0ICogMy4gYSBcdTAwM2M9IGIgXHUwMDNjPSBjIFx1MDAzYz0gZCBcdTAwM2M9IG4gKHdoZW5ldmVyIHRoZXkgYXJlIHZhbGlkKS5cbiAyNDc6XHRcdCAqL1xuIDI0ODpcdFx0Zm9yICg7Oykge1xuIDI0OTpcdFx0XHRzaXplX3QgYiwgYywgZDtcbiAyNTA6XHRcbiAyNTE6XHRcdFx0aWYgKGEpXHRcdFx0LyogQnVpbGRpbmcgaGVhcDogc2lmdCBkb3duIGEgKi9cbiAyNTI6XHRcdFx0XHRhIC09IHNpemUgXHUwMDNjXHUwMDNjIHNoaWZ0O1xuIDI1MzpcdFx0XHRlbHNlIGlmIChuIFx1MDAzZSAzICogc2l6ZSkgeyAvKiBTb3J0aW5nOiBFeHRyYWN0IHR3byBsYXJnZXN0IGVsZW1lbnRzICovXG4gMjU0Olx0XHRcdFx0biAtPSBzaXplO1xuIDI1NTpcdFx0XHRcdGRvX3N3YXAoYmFzZSwgYmFzZSAmIzQzOyBuLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIDI1NjpcdFx0XHRcdHNoaWZ0ID0gZG9fY21wKGJhc2UgJiM0Mzsgc2l6ZSwgYmFzZSAmIzQzOyAyICogc2l6ZSwgY21wX2Z1bmMsIHByaXYpIFx1MDAzYz0gMDtcbiAyNTc6XHRcdFx0XHRhID0gc2l6ZSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4gMjU4Olx0XHRcdFx0biAtPSBzaXplO1xuIDI1OTpcdFx0XHRcdGRvX3N3YXAoYmFzZSAmIzQzOyBhLCBiYXNlICYjNDM7IG4sIHNpemUsIHN3YXBfZnVuYywgcHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgU29ydGluZyBMaWJyYXJ5IFJlZmFjdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsaWIvc29ydC5jYCBjb25jZXJuaW5nIGBzb3J0X3JgIGFuZCBgc29ydGAsIGFuZCBzb21lIHJlbGF0ZWQgY2hhbmdlcyBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgYGluY2x1ZGUvbGludXgvc29ydC5oYC4gVGhlIGNvcmUgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/CgpJIG5lZWQgdG8gYXBwbHkgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgaXQmIzM5O3Mgbm90IHJlYWNoYWJsZSwgZG9uJiMzOTt0IGJvdGhlci4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBgc29ydF9yYCBhbmQgYHNvcnRgIGFyZSBpbiBgbGliL3NvcnQuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG5vdCBhc3N1bWUgdGhhdCB0aGUgYXV0aG9ycyBhcmUgY29ycmVjdCBpbiB0aGVpciBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7LiBDb2RlIHJlZmFjdG9yaW5ncyBjYW4gaW50cm9kdWNlIGJ1Z3MuIEFuZCBub3cgSSBzZWUgdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhIHBhdGggaW50byBCUEYgZnVuY3Rpb25hbGl0eS4gYGNoZWNrX2R1cF9pZHNgLCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIG5vdyBjYWxscyB0aGUgbW9kaWZpZWQgYHNvcnRfcmAuIEJpbmdvISBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBwYXJ0IG9mIGEgcmVhY2hhYmxlIEJQRiBzeXNjYWxsIHBhdGgg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBCUEZfTElOS19DUkVBVEVgIHdpdGggbXVsdGktYXR0YWNoIHRyYWNpbmcuIFRoaXMgbWVhbnMgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiByZWFjaGFibGUuCgpUaGUgaW5zdHJ1Y3Rpb25zIGd1aWRlIG1lIHRvIGNvbnNpZGVyIGlmIHRoZSBtb2RpZmljYXRpb25zIGZhbGwgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLCBzcGVjaWZpY2FsbHkgJiMzNDtDb3JlIFN1YnN5c3RlbXMmIzM0OyBhbmQgJiMzNDtSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHMuJiMzNDsgVGhpcyBjaGFuZ2UgYWZmZWN0cyBjb2RlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIChCUEYgdHJhY2luZywgYSBjb3JlIHN1YnN5c3RlbSkgYW5kIGRvZXMgbW9kaWZ5IHNvcnRpbmcgbG9naWMuIFNvLCBpdCBkZWZpbml0ZWx5IG1lZXRzIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGZvY3VzIHN5bWJvbHMuIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGUga2V5IGhlcmUgaXMgbm90IHRvICYjMzQ7ZGlsdXRlJiMzNDsgdGhlIGZ1enppbmcgZWZmb3J0LiBJIGhhdmU6IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFzIHRoZSBCUEYgZW50cnkgcG9pbnQsIGBjaGVja19kdXBfaWRzYCBhcyBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0IHVzZXMgYHNvcnRfcmAuIGBzb3J0X3JgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGEga2V5IGV4cG9ydC4gVGhlIGBzb3J0YCBmdW5jdGlvbiAod2hpY2ggbm93IGNhbGxzIGBzb3J0X3JgKSBpcyBhbHNvIGEga2V5IGZ1bmN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgcmVmYWN0b3JpbmcuICpCdXQqLCBJIHNob3VsZCBjaGVjayBpZiBgc29ydGAgb3IgYHNvcnRfcmAgaXMgdWJpcXVpdG91cy4gSWYgaXQgaXMsIHRoZW4gSSBuZWVkIHRvIHJlZmluZSB0aGUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBIb3cgbWFueSBwbGFjZXMgaW4gdGhlIGtlcm5lbCBjYWxsIGBzb3J0YCBvciBgc29ydF9yYD8gSSBtdXN0IGNoZWNrIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvcnRfclxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jPTg0Nj1ib29sIGludGVsX2RwX2xpbmtfY2Fwc191cGRhdGUoc3RydWN0IGludGVsX2RwX2xpbmtfY2FwcyAqbGlua19jYXBzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtODk0LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYzo4OTU6XHRzb3J0X3IobGlua19jYXBzLVx1MDAzZWNvbmZpZ3MsIGxpbmtfY2Fwcy1cdTAwM2VudW1fY29uZmlncyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtODk2LVx0ICAgICAgIHNpemVvZihsaW5rX2NhcHMtXHUwMDNlY29uZmlnc1swXSksXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy05MDQtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jOjkwNTpcdHNvcnRfcihsaW5rX2NhcHMtXHUwMDNlcmF0ZV9sYW5lX21hcCwgbGlua19jYXBzLVx1MDAzZW51bV9jb25maWdzLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy05MDYtXHQgICAgICAgc2l6ZW9mKGxpbmtfY2Fwcy1cdTAwM2VyYXRlX2xhbmVfbWFwWzBdKSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkwOS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmM6OTEwOlx0c29ydF9yKGxpbmtfY2Fwcy1cdTAwM2VsYW5lX3JhdGVfbWFwLCBsaW5rX2NhcHMtXHUwMDNlbnVtX2NvbmZpZ3MsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkxMS1cdCAgICAgICBzaXplb2YobGlua19jYXBzLVx1MDAzZWxhbmVfcmF0ZV9tYXBbMF0pLFxuLS1cbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jPTM5Mz12NGwyX2gyNjRfYnVpbGRfcF9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcbi0tXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYy0zOTctXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXHUwMDNldW5vcmRlcmVkX3JlZmxpc3RbMF0pICogYnVpbGRlci1cdTAwM2VudW1fdmFsaWQpO1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6Mzk4Olx0c29ydF9yKHJlZmxpc3QsIGJ1aWxkZXItXHUwMDNlbnVtX3ZhbGlkLCBzaXplb2YoKnJlZmxpc3QpLFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtMzk5LVx0ICAgICAgIHY0bDJfaDI2NF9wX3JlZl9saXN0X2NtcCwgTlVMTCwgYnVpbGRlcik7XG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM9NDIzPXY0bDJfaDI2NF9idWlsZF9iX3JlZl9saXN0cyhjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcbi0tXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYy00MjgtXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXHUwMDNldW5vcmRlcmVkX3JlZmxpc3RbMF0pICogYnVpbGRlci1cdTAwM2VudW1fdmFsaWQpO1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6NDI5Olx0c29ydF9yKGIwX3JlZmxpc3QsIGJ1aWxkZXItXHUwMDNlbnVtX3ZhbGlkLCBzaXplb2YoKmIwX3JlZmxpc3QpLFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtNDMwLVx0ICAgICAgIHY0bDJfaDI2NF9iMF9yZWZfbGlzdF9jbXAsIE5VTEwsIGJ1aWxkZXIpO1xuLS1cbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTQzMy1cdCAgICAgICBzaXplb2YoYnVpbGRlci1cdTAwM2V1bm9yZGVyZWRfcmVmbGlzdFswXSkgKiBidWlsZGVyLVx1MDAzZW51bV92YWxpZCk7XG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYzo0MzQ6XHRzb3J0X3IoYjFfcmVmbGlzdCwgYnVpbGRlci1cdTAwM2VudW1fdmFsaWQsIHNpemVvZigqYjFfcmVmbGlzdCksXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYy00MzUtXHQgICAgICAgdjRsMl9oMjY0X2IxX3JlZl9saXN0X2NtcCwgTlVMTCwgYnVpbGRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9zb3J0LmgtMTYtXG5pbmNsdWRlL2xpbnV4L3NvcnQuaDoxNzp2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbmluY2x1ZGUvbGludXgvc29ydC5oLTE4LVx0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTQxNTA9c3RydWN0IGJ0Zl9yZWNvcmQgKmJ0Zl9wYXJzZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL2JwZi9idGYuYy00MjczLVxua2VybmVsL2JwZi9idGYuYzo0Mjc0Olx0c29ydF9yKHJlYy1cdTAwM2VmaWVsZHMsIHJlYy1cdTAwM2VjbnQsIHNpemVvZihzdHJ1Y3QgYnRmX2ZpZWxkKSwgYnRmX2ZpZWxkX2NtcCxcbmtlcm5lbC9icGYvYnRmLmMtNDI3NS1cdCAgICAgICBOVUxMLCByZWMpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNzgwPWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4NjAtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjg2MTpcdFx0c29ydF9yKHVzLnN5bXMsIGNudCwgc2l6ZW9mKCp1cy5zeW1zKSwgc3ltYm9sc19jbXBfcixcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yODYyLVx0XHQgICAgICAgc3ltYm9sc19zd2FwX3IsIFx1MDAyNmRhdGEpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTA2LVx0XHQgKi9cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTA3Olx0XHRzb3J0X3IoYWRkcnMsIGNudCwgc2l6ZW9mKCphZGRycyksXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjkwOC1cdFx0ICAgICAgIGJwZl9rcHJvYmVfbXVsdGlfY29va2llX2NtcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgyOC1cdCAqL1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4Mjk6XHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzAtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9ODM2Nz1zdGF0aWMgdm9pZCBzZXR1cF90cmFjZV9zY3JhdGNoKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtODQwMy1cdG5yX2VudHJpZXMgPSB0c2NyYXRjaC1cdTAwM2Vucl9lbnRyaWVzO1xua2VybmVsL3RyYWNlL3RyYWNlLmM6ODQwNDpcdHNvcnRfcih0c2NyYXRjaC1cdTAwM2VlbnRyaWVzLCBucl9lbnRyaWVzLCBzaXplb2Yoc3RydWN0IHRyYWNlX21vZF9lbnRyeSksXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy04NDA1LVx0ICAgICAgIG1vZF9hZGRyX2NvbXAsIE5VTEwsIE5VTEwpO1xuLS1cbmxpYi9zb3J0LmM9MTgyPXN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuLS1cbmxpYi9zb3J0LmMtMjE0LSAqL1xubGliL3NvcnQuYzoyMTU6dm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG5saWIvc29ydC5jLTIxNi1cdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tLVxubGliL3NvcnQuYz0yOTg9dm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLS1cbmxpYi9zb3J0LmMtMzA2LVxubGliL3NvcnQuYzozMDc6XHRyZXR1cm4gc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFx1MDAyNncpO1xubGliL3NvcnQuYy0zMDgtfVxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jPTUwNz1zdGF0aWMgaW50IGR1bXBfYnRmX2tmdW5jcyhzdHJ1Y3QgYnRmX2R1bXAgKmQsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zilcbi0tXG50b29scy9icGYvYnBmdG9vbC9idGYuYy01NDctXHQvKiBTb3J0IGtmdW5jcyBieSBuYW1lIGZvciBpbXByb3ZlZCB2bWxpbnV4Lmggc3RhYmlsaXR5ICAqL1xudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmM6NTQ4Olx0cXNvcnRfcihrZnVuY3MuZWxlbXMsIGtmdW5jcy5jbnQsIHNpemVvZigqa2Z1bmNzLmVsZW1zKSwgY21wX2tmdW5jcywgKHZvaWQgKilidGYpO1xudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMtNTQ5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2Z1bmNzLmNudDsgaSYjNDM7JiM0MzspIHtcbi0tXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jPTE1MzU9c3RhdGljIGludCBzb3J0X2J0Zl9ieV9uYW1lKHN0cnVjdCBidGYgKmJ0Zilcbi0tXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jLTE1NTktXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jOjE1NjA6XHRxc29ydF9yKHBlcm11dGVfaWRzLCBucl90eXBlcywgc2l6ZW9mKCpwZXJtdXRlX2lkcyksIGNtcF90eXBlX25hbWVzLFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYy0xNTYxLVx0XHRidGYpO1xuLS1cbnRvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmM9MzExPXN0YXRpYyBpbnQgc29ydF9yZWwoc3RydWN0IHJlbF9pbmZvICpyaSlcbi0tXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jLTMyMC1cdFx0cmktXHUwMDNlc29ydGVkW2ldID0gaTtcbnRvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmM6MzIxOlx0cXNvcnRfcihyaS1cdTAwM2Vzb3J0ZWQsIHJpLVx1MDAzZW5yX2VudHJpZXMsIHN6LCByZWxfY21wLCByaSk7XG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jLTMyMi1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgRnVuY3Rpb24gVXNhZ2UqKgoKT2theSwgc28gYHNvcnRfcmAgaXNuJiMzOTt0IHNvbWUgd2lkZXNwcmVhZCB1dGlsaXR5IGZ1bmN0aW9uLiBHb29kIHRvIGtub3cuIE15IGluaXRpYWwgaHVuY2ggdGhhdCBpdCB3YXMgZGVlcGx5IGluZ3JhaW5lZCBldmVyeXdoZXJlIGlzIHdyb25nLiBJdCYjMzk7cyBhY3R1YWxseSBjYWxsZWQgaW4gdGhlc2UgcmVsYXRpdmVseSBjb250YWluZWQsIHNwZWNpYWxpemVkIGFyZWFzOiBgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBgYnRmX3BhcnNlX2ZpZWxkc2AsIGFuZCBhIGZldyBvdGhlcnMuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogdWJpcXVpdG91cyBpcyBpbXBvcnRhbnQ7IGl0IG1lYW5zIGFueSBjaGFuZ2VzIG9yIGRlYnVnZ2luZyBlZmZvcnRzIHdpbGwgYmUgZm9jdXNlZC4KCkdpdmVuIHRoZSBjb250ZXh0LCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbmQgYGNoZWNrX2R1cF9pZHNgIHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXMgd2VsbCwgc2luY2UgdGhleSYjMzk7cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGNoZWNrIHdoYXQmIzM5O3MgbmVlZGVkIGZvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBzZWFyY2ggdG8gZGV0ZXJtaW5lIHdoZXJlIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGFjdHVhbGx5IGNvbXBpbGVkLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03OTg9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjc5OTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpO1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04MDAtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg1Nz1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NTg6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg1OS17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTc5Mz1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQzLVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg0NDpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQ1LVx0XHRlbHNlXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4MTk9c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzktXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzg0MDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MjktXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gQlBGIFRyYWNlIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgQlBGIHRyYWNpbmcgc2V0dXAgd29ya3MsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYW5kIGBjaGVja19kdXBfaWRzYCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZXMgMzgwMCB0byAzOTQwLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBgI2lmZGVmYCBjb25kaXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB3aWxsIHRlbGwgbWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgb3IgaW5jbHVkZWQgYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IHRoZSBiZWdpbm5pbmcsIGxpbmVzIDEgdG8gNTAsIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIGluY2x1ZGUgc3RhdGVtZW50cyBhcmUgbWFuYWdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0aXZlLiBHb3R0YSBiZSBlZmZpY2llbnQgaGVyZSwganVzdCBhIHF1aWNrIHNjYW4gdG8gb3JpZW50IG15c2VsZiwgdGhlbiBJIHdpbGwgZGl2ZSBkZWVwZXIgYXMgbmVlZGVkLiBJIGhvcGUgdGhpcyBnZXRzIG1lIHVwIHRvIHNwZWVkLCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc4MDpcdFx0fVxuMzc4MTpcdH1cbjM3ODI6XHQjZW5kaWZcbjM3ODM6XHRcbjM3ODQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG4zNzg1Olx0XHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcbjM3ODY6XHRcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxuMzc4NzpcdFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbjM3ODg6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbjM3ODk6XHRcdC5zaG93X2ZkaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvLFxuMzc5MDpcdCNlbmRpZlxuMzc5MTpcdH07XG4zNzkyOlx0XG4zNzkzOlx0c3RhdGljIGludCBpZHNfY21wX3IoY29uc3Qgdm9pZCAqcGEsIGNvbnN0IHZvaWQgKnBiLCBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxuMzc5NDpcdHtcbjM3OTU6XHRcdHUzMiBhID0gKih1MzIgKikgcGE7XG4zNzk2Olx0XHR1MzIgYiA9ICoodTMyICopIHBiO1xuMzc5NzpcdFxuMzc5ODpcdFx0cmV0dXJuIChhIFx1MDAzZSBiKSAtIChhIFx1MDAzYyBiKTtcbjM3OTk6XHR9XG4zODAwOlx0XG4zODAxOlx0c3RhdGljIHZvaWQgaWRzX3N3YXBfcih2b2lkICphLCB2b2lkICpiLCBpbnQgc2l6ZSBfX21heWJlX3VudXNlZCxcbjM4MDI6XHRcdFx0ICAgICAgIGNvbnN0IHZvaWQgKnByaXYgX19tYXliZV91bnVzZWQpXG4zODAzOlx0e1xuMzgwNDpcdFx0dTY0ICpjb29raWVfYSwgKmNvb2tpZV9iLCAqY29va2llcztcbjM4MDU6XHRcdHUzMiAqaWRfYSA9IGEsICppZF9iID0gYiwgKmlkcztcbjM4MDY6XHRcdHZvaWQgKipkYXRhID0gKHZvaWQgKiopIHByaXY7XG4zODA3Olx0XG4zODA4Olx0XHRpZHMgICAgID0gZGF0YVswXTtcbjM4MDk6XHRcdGNvb2tpZXMgPSBkYXRhWzFdO1xuMzgxMDpcdFxuMzgxMTpcdFx0aWYgKGNvb2tpZXMpIHtcbjM4MTI6XHRcdFx0Y29va2llX2EgPSBjb29raWVzICYjNDM7IChpZF9hIC0gaWRzKTtcbjM4MTM6XHRcdFx0Y29va2llX2IgPSBjb29raWVzICYjNDM7IChpZF9iIC0gaWRzKTtcbjM4MTQ6XHRcdFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XG4zODE1Olx0XHR9XG4zODE2Olx0XHRzd2FwKCppZF9hLCAqaWRfYik7XG4zODE3Olx0fVxuMzgxODpcdFxuMzgxOTpcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuMzgyMDpcdHtcbjM4MjE6XHRcdHZvaWQgKmRhdGFbMl0gPSB7IGlkcywgY29va2llcyB9O1xuMzgyMjpcdFx0aW50IGVyciA9IDA7XG4zODIzOlx0XG4zODI0Olx0XHQvKlxuMzgyNTpcdFx0ICogU29ydCBpZHMgYXJyYXkgKHRvZ2V0aGVyIHdpdGggY29va2llcyBhcnJheSBpZiBkZWZpbmVkKVxuMzgyNjpcdFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xuMzgyNzpcdFx0ICogYXJlIGxlZnQgc29ydGVkLlxuMzgyODpcdFx0ICovXG4zODI5Olx0XHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xuMzgzMDpcdFxuMzgzMTpcdFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbjM4MzI6XHRcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG4zODMzOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjM4MzQ6XHRcdFx0XHRicmVhaztcbjM4MzU6XHRcdFx0fVxuMzgzNjpcdFx0fVxuMzgzNzpcdFx0cmV0dXJuIGVycjtcbjM4Mzg6XHR9XG4zODM5Olx0XG4zODQwOlx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzg0MTpcdHtcbjM4NDI6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcbjM4NDM6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcbjM4NDQ6XHRcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XG4zODQ1Olx0XHR1MzIgY250LCAqaWRzID0gTlVMTDtcbjM4NDY6XHRcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xuMzg0NzpcdFx0dTY0ICpjb29raWVzID0gTlVMTDtcbjM4NDg6XHRcdHUzMiBfX3VzZXIgKnVpZHM7XG4zODQ5Olx0XHRpbnQgZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU3OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOgoKKipEaXZpbmcgaW50byBgYnBmX3RyYWNlLmNgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGdyYWIgdGhhdCBNYWtlZmlsZSBhbmQgcG9rZSBhcm91bmQgdGhlIGAjaWZkZWZgIGJsb2NrcyB3aXRoaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AsIGVzcGVjaWFsbHkgYXMgdGhleSByZWxhdGUgdG8gYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBmZXcgcmVhc29ucyBmb3IgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uOiBJdCBjb3VsZCBiZSBhYm91dCBrZXJuZWwgdmVyc2lvbiBzdXBwb3J0LCBwZXJoYXBzIHRoaXMgaXMgYSBuZXdlciBhZGRpdGlvbjsgbWF5YmUgdGhlcmUmIzM5O3MgYW4gb3B0aW9uIGZsYWcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGR1cmluZyBjb21waWxhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5OyBwb3NzaWJseSBzb21lIGRlcGVuZGVuY2llcyBuZWVkIHRvIGJlIHByZXNlbnQgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIG9yIGlmIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXRoIHRvIGVuYWJsZSBpdC4gVGhpcyB3aWxsIGdyZWF0bHkgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN0YWJpbGl0eSBhbmQgcG9ydGFiaWxpdHkgb2YgYW55IGNvZGUgSSB3cml0ZSBsZXZlcmFnaW5nIGl0LiBJJiMzOTttIGtlZW4gdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIGxvZ2ljIHNvIEkga25vdyB3aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgZm9yIHN1Y2Nlc3NmdWwgYnVpbGRzLiBTbywgSSBuZWVkIHRoZSBNYWtlZmlsZSBhbmQgdGhlIHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBicm9hZGVyIEJQRiB0cmFjaW5nIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2UubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBicGZfdHJhY2UuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIHRoZSBrZXJuZWwgdHJhY2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBsaW5lcyAzNzgwIGFuZCAzOTIwIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgZmFjdCB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGAjaWZkZWZgcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHksIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBtaWdodCBub3QgYWx3YXlzIGJlIGF2YWlsYWJsZS4KCktub3dpbmcgdGhlIGtlcm5lbCwgSSBjYW4gYW50aWNpcGF0ZSBhIGZldyBwb3NzaWJpbGl0aWVzLiBJdCBjb3VsZCBiZSB0aWVkIHRvIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiAobGlrZSBvbmUgcmVsYXRpbmcgdG8gQlBGIG9yIHRyYWNpbmcgZmVhdHVyZXMpLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGV4cGVyaW1lbnRhbCBvciBpbnRlcm5hbCBmbGFnLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwb3J0YWJpbGl0eSBhbmQgZmVhdHVyZSBzZXQgb2YgYW55IEJQRi1iYXNlZCB0cmFjaW5nIGFwcGxpY2F0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBvciBhbmFseXppbmcuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIHRvIGF2b2lkIGFueSB1bmZvcmVzZWVuIHJ1bnRpbWUgZXJyb3JzLiBTbywgbGV0JiMzOTtzIGdldCB0aG9zZSBsaW5lcyBvcGVuIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc1MDpcdFxuMzc1MTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjM3NTI6XHRcdH1cbjM3NTM6XHRcbjM3NTQ6XHRcdHJldHVybiBlcnI7XG4zNzU1Olx0fVxuMzc1NjpcdFxuMzc1NzpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuMzc1ODpcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbjM3NTk6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbjM3NjA6XHR7XG4zNzYxOlx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4zNzYyOlx0XHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4zNzYzOlx0XHRib29sIGhhc19jb29raWVzID0gISF0cl9saW5rLVx1MDAzZWNvb2tpZXM7XG4zNzY0Olx0XG4zNzY1Olx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7YXR0YWNoX3R5cGU6XFx0JXVcXG5cJiMzNDssIHRyX2xpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4zNzY2Olx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7Y250OlxcdCV1XFxuXCYjMzQ7LCB0cl9saW5rLVx1MDAzZW5vZGVzX2NudCk7XG4zNzY3Olx0XG4zNzY4Olx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7JXNcXHQgJXNcXHQgJXNcXHQgJXNcXG5cJiMzNDssIFwmIzM0O29iai1pZFwmIzM0OywgXCYjMzQ7YnRmLWlkXCYjMzQ7LCBcJiMzNDtjb29raWVcJiMzNDssIFwmIzM0O2Z1bmNcJiMzNDspO1xuMzc2OTpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRyX2xpbmstXHUwMDNlbm9kZXNfY250OyBpJiM0MzsmIzQzOykge1xuMzc3MDpcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcdTAwMjZ0cl9saW5rLVx1MDAzZW5vZGVzW2ldO1xuMzc3MTpcdFx0XHR1MzIgYnRmX2lkLCBvYmpfaWQ7XG4zNzcyOlx0XG4zNzczOlx0XHRcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXHUwMDNldHJhbXBvbGluZS1cdTAwM2VrZXksIFx1MDAyNm9ial9pZCwgXHUwMDI2YnRmX2lkKTtcbjM3NzQ6XHRcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyV1XFx0ICV1XFx0ICVsbHVcXHQgJXBTXFxuXCYjMzQ7LFxuMzc3NTpcdFx0XHRcdCAgIG9ial9pZCwgYnRmX2lkLFxuMzc3NjpcdFx0XHRcdCAgIGhhc19jb29raWVzID8gdHJfbGluay1cdTAwM2Vjb29raWVzW2ldIDogMCxcbjM3Nzc6XHRcdFx0XHQgICAodm9pZCAqKSBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLVx1MDAzZWlwKTtcbjM3Nzg6XHRcbjM3Nzk6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4zNzgwOlx0XHR9XG4zNzgxOlx0fVxuMzc4MjpcdCNlbmRpZlxuMzc4MzpcdFxuMzc4NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcbjM3ODU6XHRcdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxuMzc4NjpcdFx0LmRlYWxsb2NfZGVmZXJyZWQgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2MsXG4zNzg3Olx0XHQuZmlsbF9saW5rX2luZm8gPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxuMzc4ODpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuMzc4OTpcdFx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVHJhY2UgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgb2YgdGhlIGtlcm5lbCB0cmFjaW5nIGNvZGUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgdGhlcmUgd2VyZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgaGFuZGxlZCBhcm91bmQgbGluZSAzOTIwIHRvIDM5NDUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgcGFydGljdWxhciBibG9jayBvZiBjb2RlLCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZy4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTIwOlx0ZXJyb3I6XG4zOTIxOlx0XHRrdmZyZWUoZmV4aXRzKTtcbjM5MjI6XHRcdGt2ZnJlZShjb29raWVzKTtcbjM5MjM6XHRcdGt2ZnJlZShpZHMpO1xuMzkyNDpcdFx0a3ZmcmVlKGxpbmspO1xuMzkyNTpcdFx0cmV0dXJuIGVycjtcbjM5MjY6XHR9XG4zOTI3Olx0XG4zOTI4Olx0I2Vsc2VcbjM5Mjk6XHRcbjM5MzA6XHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4zOTMxOlx0e1xuMzkzMjpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMzkzMzpcdH1cbjM5MzQ6XHRcbjM5MzU6XHQjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTIFx1MDAyNlx1MDAyNiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgQ29uZGl0aW9uYWwgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGJsb2NrIG9mIGNvZGUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBgI2Vsc2VgIHN0YXRlbWVudCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYCNpZmAuIEkgbmVlZCB0byB2aXN1YWxseSBwYXJzZSB0aGlzIHF1aWNrbHksIGFuZCBJIGtub3cgSSBjYW4mIzM5O3QganVzdCBzY2FuIGZyb20gdGhlIGAjZWxzZWAgdXAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBmaW5kIHRoZSBzdGFydCBvZiB0aGUgYCNpZmAgYmxvY2suIEl0IGNvdWxkIGJlIG5lc3RlZCBwcmV0dHkgZGVlcGx5LCBvciBldmVuIGluIGEgbWFjcm8sIHNvIGl0JiMzOTtzIGJlc3QgdG8gdHJhY2sgaXQgZG93biBwcmVjaXNlbHkuIFRoZW4sIEkgY2FuIHN0YXJ0IHRvIGZvcm0gYSB3b3JraW5nIHRoZW9yeSBpbiBteSBoZWFkIGFib3V0IHRoZSBwb3NzaWJsZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aGlzIHNlY3Rpb24gYW5kIHdoZXJlIGVhY2ggYnJhbmNoIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzY4MD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODEtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4MjojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODMtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zOTMwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzNC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTM1OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2IENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA3NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgcmVsZXZhbnQgdG8gQlBGLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIGluIGEgd2F5IHRoYXQgaW1wYWN0cyB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGV4cGVjdGluZy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIG9wdGlvbnMgY2FuIGJlIGNvbXBsZXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBnb2luZyB0byBpbXBhY3QgQlBGJiMzOTtzIGJlaGF2aW91ci4gSSB3aWxsIHN0YXJ0IGJ5IHF1ZXJ5aW5nIHRoZSBrZXJuZWwgY29uZmlnIGFuZCBsb29raW5nIGZvciB0aG9zZSBzcGVjaWZpYyBzeW1ib2xzLiBUaGlzIGlzIGEgY3JpdGljYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBzdGFuZCBvbiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9FVkVOVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9ODUxPWNvbmZpZyBFUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODY0LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODY1OmNvbmZpZyBCUEZfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NjYtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4NjUuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHNwZWNpZmljIGluIHRoYXQgYXJlYSBvZiB0aGUgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIGRyYXdpbmcgbXkgYXR0ZW50aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciB0cmFjaW5nIGZlYXR1cmUgb3Igb3B0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0IG9uY2UgSSYjMzk7bSB0aGVyZTsgSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHN5bWJvbCwgZGVwZW5kZW5jeSwgb3IgYSBjb25kaXRpb25hbCB0aGF0IEkgaGF2ZSBleHBlcmllbmNlIGluIG1hbmFnaW5nLiBJIGFtIGhvcGluZyB0byBnZXQgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIGEgcGFydGljdWxhciB0cmFjaW5nIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XHQgIGV2ZW50cy4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXQgd2hhdCBmaWVsZHMgYXJlIHJlY29yZGVkIGluXG4gODYxOlx0XHQgIGFuIGV2ZW50IG9yIGV2ZW4gZGVyZWZlcmVuY2UgYSBmaWVsZCBvZiBhbiBldmVudC4gSXQgY2FuXG4gODYyOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODYzOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NjQ6XHRcbiA4NjU6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg2NjpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg2NzpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4Njg6XHRcdGJvb2xcbiA4Njk6XHRcdGRlZmF1bHQgeVxuIDg3MDpcdFx0aGVscFxuIDg3MTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NzI6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODczOlx0XG4gODc0Olx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODc1Olx0XHRkZWZfYm9vbCBuXG4gODc2Olx0XG4gODc3Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg3ODpcdFx0ZGVmX2Jvb2wgblxuIDg3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg2OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydCBhbmQgSSYjMzk7bSAmIzM0O3RoaW5raW5nJiMzNDsgaXQ6CgoqKkNoZWNraW5nIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGlzIGZsYWcgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjdXJyZW50IGtlcm5lbCBlbnZpcm9ubWVudC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBsaWtlbHkgb24gcGVyZm9ybWFuY2UgaW1wYWN0IGFuZCB0aGUgaW50cmljYWNpZXMgb2YgZGlyZWN0IGNhbGwgcGF0Y2hpbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgY29uc2lkZXJhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmVhdHVyZS4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBhIHBhcnRpY3VsYXIgY29kZSBwYXRoPyBXaGF0IGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciB0cmFjaW5nIG1lY2hhbmlzbXMgb3Igc2VjdXJpdHkgZmVhdHVyZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCB0aGVuIGp1bXAgdG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGNvbnRyb2wgZmxvdy4gQW55IHJlY2VudCBwYXRjaGVzIG9yIGRpc2N1c3Npb25zIGFyb3VuZCB0aGlzIGZlYXR1cmUgdGhhdCBtaWdodCBwcm92aWRlIGluc2lnaHQgaW50byBlZGdlIGNhc2VzPyBJIGhvcGUgdGhlcmUgYXJlIHVzZWZ1bCBjb21tZW50cy4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjE0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVHJhY2UgSW5mcmFzdHJ1Y3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBga2VybmVsL3RyYWNlL0tjb25maWdgLCBhbmQgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8ganVtcCB0byB0aGUgdmljaW5pdHkgb2YgbGluZSAzMjUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc2VjdGlvbiBvZiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIHJlbGV2YW50IGZlYXR1cmUgZmxhZ3MsIHBlcmhhcHMgb3B0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIHRyYWNlcG9pbnRzIG9yIGV2ZW50IHR5cGVzLCBvciBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGpvZyBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBwYXJ0aWN1bGFyIHBpZWNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdFxuIDMyMTpcdFx0ICBUaGlzIHdheSBhIENPTkZJR19GVU5DVElPTl9UUkFDRVIga2VybmVsIGlzIHNsaWdodGx5IGxhcmdlciwgYnV0XG4gMzIyOlx0XHQgIG90aGVyd2lzZSBoYXMgbmF0aXZlIHBlcmZvcm1hbmNlIGFzIGxvbmcgYXMgbm8gdHJhY2luZyBpcyBhY3RpdmUuXG4gMzIzOlx0XG4gMzI0Olx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuIDMyNTpcdFx0ZGVmX2Jvb2wgeVxuIDMyNjpcdFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRVxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuIDMyODpcdFxuIDMyOTpcdGNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xuIDMzMDpcdFx0ZGVmX2Jvb2wgeVxuIDMzMTpcdFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1MgfHwgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG4gMzMyOlx0XHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xuIDMzNTpcdFx0ZGVmX2Jvb2wgeVxuIDMzNjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcbiAzMzc6XHRcbiAzMzg6XHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG4gMzM5Olx0XHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzUyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgQlBGIEV2ZW50aW5nIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBCUEZfRVZFTlRTIGFyZSBzZXQgdXAsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGl0IGxldmVyYWdlcyBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLiBNYWtlcyBzZW5zZSDigJMgd2UmIzM5O3JlIGhvb2tpbmcgaW50byBzeXNjYWxscywgcHJvYmluZyBrZXJuZWwgZnVuY3Rpb25zLCBhbmQgdXNpbmcgdGhlIHBlcmYgaW5mcmFzdHJ1Y3R1cmUuIEFuZCwgb2YgY291cnNlLCBgRFlOQU1JQ19GVFJBQ0VgIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHRoYXQgZGVlcGVyIGluc3RydW1lbnRhdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaWYgYHNvcnQub2AgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gTGV0JiMzOTtzIHF1aWNrbHkgcGVlayBhdCB0aGUgYGxpYi9NYWtlZmlsZWAgYW5kIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvcnQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGU9NTM9Q09OVEVYVF9BTkFMWVNJU19yaGFzaHRhYmxlLm8gOj0geVxubGliL01ha2VmaWxlLTU0LVxubGliL01ha2VmaWxlOjU1Om9iai15ICYjNDM7PSBiY2QubyBzb3J0Lm8gcGFyc2VyLm8gZGVidWdfbG9ja3MubyByYW5kb20zMi5vIFxcXG5saWIvTWFrZWZpbGUtNTYtXHQgYnVzdF9zcGlubG9ja3MubyBrYXNwcmludGYubyBiaXRtYXAubyBzY2F0dGVybGlzdC5vIFxcXG5saWIvTWFrZWZpbGU6NTc6XHQgbGlzdF9zb3J0Lm8gdXVpZC5vIGlvdl9pdGVyLm8gY2x6X2N0ei5vIFxcXG5saWIvTWFrZWZpbGUtNTgtXHQgYnNlYXJjaC5vIGZpbmRfYml0Lm8gbGxpc3QubyBsd3EubyBtZW13ZWlnaHQubyBrZmlmby5vIFxcXG4tLVxubGliL2dyb3VwX2NwdXMuYz00ODg9c3RydWN0IGNwdW1hc2sgKmdyb3VwX2NwdXNfZXZlbmx5KHVuc2lnbmVkIGludCBudW1ncnBzLCB1bnNpZ25lZCBpbnQgKm51bW1hc2tzKVxuLS1cbmxpYi9ncm91cF9jcHVzLmMtNTIzLVx0ICogQ1BVIGlzIGhhbmRsZWQgaW4gdGhlIDFzdCBvciAybmQgc3RhZ2UsIGFuZCBlaXRoZXIgd2F5IGlzIGNvcnJlY3RcbmxpYi9ncm91cF9jcHVzLmM6NTI0Olx0ICogZnJvbSBBUEkgdXNlciB2aWV3cG9pbnQgc2luY2UgMi1zdGFnZSBzcHJlYWQgaXMgc29ydCBvZlxubGliL2dyb3VwX2NwdXMuYy01MjUtXHQgKiBvcHRpbWl6YXRpb24uXG4tLVxubGliL29iamFnZy5jPTYwNz1jb25zdCBzdHJ1Y3Qgb2JqYWdnX3N0YXRzICpvYmphZ2dfc3RhdHNfZ2V0KHN0cnVjdCBvYmphZ2cgKm9iamFnZylcbi0tXG5saWIvb2JqYWdnLmMtNjMwLVxubGliL29iamFnZy5jOjYzMTpcdHNvcnQob2JqYWdnX3N0YXRzLVx1MDAzZXN0YXRzX2luZm8sIG9iamFnZ19zdGF0cy1cdTAwM2VzdGF0c19pbmZvX2NvdW50LFxubGliL29iamFnZy5jLTYzMi1cdCAgICAgc2l6ZW9mKHN0cnVjdCBvYmphZ2dfb2JqX3N0YXRzX2luZm8pLFxuLS1cbmxpYi9vYmphZ2cuYz0xMDA3PW9iamFnZ19oaW50c19zdGF0c19nZXQoc3RydWN0IG9iamFnZ19oaW50cyAqb2JqYWdnX2hpbnRzKVxuLS1cbmxpYi9vYmphZ2cuYy0xMDI3LVxubGliL29iamFnZy5jOjEwMjg6XHRzb3J0KG9iamFnZ19zdGF0cy1cdTAwM2VzdGF0c19pbmZvLCBvYmphZ2dfc3RhdHMtXHUwMDNlc3RhdHNfaW5mb19jb3VudCxcbmxpYi9vYmphZ2cuYy0xMDI5LVx0ICAgICBzaXplb2Yoc3RydWN0IG9iamFnZ19vYmpfc3RhdHNfaW5mbyksXG4tLVxubGliL3NvcnQuYz0xODI9c3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXG4tLVxubGliL3NvcnQuYy0xOTctICpcbmxpYi9zb3J0LmM6MTk4OiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxubGliL3NvcnQuYy0xOTktICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuLS1cbmxpYi90ZXN0X3Bhcm1hbi5jPTExMz1zdGF0aWMgdm9pZCB0ZXN0X3Bhcm1hbl9tb3ZlKHZvaWQgKnByaXYsIHVuc2lnbmVkIGxvbmcgZnJvbV9pbmRleCxcbi0tXG5saWIvdGVzdF9wYXJtYW4uYy0xMjMtXG5saWIvdGVzdF9wYXJtYW4uYzoxMjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwYXJtYW5fb3BzIHRlc3RfcGFybWFuX2xzb3J0X29wcyA9IHtcbmxpYi90ZXN0X3Bhcm1hbi5jLTEyNS1cdC5iYXNlX2NvdW50XHQ9IFRFU1RfUEFSTUFOX0JBU0VfQ09VTlQsXG4tLVxubGliL3Rlc3RfcGFybWFuLmM9MzYwPXN0YXRpYyBpbnQgdGVzdF9wYXJtYW5fbHNvcnQodm9pZClcbi0tXG5saWIvdGVzdF9wYXJtYW4uYy0zNjQtXG5saWIvdGVzdF9wYXJtYW4uYzozNjU6XHR0ZXN0X3Bhcm1hbiA9IHRlc3RfcGFybWFuX2NyZWF0ZShcdTAwMjZ0ZXN0X3Bhcm1hbl9sc29ydF9vcHMpO1xubGliL3Rlc3RfcGFybWFuLmMtMzY2LVx0aWYgKElTX0VSUih0ZXN0X3Bhcm1hbikpXG4tLVxubGliL3Rlc3RzL01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19LRklGT19LVU5JVF9URVNUKSAmIzQzOz0ga2ZpZm9fa3VuaXQub1xubGliL3Rlc3RzL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19URVNUX0xJU1RfU09SVCkgJiM0Mzs9IHRlc3RfbGlzdF9zb3J0Lm9cbmxpYi90ZXN0cy9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTElORUFSX1JBTkdFU19URVNUKSAmIzQzOz0gdGVzdF9saW5lYXJfcmFuZ2VzLm9cbi0tXG5saWIvdGVzdHMvTWFrZWZpbGU9NTA9b2JqLSQoQ09ORklHX1NMVUJfS1VOSVRfVEVTVCkgJiM0Mzs9IHNsdWJfa3VuaXQub1xubGliL3Rlc3RzL01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19URVNUX1NPUlQpICYjNDM7PSB0ZXN0X3NvcnQub1xubGliL3Rlc3RzL01ha2VmaWxlLTUyLUNGTEFHU19zdGFja2luaXRfa3VuaXQubyAmIzQzOz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgc3dpdGNoLXVucmVhY2hhYmxlKVxuLS1cbmxpYi92c3ByaW50Zi5jPTM0NjI9aW50IHZzc2NhbmYoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncylcbi0tXG5saWIvdnNwcmludGYuYy0zNjU5LVxubGliL3ZzcHJpbnRmLmM6MzY2MDpcdFx0LyogaGF2ZSBzb21lIHNvcnQgb2YgaW50ZWdlciBjb252ZXJzaW9uLlxubGliL3ZzcHJpbnRmLmMtMzY2MS1cdFx0ICogZmlyc3QsIHNraXAgd2hpdGUgc3BhY2UgaW4gYnVmZmVyLlxuLS1cbmxpYi96c3RkL2NvbXByZXNzL2h1Zl9jb21wcmVzcy5jPTU4OT1zdGF0aWMgdm9pZCBIVUZfc2ltcGxlUXVpY2tTb3J0KG5vZGVFbHQgYXJyW10sIGludCBsb3csIGludCBoaWdoKSB7XG4tLVxubGliL3pzdGQvY29tcHJlc3MvaHVmX2NvbXByZXNzLmMtNjA5LSAqIFNvcnRzIHRoZSBzeW1ib2xzIFswLCBtYXhTeW1ib2xWYWx1ZV0gYnkgY291bnRbc3ltYm9sXSBpbiBkZWNyZWFzaW5nIG9yZGVyLlxubGliL3pzdGQvY29tcHJlc3MvaHVmX2NvbXByZXNzLmM6NjEwOiAqIFRoaXMgaXMgYSB0eXBpY2FsIGJ1Y2tldCBzb3J0aW5nIHN0cmF0ZWd5IHRoYXQgdXNlcyBlaXRoZXIgcXVpY2tzb3J0IG9yIGluc2VydGlvbiBzb3J0IHRvIHNvcnQgZWFjaCBidWNrZXQuXG5saWIvenN0ZC9jb21wcmVzcy9odWZfY29tcHJlc3MuYy02MTEtICpcbi0tXG5saWIvenN0ZC9jb21wcmVzcy96c3RkX2xhenkuYz0zMD12b2lkIFpTVERfdXBkYXRlRFVCVChaU1REX01hdGNoU3RhdGVfdCogbXMsXG4tLVxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmMtNjktLyogWlNURF9pbnNlcnREVUJUMSgpIDpcbmxpYi96c3RkL2NvbXByZXNzL3pzdGRfbGF6eS5jOjcwOiAqICBzb3J0IG9uZSBhbHJlYWR5IGluc2VydGVkIGJ1dCB1bnNvcnRlZCBwb3NpdGlvblxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmMtNzEtICogIGFzc3VtcHRpb24gOiBjdXJyIFx1MDAzZT0gYnRsb3cgPT0gKGN1cnIgLSBidG1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzc5CgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIEkgc2VlIHRoYXQgYGxpYi9zb3J0Lm9gIGlzIGJlaW5nIGJ1aWx0IGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHkg4oCTIGl0JiMzOTtzIGFuIGBvYmoteWAgaW4gdGhlIGBsaWIvTWFrZWZpbGVgLiBUaGUgQlBGIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgYXMgZXhwZWN0ZWQsIHJlbGllcyBvbiBzZXZlcmFsIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGVuYWJsZWQ6IGBDT05GSUdfQlBGX0VWRU5UU2AsIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kIGBDT05GSUdfS1BST0JFX0VWRU5UU2AsIGFtb25nIG90aGVycy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aG9zZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMgYW5kIGNvbmZpZ3MgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBzb3J0X3JgIHdpdGhpbiBgbGliL3NvcnQuY2AsIGFuZCBib3RoIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgY2hlY2tfZHVwX2lkc2AgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfRVZFTlRTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCwgYXMgSSBhbHJlYWR5IHN1c3BlY3RlZC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyB0YWtpbmcgb3V0IGBzb3J0X25vbmF0b21pY2AgYW5kIGBzb3J0X3Jfbm9uYXRvbWljYCwgc2ltcGxpZnlpbmcgYGxpYi9zb3J0LmNgIGJ5IGltcGxlbWVudGluZyBgc29ydF9yYCBkaXJlY3RseSwgYW5kIHJlbW92aW5nIHRob3NlIHNjaGVkdWxpbmcgcG9pbnQgY2hlY2tzLiBJdCB0aGVuIHVwZGF0ZXMgdGhlIGBjaGVja19kdXBfaWRzKClgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCwgd2hpY2ggaXMgdGhlIG9ubHkgY2FsbGVyLCB0byB1c2UgdGhlIHNpbXBsaWZpZWQgYHNvcnRfcigpYCBmdW5jdGlvbi4gVGhpcyBpcyB0b3VjaGluZyBib3RoIGNvcmUgbGlicmFyeSBzb3J0aW5nIGxvZ2ljIGFuZCB0aGUgQlBGIHRyYWNlIG11bHRpLWF0dGFjaCBoYW5kbGluZywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSYjMzk7dmUgcmV2aWV3ZWQgZXZlcnl0aGluZyBtZXRpY3Vsb3VzbHksIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvcnRfciYjMzQ7LAogICAgJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGtlcm5lbCYjMzk7cyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb3J0X3ImIzM0OywKICAgICYjMzQ7Y2hlY2tfZHVwX2lkcyYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwmIzM5O3Mgc29ydCBsaWJyYXJ5IGJ5IGVsaW1pbmF0aW5nIHNvcnRfbm9uYXRvbWljIGFuZCBzb3J0X3Jfbm9uYXRvbWljIChhbmQgdGhlIHVuZGVybHlpbmcgY29uZF9yZXNjaGVkIGxvb3AgbG9naWMpLCByZWltcGxlbWVudGluZyBzb3J0X3IgZGlyZWN0bHkuIEl0IGFsc28gbW9kaWZpZXMga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIChjaGVja19kdXBfaWRzKSB0byBpbnZva2Ugc29ydF9yIGRpcmVjdGx5IGluc3RlYWQgb2Ygc29ydF9yX25vbmF0b21pYy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiByZWFjaGFibGUgY29yZSBsaWJyYXJ5IGFuZCBCUEYgdHJhY2luZyBzdWJzeXN0ZW1zIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGwgaW50ZXJmYWNlcyAoZS5nLiwgQlBGX0xJTktfQ1JFQVRFIGZvciBtdWx0aS10cmFjaW5nKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxOTowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ydC5oIGIvaW5jbHVkZS9saW51eC9zb3J0LmgKaW5kZXggYzAxZWY4MDRhMGViMi4uODcxNzc1OTc4YWYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zb3J0LmgKQEAgLTIzLDE1ICYjNDM7MjMsNCBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJICBjbXBfZnVuY190IGNtcF9mdW5jLAogCSAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKTsKIAotLyogVmVyc2lvbnMgdGhhdCBwZXJpb2RpY2FsbHkgY2FsbCBjb25kX3Jlc2NoZWQoKTogKi8KLQotdm9pZCBzb3J0X3Jfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCQkgICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsCi0JCSAgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLAotCQkgICAgICBjb25zdCB2b2lkICpwcml2KTsKLQotdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKLQkJICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCi0JCSAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwppbmRleCAyOTI2MDk1MWFhODcxLi4xZDdlNzNkZGJhZmJlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCkBAIC0zODI2LDcgJiM0MzszODI2LDcgQEAgc3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpCiAJICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5cwogCSAqIGFyZSBsZWZ0IHNvcnRlZC4KIAkgKi8KLQlzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTsKJiM0MzsJc29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTsKIAogCWZvciAoaW50IGkgPSAxOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewogCQlpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHsKZGlmZiAtLWdpdCBhL2xpYi9zb3J0LmMgYi9saWIvc29ydC5jCmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0Ci0tLSBhL2xpYi9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3NvcnQuYwpAQCAtMTg2LDEzICYjNDM7MTg2LDM2IEBAIHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKQogCXJldHVybiBpIC8gMjsKIH0KIAotI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7Ci0KLXN0YXRpYyB2b2lkIF9fc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCQkgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYywKLQkJICAgICBjb25zdCB2b2lkICpwcml2LAotCQkgICAgIGJvb2wgbWF5X3NjaGVkdWxlKQomIzQzOy8qKgomIzQzOyAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHMKJiM0MzsgKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnQKJiM0MzsgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHMKJiM0MzsgKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnQKJiM0MzsgKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgomIzQzOyAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMCiYjNDM7ICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGUKJiM0MzsgKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5CiYjNDM7ICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXAKJiM0MzsgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWwKJiM0MzsgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzoKJiM0MzsgKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2YKJiM0MzsgKiBjbXBfZnVuYyhiLCBhKS4KJiM0MzsgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgJmx0Oz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgJmx0Oz0gMCwgdGhlbgomIzQzOyAqIGNtcF9mdW5jKGEsIGMpICZsdDs9IDAuCiYjNDM7ICoKJiM0MzsgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlCiYjNDM7ICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGUKJiM0MzsgKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2UKJiM0MzsgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLgomIzQzOyAqLwomIzQzO3ZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAomIzQzOwkgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLAomIzQzOwkgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCiYjNDM7CSAgICBjb25zdCB2b2lkICpwcml2KQogewogCS8qIHByZS1zY2FsZSBjb3VudGVycyBmb3IgcGVyZm9ybWFuY2UgKi8KIAlzaXplX3QgbiA9IG51bSAqIHNpemUsIGEgPSAobnVtLzIpICogc2l6ZTsKQEAgLTI2Myw5ICYjNDM7Mjg2LDYgQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJCQliID0gcGFyZW50KGIsIGxzYml0LCBzaXplKTsKIAkJCWRvX3N3YXAoYmFzZSAmIzQzOyBiLCBiYXNlICYjNDM7IGMsIHNpemUsIHN3YXBfZnVuYywgcHJpdik7CiAJCX0KLQotCQlpZiAobWF5X3NjaGVkdWxlKQotCQkJY29uZF9yZXNjaGVkKCk7CiAJfQogCiAJbiAtPSBzaXplOwpAQCAtMjczLDYzICYjNDM7MjkzLDggQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJaWYgKG4gPT0gc2l6ZSAqIDIgJmFtcDsmYW1wOyBkb19jbXAoYmFzZSwgYmFzZSAmIzQzOyBzaXplLCBjbXBfZnVuYywgcHJpdikgJmd0OyAwKQogCQlkb19zd2FwKGJhc2UsIGJhc2UgJiM0Mzsgc2l6ZSwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTsKIH0KLQotLyoqCi0gKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzCi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnQKLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50cwotICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50Ci0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTEwKLSAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZQotICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeQotICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXAKLSAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci4KLSAqCi0gKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWwKLSAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOgotICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mCi0gKiBjbXBfZnVuYyhiLCBhKS4KLSAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSAmbHQ7PSAwIGFuZCBjbXBfZnVuYyhiLCBjKSAmbHQ7PSAwLCB0aGVuCi0gKiBjbXBfZnVuYyhhLCBjKSAmbHQ7PSAwLgotICoKLSAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGUKLSAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlCi0gKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2UKLSAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuCi0gKi8KLXZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCSAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsCi0JICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLAotCSAgICBjb25zdCB2b2lkICpwcml2KQotewotCV9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgY21wX2Z1bmMsIHN3YXBfZnVuYywgcHJpdiwgZmFsc2UpOwotfQogRVhQT1JUX1NZTUJPTChzb3J0X3IpOwogCi0vKioKLSAqIHNvcnRfcl9ub25hdG9taWMgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzLCB3aXRoIGNvbmRfcmVzY2hlZAotICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0Ci0gKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHMKLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudAotICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24KLSAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMCi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24KLSAqCi0gKiBTYW1lIGFzIHNvcnRfciwgYnV0IHByZWZlcnJlZCBmb3IgbGFyZ2VyIGFycmF5cyBhcyBpdCBkb2VzIGEgcGVyaW9kaWMKLSAqIGNvbmRfcmVzY2hlZCgpLgotICovCi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCi0JCSAgICAgIGNvbnN0IHZvaWQgKnByaXYpCi17Ci0JX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCB0cnVlKTsKLX0KLUVYUE9SVF9TWU1CT0woc29ydF9yX25vbmF0b21pYyk7Ci0KIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCiAJICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpCkBAIC0zMzksMTkgJiM0MzszMDQsNiBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJCS5zd2FwID0gc3dhcF9mdW5jLAogCX07CiAKLQlyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgJmFtcDt3LCBmYWxzZSk7CiYjNDM7CXJldHVybiBzb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgJmFtcDt3KTsKIH0KIEVYUE9SVF9TWU1CT0woc29ydCk7Ci0KLXZvaWQgc29ydF9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICBjbXBfZnVuY190IGNtcF9mdW5jLAotCQkgICAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKQotewotCXN0cnVjdCB3cmFwcGVyIHcgPSB7Ci0JCS5jbXAgID0gY21wX2Z1bmMsCi0JCS5zd2FwID0gc3dhcF9mdW5jLAotCX07Ci0KLQlyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgJmFtcDt3LCB0cnVlKTsKLX0KLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L3NvcnQuaGAsIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLCBhbmQgYGxpYi9zb3J0LmNgLiBSaWdodCBhd2F5LCBJIGtub3cgdGhpcyBoYXMgdG8gZG8gd2l0aCBzb3J0aW5nIGFsZ29yaXRobXMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBjaGFuZ2VzIGFyZSB0aGUgcmVtb3ZhbCBvZiBgc29ydF9yX25vbmF0b21pY2AgYW5kIGBzb3J0X25vbmF0b21pY2AsIGFuZCB0aGUgcmVwbGFjZW1lbnQgb2YgYHNvcnRfcl9ub25hdG9taWNgIHdpdGggYHNvcnRfcmAgaW4gdGhlIEJQRiB0cmFjZSBjb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgYHNvcnRfcmAgaW4gdGhlIGxpYnJhcnkgaXMgc2ltcGxpZmllZCBieSBnZXR0aW5nIHJpZCBvZiB0aGUgYG1heV9zY2hlZHVsZWAgYW5kIGBjb25kX3Jlc2NoZWQoKWAgbG9naWMsIHdoaWNoIGFsc28gaW52b2x2ZWQgcmVtb3ZpbmcgdGhlIGBfbm9uYXRvbWljYCB2ZXJzaW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGVmZm9ydCBmb2N1c2VkIG9uIHJlbW92aW5nIHByZWVtcHRpb24gcG9pbnRzIHdpdGhpbiB0aGUgc29ydGluZyByb3V0aW5lcy4gVGhlIHBhdGNoIGlzIGdldHRpbmcgcmlkIG9mIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIGluIHRoZSBjb3JlIHNvcnQgZnVuY3Rpb25zLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBJdCYjMzk7cyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCwgaWYgYW55IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIG9yIHBvdGVudGlhbCBwYWRkaW5nIGxlYWtzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBhbmQgYmFzZWQgb24gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgaW50ZXJuYWxzLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9mIHRob3NlIHJlZCBmbGFncy4gVGhpcyBzZWVtcyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBmb2N1c2VkIG9uIHJlbW92aW5nIHNjaGVkdWxpbmcgcG9pbnRzLgoKSG93ZXZlciwgSSYjMzk7bSBub3QgZ29pbmcgdG8gYmUgKnRvbyogaGFzdHkuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBicGZfdHJhY2UuY2AgYW5kIGBsaWIvc29ydC5jYCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IHN1YnRsZSBpc3N1ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBsaW5lIDM4MjYgaW4gYGJwZl90cmFjZS5jYCBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGp1c3QgdG8gbWFrZSBzdXJlIG5vdGhpbmcgd2FzIG1pc3NlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhhdCBzcGVjaWZpYyBgc29ydF9yYCBjYWxsIGluIHRoZSBCUEYgdHJhY2UgZnVuY3Rpb25hbGl0eS4gV2l0aCBteSBleHBlcmllbmNlLCBJIGNhbiBzY2FuIHRoaXMgY29kZSBhbmQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvZGQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvciBhbnkgc2l0dWF0aW9ucyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBpbmFkdmVydGVudGx5IGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODAxPXN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MTgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzgxOTpzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODIwLXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODItXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzg4MzpcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFRyYWNlIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmlsZSByZWFkaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIEJQRiB0cmFjaW5nLiBMZXQgbWUgcHVsbCB1cCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDM4MDAgdG8gMzg0MC4gVGhhdCByZWdpb24gc2hvdWxkIGhvbGQgdGhlIGtleSwgb3IgYXQgbGVhc3QgYSBzaWduaWZpY2FudCBwaWVjZSwgcmVsYXRlZCB0byBob3cgZmlsZSByZWFkcyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiBCUEYgdHJhY2luZy4gSG9wZWZ1bGx5LCBJIGNhbiBwaW5wb2ludCB3aGVyZSB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcgZGl2ZXJnZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MDA6XHRcbjM4MDE6XHRzdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxuMzgwMjpcdFx0XHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcbjM4MDM6XHR7XG4zODA0Olx0XHR1NjQgKmNvb2tpZV9hLCAqY29va2llX2IsICpjb29raWVzO1xuMzgwNTpcdFx0dTMyICppZF9hID0gYSwgKmlkX2IgPSBiLCAqaWRzO1xuMzgwNjpcdFx0dm9pZCAqKmRhdGEgPSAodm9pZCAqKikgcHJpdjtcbjM4MDc6XHRcbjM4MDg6XHRcdGlkcyAgICAgPSBkYXRhWzBdO1xuMzgwOTpcdFx0Y29va2llcyA9IGRhdGFbMV07XG4zODEwOlx0XG4zODExOlx0XHRpZiAoY29va2llcykge1xuMzgxMjpcdFx0XHRjb29raWVfYSA9IGNvb2tpZXMgJiM0MzsgKGlkX2EgLSBpZHMpO1xuMzgxMzpcdFx0XHRjb29raWVfYiA9IGNvb2tpZXMgJiM0MzsgKGlkX2IgLSBpZHMpO1xuMzgxNDpcdFx0XHRzd2FwKCpjb29raWVfYSwgKmNvb2tpZV9iKTtcbjM4MTU6XHRcdH1cbjM4MTY6XHRcdHN3YXAoKmlkX2EsICppZF9iKTtcbjM4MTc6XHR9XG4zODE4Olx0XG4zODE5Olx0c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG4zODIwOlx0e1xuMzgyMTpcdFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XG4zODIyOlx0XHRpbnQgZXJyID0gMDtcbjM4MjM6XHRcbjM4MjQ6XHRcdC8qXG4zODI1Olx0XHQgKiBTb3J0IGlkcyBhcnJheSAodG9nZXRoZXIgd2l0aCBjb29raWVzIGFycmF5IGlmIGRlZmluZWQpXG4zODI2Olx0XHQgKiBhbmQgY2hlY2sgaXQgZm9yIGR1cGxpY2F0ZXMuIFRoZSBpZHMgYW5kIGNvb2tpZXMgYXJyYXlzXG4zODI3Olx0XHQgKiBhcmUgbGVmdCBzb3J0ZWQuXG4zODI4Olx0XHQgKi9cbjM4Mjk6XHRcdHNvcnRfcihpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4zODMwOlx0XG4zODMxOlx0XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzgzMjpcdFx0XHRpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHtcbjM4MzM6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzgzNDpcdFx0XHRcdGJyZWFrO1xuMzgzNTpcdFx0XHR9XG4zODM2Olx0XHR9XG4zODM3Olx0XHRyZXR1cm4gZXJyO1xuMzgzODpcdH1cbjM4Mzk6XHRcbjM4NDA6XHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4zODQxOlx0e1xuMzg0MjpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmsgPSBOVUxMO1xuMzg0MzpcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlICpmZXhpdHMgPSBOVUxMO1xuMzg0NDpcdFx0c3RydWN0IGJwZl9saW5rX3ByaW1lciBsaW5rX3ByaW1lcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMwoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ29uc2lkZXJhdGlvbnMgZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgdGhpcyBwYXRjaCBpcyBxdWl0ZSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGNsZWFuOyBiYXNpY2FsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgc29ydF9ub25hdG9taWNgIGFuZCBgc29ydF9yX25vbmF0b21pY2AgdmFyaWFudHMgYW5kIGRpdGNoaW5nIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIHdpdGhpbiB0aG9zZSBzb3J0aW5nIGxvb3BzLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIGRpcmVjdCBjYWxsIHRvIGBzb3J0X3JgIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHBvdGVudGlhbCBLTVNBTiBpbXBsaWNhdGlvbnMuCgpGaXJzdCwgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzPyBObywgZGVmaW5pdGVseSBub3QuIEkgY2FuIHF1aWNrbHkgcnVsZSB0aGF0IG91dDogbm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vdGhpbmcmIzM5O3MgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG5ldyBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgcHJlc2VudC4gSXQmIzM5O3Mgbm90IGNoYW5naW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhbnkgd2F5IHRoYXQgSSBjYW4gc2VlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IGl0IGNvdWxkIGludHJvZHVjZSBhbiBpbmZvLWxlYWsuIFNvLCBubywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZWFzb25pbmcgYSBiaXQgbW9yZSwgZHJhd2luZyB0aGUgY29udHJhc3Qgd2l0aCBLQVNBTi4gV2UmIzM5O3JlIHRhbGtpbmcgS01TQU4gaGVyZSwgc28gbGV0JiMzOTtzIHJlY2FsbCB3aGF0IGl0IGRvZXMuIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSwgc2ltcGx5IHJlbW92ZXMgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbHMgaW4gdGhlIHNvcnRpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBkcm9wcyB0aGUgYHNvcnRfbm9uYXRvbWljYCBhbmQgYHNvcnRfcl9ub25hdG9taWNgIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyB0aGUgc2luZ2xlIGNhbGxzaXRlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIHRvIHVzZSBgc29ydF9yYC4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQuIFRoZSB1bmRlcmx5aW5nIGBzb3J0YCBhbmQgYHNvcnRfcmAgcm91dGluZXMgYXJlIGFscmVhZHkgd2VsbC10ZXN0ZWQuIEFueSBwb3RlbnRpYWwgc29ydGluZyBidWdzLCBsaWtlIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIEtNU0FOJiMzOTtzIHByb3ZpZGluZyBubyBhZGRpdGlvbmFsIHZhbHVlIGhlcmUuCgpSaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDI6NTUuMzI0MzA4ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyMjI1MTc2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gICAgXCJLUFJPQkVfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ydF9yXCIsXG4gICAgXCJjaGVja19kdXBfaWRzXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBwYWRkaW5nLCB1c2VyIGNvcGllcyAoY29weV90b191c2VyL3B1dF91c2VyKSwgb3IgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBhY2Nlc3MgYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUga2VybmVsJ3Mgc29ydCBsaWJyYXJ5IGJ5IGVsaW1pbmF0aW5nIHNvcnRfbm9uYXRvbWljIGFuZCBzb3J0X3Jfbm9uYXRvbWljIChhbmQgdGhlIHVuZGVybHlpbmcgY29uZF9yZXNjaGVkIGxvb3AgbG9naWMpLCByZWltcGxlbWVudGluZyBzb3J0X3IgZGlyZWN0bHkuIEl0IGFsc28gbW9kaWZpZXMga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIChjaGVja19kdXBfaWRzKSB0byBpbnZva2Ugc29ydF9yIGRpcmVjdGx5IGluc3RlYWQgb2Ygc29ydF9yX25vbmF0b21pYy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiByZWFjaGFibGUgY29yZSBsaWJyYXJ5IGFuZCBCUEYgdHJhY2luZyBzdWJzeXN0ZW1zIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGwgaW50ZXJmYWNlcyAoZS5nLiwgQlBGX0xJTktfQ1JFQVRFIGZvciBtdWx0aS10cmFjaW5nKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDI6NTUuMzI0MzE0MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDY2MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTk6MDI6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb3J0LmggYi9pbmNsdWRlL2xpbnV4L3NvcnQuaFxcbmluZGV4IGMwMWVmODA0YTBlYjIuLjg3MTc3NTk3OGFmMGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvcnQuaFxcbkBAIC0yMywxNSArMjMsNCBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXFxuIFxcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcXG4gXFx0ICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpO1xcbiBcXG4tLyogVmVyc2lvbnMgdGhhdCBwZXJpb2RpY2FsbHkgY2FsbCBjb25kX3Jlc2NoZWQoKTogKi9cXG4tXFxuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi1cXHRcXHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcXG4tXFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdik7XFxuLVxcbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbi1cXHRcXHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcXG4tXFx0XFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7XFxuLVxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuaW5kZXggMjkyNjA5NTFhYTg3MS4uMWQ3ZTczZGRiYWZiZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG5AQCAtMzgyNiw3ICszODI2LDcgQEAgc3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxuIFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4gXFx0ICogYXJlIGxlZnQgc29ydGVkLlxcbiBcXHQgKi9cXG4tXFx0c29ydF9yX25vbmF0b21pYyhpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XFxuK1xcdHNvcnRfcihpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XFxuIFxcbiBcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIFxcdFxcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xcbmRpZmYgLS1naXQgYS9saWIvc29ydC5jIGIvbGliL3NvcnQuY1xcbmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0XFxuLS0tIGEvbGliL3NvcnQuY1xcbisrKyBiL2xpYi9zb3J0LmNcXG5AQCAtMTg2LDEzICsxODYsMzYgQEAgc3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXFxuIFxcdHJldHVybiBpIC8gMjtcXG4gfVxcbiBcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLVxcbi1zdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXFxuLVxcdFxcdCAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXFxuLVxcdFxcdCAgICAgY29uc3Qgdm9pZCAqcHJpdixcXG4tXFx0XFx0ICAgICBib29sIG1heV9zY2hlZHVsZSlcXG4rLyoqXFxuKyAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHNcXG4rICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XFxuKyAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xcbisgKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcXG4rICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4rICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcXG4rICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxcbisgKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5XFxuKyAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXFxuKyAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cXG4rICpcXG4rICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXFxuKyAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxcbisgKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2ZcXG4rICogY21wX2Z1bmMoYiwgYSkuXFxuKyAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcXHUwMDNjPSAwIGFuZCBjbXBfZnVuYyhiLCBjKSBcXHUwMDNjPSAwLCB0aGVuXFxuKyAqIGNtcF9mdW5jKGEsIGMpIFxcdTAwM2M9IDAuXFxuKyAqXFxuKyAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcXG4rICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGVcXG4rICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXFxuKyAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXFxuKyAqL1xcbit2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4rXFx0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcXG4rXFx0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxcbitcXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcXG4ge1xcbiBcXHQvKiBwcmUtc2NhbGUgY291bnRlcnMgZm9yIHBlcmZvcm1hbmNlICovXFxuIFxcdHNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplO1xcbkBAIC0yNjMsOSArMjg2LDYgQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdGIgPSBwYXJlbnQoYiwgbHNiaXQsIHNpemUpO1xcbiBcXHRcXHRcXHRkb19zd2FwKGJhc2UgKyBiLCBiYXNlICsgYywgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKG1heV9zY2hlZHVsZSlcXG4tXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuIFxcdG4gLT0gc2l6ZTtcXG5AQCAtMjczLDYzICsyOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4gXFx0aWYgKG4gPT0gc2l6ZSAqIDIgXFx1MDAyNlxcdTAwMjYgZG9fY21wKGJhc2UsIGJhc2UgKyBzaXplLCBjbXBfZnVuYywgcHJpdikgXFx1MDAzZSAwKVxcbiBcXHRcXHRkb19zd2FwKGJhc2UsIGJhc2UgKyBzaXplLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xcbiB9XFxuLVxcbi0vKipcXG4tICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xcbi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcXG4tICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzXFxuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxcbi0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxcbi0gKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTFxcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXFxuLSAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcXG4tICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXBcXG4tICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLlxcbi0gKlxcbi0gKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWxcXG4tICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6XFxuLSAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxcbi0gKiBjbXBfZnVuYyhiLCBhKS5cXG4tICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpIFxcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFxcdTAwM2M9IDAsIHRoZW5cXG4tICogY21wX2Z1bmMoYSwgYykgXFx1MDAzYz0gMC5cXG4tICpcXG4tICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZVxcbi0gKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxcbi0gKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2VcXG4tICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS5cXG4tICovXFxuLXZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbi1cXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi1cXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXFxuLVxcdCAgICBjb25zdCB2b2lkICpwcml2KVxcbi17XFxuLVxcdF9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgY21wX2Z1bmMsIHN3YXBfZnVuYywgcHJpdiwgZmFsc2UpO1xcbi19XFxuIEVYUE9SVF9TWU1CT0woc29ydF9yKTtcXG4gXFxuLS8qKlxcbi0gKiBzb3J0X3Jfbm9uYXRvbWljIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cywgd2l0aCBjb25kX3Jlc2NoZWRcXG4tICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xcbi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcXG4tICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcXG4tICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXFxuLSAqXFxuLSAqIFNhbWUgYXMgc29ydF9yLCBidXQgcHJlZmVycmVkIGZvciBsYXJnZXIgYXJyYXlzIGFzIGl0IGRvZXMgYSBwZXJpb2RpY1xcbi0gKiBjb25kX3Jlc2NoZWQoKS5cXG4tICovXFxuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi1cXHRcXHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcXG4tXFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdilcXG4te1xcbi1cXHRfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIHRydWUpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0woc29ydF9yX25vbmF0b21pYyk7XFxuLVxcbiB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXFxuIFxcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcXG4gXFx0ICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpXFxuQEAgLTMzOSwxOSArMzA0LDYgQEAgdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbiBcXHRcXHQuc3dhcCA9IHN3YXBfZnVuYyxcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcXHUwMDI2dywgZmFsc2UpO1xcbitcXHRyZXR1cm4gc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFxcdTAwMjZ3KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNvcnQpO1xcbi1cXG4tdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXFxuLVxcdFxcdCAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpXFxuLXtcXG4tXFx0c3RydWN0IHdyYXBwZXIgdyA9IHtcXG4tXFx0XFx0LmNtcCAgPSBjbXBfZnVuYyxcXG4tXFx0XFx0LnN3YXAgPSBzd2FwX2Z1bmMsXFxuLVxcdH07XFxuLVxcbi1cXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXFx1MDAyNncsIHRydWUpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMjo1NS44MDU4OTcxODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc1MjUwOTcyODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvcnRfclwiLFxuICAgIFwiY2hlY2tfZHVwX2lkc1wiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwncyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxOTowMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ydC5oIGIvaW5jbHVkZS9saW51eC9zb3J0LmhcbmluZGV4IGMwMWVmODA0YTBlYjIuLjg3MTc3NTk3OGFmMGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvcnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb3J0LmhcbkBAIC0yMywxNSArMjMsNCBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHQgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4gXHQgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7XG4gXG4tLyogVmVyc2lvbnMgdGhhdCBwZXJpb2RpY2FsbHkgY2FsbCBjb25kX3Jlc2NoZWQoKTogKi9cbi1cbi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgIGNvbnN0IHZvaWQgKnByaXYpO1xuLVxuLXZvaWQgc29ydF9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICBjbXBfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKTtcbi1cbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDI5MjYwOTUxYWE4NzEuLjFkN2U3M2RkYmFmYmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTM4MjYsNyArMzgyNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuIFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xuIFx0ICogYXJlIGxlZnQgc29ydGVkLlxuIFx0ICovXG4tXHRzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcbitcdHNvcnRfcihpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4gXG4gXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgY250OyBpKyspIHtcbiBcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG5kaWZmIC0tZ2l0IGEvbGliL3NvcnQuYyBiL2xpYi9zb3J0LmNcbmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0XG4tLS0gYS9saWIvc29ydC5jXG4rKysgYi9saWIvc29ydC5jXG5AQCAtMTg2LDEzICsxODYsMzYgQEAgc3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXG4gXHRyZXR1cm4gaSAvIDI7XG4gfVxuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2Vcbi1cbi1zdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgY29uc3Qgdm9pZCAqcHJpdixcbi1cdFx0ICAgICBib29sIG1heV9zY2hlZHVsZSlcbisvKipcbisgKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzXG4rICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XG4rICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzXG4rICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50XG4rICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbisgKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTFxuKyAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXG4rICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuKyAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXG4rICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLlxuKyAqXG4rICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXG4rICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6XG4rICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mXG4rICogY21wX2Z1bmMoYiwgYSkuXG4rICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpIFx1MDAzYz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgXHUwMDNjPSAwLCB0aGVuXG4rICogY21wX2Z1bmMoYSwgYykgXHUwMDNjPSAwLlxuKyAqXG4rICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZVxuKyAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlXG4rICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXG4rICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS5cbisgKi9cbit2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbitcdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4rXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4rXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcbiB7XG4gXHQvKiBwcmUtc2NhbGUgY291bnRlcnMgZm9yIHBlcmZvcm1hbmNlICovXG4gXHRzaXplX3QgbiA9IG51bSAqIHNpemUsIGEgPSAobnVtLzIpICogc2l6ZTtcbkBAIC0yNjMsOSArMjg2LDYgQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHRcdFx0YiA9IHBhcmVudChiLCBsc2JpdCwgc2l6ZSk7XG4gXHRcdFx0ZG9fc3dhcChiYXNlICsgYiwgYmFzZSArIGMsIHNpemUsIHN3YXBfZnVuYywgcHJpdik7XG4gXHRcdH1cbi1cbi1cdFx0aWYgKG1heV9zY2hlZHVsZSlcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbiBcdG4gLT0gc2l6ZTtcbkBAIC0yNzMsNjMgKzI5Myw4IEBAIHN0YXRpYyB2b2lkIF9fc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0aWYgKG4gPT0gc2l6ZSAqIDIgXHUwMDI2XHUwMDI2IGRvX2NtcChiYXNlLCBiYXNlICsgc2l6ZSwgY21wX2Z1bmMsIHByaXYpIFx1MDAzZSAwKVxuIFx0XHRkb19zd2FwKGJhc2UsIGJhc2UgKyBzaXplLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIH1cbi1cbi0vKipcbi0gKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzXG4tICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XG4tICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzXG4tICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50XG4tICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTFxuLSAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXG4tICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuLSAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXG4tICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLlxuLSAqXG4tICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXG4tICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6XG4tICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mXG4tICogY21wX2Z1bmMoYiwgYSkuXG4tICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpIFx1MDAzYz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgXHUwMDNjPSAwLCB0aGVuXG4tICogY21wX2Z1bmMoYSwgYykgXHUwMDNjPSAwLlxuLSAqXG4tICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZVxuLSAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlXG4tICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXG4tICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS5cbi0gKi9cbi12b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcbi17XG4tXHRfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIGZhbHNlKTtcbi19XG4gRVhQT1JUX1NZTUJPTChzb3J0X3IpO1xuIFxuLS8qKlxuLSAqIHNvcnRfcl9ub25hdG9taWMgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzLCB3aXRoIGNvbmRfcmVzY2hlZFxuLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKlxuLSAqIFNhbWUgYXMgc29ydF9yLCBidXQgcHJlZmVycmVkIGZvciBsYXJnZXIgYXJyYXlzIGFzIGl0IGRvZXMgYSBwZXJpb2RpY1xuLSAqIGNvbmRfcmVzY2hlZCgpLlxuLSAqL1xuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcbi1cdFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdilcbi17XG4tXHRfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIHRydWUpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHNvcnRfcl9ub25hdG9taWMpO1xuLVxuIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbiBcdCAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKVxuQEAgLTMzOSwxOSArMzA0LDYgQEAgdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0XHQuc3dhcCA9IHN3YXBfZnVuYyxcbiBcdH07XG4gXG4tXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dywgZmFsc2UpO1xuK1x0cmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcdTAwMjZ3KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChzb3J0KTtcbi1cbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbi17XG4tXHRzdHJ1Y3Qgd3JhcHBlciB3ID0ge1xuLVx0XHQuY21wICA9IGNtcF9mdW5jLFxuLVx0XHQuc3dhcCA9IHN3YXBfZnVuYyxcbi1cdH07XG4tXG4tXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dywgdHJ1ZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDI6NTUuODA1ODk5MzEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkyNjc5Nzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBzaW1wbGlmeWluZyB0aGUgc29ydGluZyBpbXBsZW1lbnRhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIGF3YXkgc29tZSBvdmVyaGVhZC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZW1vdmFsIG9mIGBfbm9uYXRvbWljYCB2YXJpYW50cyBvZiB0aGUgc29ydCBmdW5jdGlvbnMgKGBzb3J0X3Jfbm9uYXRvbWljYCwgYHNvcnRfbm9uYXRvbWljYCkgaW4gYGluY2x1ZGUvbGludXgvc29ydC5oYCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW1wbGVtZW50YXRpb24gaW4gYGxpYi9zb3J0LmNgLiBUaGVzZSBgX25vbmF0b21pY2AgdmFyaWFudHMgd2VyZSBsaWtlbHkgZGVzaWduZWQgZm9yIHNjZW5hcmlvcyB3aGVyZSBwcmVlbXB0aW9uIHdhcyB1bmRlc2lyYWJsZSBkdXJpbmcgdGhlIHNvcnQsIHBlcmhhcHMgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiBvciBpbnRlcnJ1cHQgY29udGV4dC4gVGhlIHJlbW92YWwgc3VnZ2VzdHMgZWl0aGVyOlxuXG4xLiAgVGhhdCB0aGVzZSBzY2VuYXJpb3MgYXJlIG5vIGxvbmdlciByZWxldmFudCxcbjIuICBUaGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFyb3VuZCB0aGVzZSBzb3J0cyBoYXMgY2hhbmdlZCwgb3JcbjMuICBUaGF0IGEgbGVzcyBpbnRydXNpdmUgbWVjaGFuaXNtIGlzIG5vdyBpbiBwbGFjZSB0byBoYW5kbGUgdGhvc2UgY29uY2VybnMuXG5cblRoZSBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBjaGFuZ2UsIHdoZXJlIGBzb3J0X3Jfbm9uYXRvbWljYCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdGFuZGFyZCBgc29ydF9yYCBpbiBgY2hlY2tfZHVwX2lkcygpYCwgaXMgdGVsbGluZy4gVGhpcyBmdW5jdGlvbiwgYGNoZWNrX2R1cF9pZHMoKWAsIGxpa2VseSBpbnZvbHZlcyBhIGRhdGEgc3RydWN0dXJlIChwZXJoYXBzIGEgbGlzdCBvZiB0cmFjZXBvaW50cyBvciBCUEYgcHJvZ3JhbSBpZGVudGlmaWVycykgdGhhdCBuZWVkcyB0byBiZSBzb3J0ZWQgZm9yIGVmZmljaWVudCBsb29rdXAgb3IgY29tcGFyaXNvbi4gVGhlIGZhY3QgdGhhdCB0aGUgYF9ub25hdG9taWNgIHZlcnNpb24gd2FzICpvcmlnaW5hbGx5KiB1c2VkIGhlcmUgc3VnZ2VzdHMgdGhhdCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSBvciBhY2Nlc3MgcGF0dGVybnMgaW4gYGNoZWNrX2R1cF9pZHMoKWAgY291bGQgYmUgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBub3QgY2FyZWZ1bGx5IG1hbmFnZWQuIEhvd2V2ZXIsIHRoZSBzd2l0Y2ggdG8gdGhlIHN0YW5kYXJkIGBzb3J0X3JgIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmRzIGFsbG93aW5nIHByZWVtcHRpb24gd2l0aGluIHRoYXQgc29ydCwgaW1wbHlpbmcgdGhlIGRlc2lnbiBoYXMgYmVlbiBtb2RpZmllZC5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGNoZWNrX2R1cF9pZHMoKWAgaXMgZG9pbmcuIEknbGwgbmVlZCB0byBleHBsb3JlIHRoZSByZXN0IG9mIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBmb3IgZnVydGhlciB1c2VzIG9mIHRoaXMgc29ydCBvciBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIGRlc2lnbiBvZiB0aGUgbG9ja2luZy9wcmVlbXB0aW9uIHN0cmF0ZWdpZXMuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgcmVnYXJkaW5nIGNvbmN1cnJlbmN5IGFuZCBzY2hlZHVsaW5nLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBjb25kX3Jlc2NoZWQoKWAgZnJvbSB0aGUgbmV3IGBzb3J0X3JgIGluIGBsaWIvc29ydC5jYCByYWlzZXMgcXVlc3Rpb25zIHJlZ2FyZGluZyBzY2hlZHVsaW5nIGJlaGF2aW9yLlxuXG5UaGlzIGlzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBmb2N1cyBvbiBob3cgdGhpcyBwYXRjaCBtb2RpZmllcyBwcmVlbXB0aW9uIHNhZmV0eSBpbiB0aGVzZSBmdW5jdGlvbnMgYW5kIGlmIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBjb3VsZCBub3cgYmUgc3ViamVjdCB0byB1bmV4cGVjdGVkIGludGVycnVwdGlvbnMuIFRoaXMgaXMgYSBjcml0aWNhbCBwYXRjaCBhbmQgSSBtdXN0IGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRob3JvdWdobHkgdW5kZXJzdG9vZCBhbmQgd2VsbC10ZXN0ZWQgYmVmb3JlIGJlaW5nIGFjY2VwdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MDIuNzMyNjk5OTQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDUwNjgxNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfZHVwX2lkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgwMT1zdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MTgtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4MTk6c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MjAte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4NDA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODItXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4ODM6XFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MDQuODM3NzczMDQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0Mzg1MzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBUcmFjaW5nIElzc3VlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIGNvbmRpdGlvbnMgZm9yIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgY2hlY2tfZHVwX2lkc2AuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCUEYgaW50ZXJuYWxzLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBkZWx2ZSBpbnRvIGBicGZfdHJhY2UuY2AgYW5kIGZvY3VzIG9uIHRoZSByZWdpb24gYXJvdW5kIGxpbmVzIDM4MDAgdG8gMzkwMC4gVGhhdCByYW5nZSBpcyBhIGxpa2VseSBob3RzcG90IGZvciB0aGUgbG9naWMgdGhhdCBnb3Zlcm5zIGZ1bmN0aW9uIGF0dGFjaG1lbnQgYW5kIHBvdGVudGlhbCBJRCBjbGFzaGVzLiBJJ20gZ3Vlc3NpbmcgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBjaGVja3MgYW5kIGNvbmRpdGlvbmFsIGNhbGxzIHRoYXQgSSBuZWVkIHRvIGRpc3NlY3QuIEdyYWJiaW5nIG15IHRydXN0eSBkZWJ1Z2dlciwgYW5kIG9wZW5pbmcgYGJwZl90cmFjZS5jYCB0byB0aGF0IGV4YWN0IHNwb3Qgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29udHJvbCBmbG93IGFuZCBoZWxwIG1lIGlzb2xhdGUgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gYmUgaW52b2tlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTk5NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjA3LjM4MTYyOTg1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwMDpcXHRcXG4zODAxOlxcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXFxuMzgwMjpcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zODAzOlxcdHtcXG4zODA0OlxcdFxcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XFxuMzgwNTpcXHRcXHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XFxuMzgwNjpcXHRcXHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xcbjM4MDc6XFx0XFxuMzgwODpcXHRcXHRpZHMgICAgID0gZGF0YVswXTtcXG4zODA5OlxcdFxcdGNvb2tpZXMgPSBkYXRhWzFdO1xcbjM4MTA6XFx0XFxuMzgxMTpcXHRcXHRpZiAoY29va2llcykge1xcbjM4MTI6XFx0XFx0XFx0Y29va2llX2EgPSBjb29raWVzICsgKGlkX2EgLSBpZHMpO1xcbjM4MTM6XFx0XFx0XFx0Y29va2llX2IgPSBjb29raWVzICsgKGlkX2IgLSBpZHMpO1xcbjM4MTQ6XFx0XFx0XFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XFxuMzgxNTpcXHRcXHR9XFxuMzgxNjpcXHRcXHRzd2FwKCppZF9hLCAqaWRfYik7XFxuMzgxNzpcXHR9XFxuMzgxODpcXHRcXG4zODE5OlxcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbjM4MjA6XFx0e1xcbjM4MjE6XFx0XFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XFxuMzgyMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4zODIzOlxcdFxcbjM4MjQ6XFx0XFx0LypcXG4zODI1OlxcdFxcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcXG4zODI2OlxcdFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4zODI3OlxcdFxcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cXG4zODI4OlxcdFxcdCAqL1xcbjM4Mjk6XFx0XFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDU6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NjpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ3OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0ODpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDk6XFx0XFx0aW50IGVycjtcXG4zODUwOlxcdFxcbjM4NTE6XFx0XFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XFxuMzg1MjpcXHRcXHRjbnQgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNudDtcXG4zODUzOlxcdFxcbjM4NTQ6XFx0XFx0aWYgKCFjbnQgfHwgIXVpZHMpXFxuMzg1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zODU2OlxcdFxcdGlmIChjbnQgXFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXFxuMzg1NzpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjM4NTg6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzIHx8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcXG4zODU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NjA6XFx0XFxuMzg2MTpcXHRcXHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XFxuMzg2MjpcXHRcXHRpZiAoIWlkcylcXG4zODYzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM4NjQ6XFx0XFxuMzg2NTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XFxuMzg2NjpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4Njc6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODY4OlxcdFxcdH1cXG4zODY5OlxcdFxcbjM4NzA6XFx0XFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jb29raWVzKTtcXG4zODcxOlxcdFxcdGlmICh1Y29va2llcykge1xcbjM4NzI6XFx0XFx0XFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XFxuMzg3MzpcXHRcXHRcXHRpZiAoIWNvb2tpZXMpIHtcXG4zODc0OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg3NTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4NzY6XFx0XFx0XFx0fVxcbjM4Nzc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xcbjM4Nzg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4zODc5OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4MDpcXHRcXHRcXHR9XFxuMzg4MTpcXHRcXHR9XFxuMzg4MjpcXHRcXG4zODgzOlxcdFxcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xcbjM4ODQ6XFx0XFx0aWYgKGVycilcXG4zODg1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4NjpcXHRcXG4zODg3OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcXG4zODg4OlxcdFxcdFxcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcXG4zODg5OlxcdFxcdFxcdGlmICghZmV4aXRzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjA3LjM4MTc5MjcxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODUyOTc3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgU29ydCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHNvcnRfbm9uYXRvbWljYCBhbmQgYHNvcnRfcl9ub25hdG9taWNgIGFyZSBnb25lLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgd2VyZSByZW1vdmVkLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBhZHZhbmNlbWVudHMgaW4gdGhlIGtlcm5lbCdzIHByZWVtcHRpb24gbWVjaGFuaXNtcyDigJMgc3BlY2lmaWNhbGx5IGxhenkgcHJlZW1wdGlvbiwgZHluYW1pYyBwcmVlbXB0aW9uLCBvciBwZXJoYXBzIGJlY2F1c2UgYGNvbmRfcmVzY2hlZGAgYmVjYW1lIHVubmVjZXNzYXJ5IG9yIHdhcyBlbGltaW5hdGVkIGluIG1hbnkgYXJlYXMsIGluY2x1ZGluZyB3aXRoaW4gdGhlIHNvcnQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMsIEknbGwgbmVlZCB0byBkaWcgaW50byBgbGliL3NvcnQuY2AuIExldCdzIGV4YW1pbmUgdGhhdCBmaWxlLiBJJ2xsIHByb2JhYmx5IGxvb2sgYXQgdGhlIGZ1bGwgZmlsZSwgb3IgYXQgbGVhc3QgYSBzaXplYWJsZSBjaHVuayBvZiBpdCwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoZSBtb2RpZmljYXRpb25zLiBUaGlzIHNob3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSByZW1vdmFsIG9mIHRob3NlIHNwZWNpZmljIHNvcnQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MTAuMDY3MDkzNTM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3NvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0ICovXFxuIDE4MTpcXHRfX2F0dHJpYnV0ZV9jb25zdF9fIF9fYWx3YXlzX2lubGluZVxcbiAxODI6XFx0c3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXFxuIDE4MzpcXHR7XFxuIDE4NDpcXHRcXHRpIC09IHNpemU7XFxuIDE4NTpcXHRcXHRpIC09IHNpemUgXFx1MDAyNiAtKGkgXFx1MDAyNiBsc2JpdCk7XFxuIDE4NjpcXHRcXHRyZXR1cm4gaSAvIDI7XFxuIDE4NzpcXHR9XFxuIDE4ODpcXHRcXG4gMTg5OlxcdC8qKlxcbiAxOTA6XFx0ICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xcbiAxOTE6XFx0ICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XFxuIDE5MjpcXHQgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcXG4gMTkzOlxcdCAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxcbiAxOTQ6XFx0ICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4gMTk1OlxcdCAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXFxuIDE5NjpcXHQgKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4gMTk3OlxcdCAqXFxuIDE5ODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGVcXG4gMTk5OlxcdCAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcXG4gMjAwOlxcdCAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXFxuIDIwMTpcXHQgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuXFxuIDIwMjpcXHQgKlxcbiAyMDM6XFx0ICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXFxuIDIwNDpcXHQgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzpcXG4gMjA1OlxcdCAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxcbiAyMDY6XFx0ICogY21wX2Z1bmMoYiwgYSkuXFxuIDIwNzpcXHQgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgXFx1MDAzYz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgXFx1MDAzYz0gMCwgdGhlblxcbiAyMDg6XFx0ICogY21wX2Z1bmMoYSwgYykgXFx1MDAzYz0gMC5cXG4gMjA5OlxcdCAqXFxuIDIxMDpcXHQgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlXFxuIDIxMTpcXHQgKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxcbiAyMTI6XFx0ICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXFxuIDIxMzpcXHQgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLlxcbiAyMTQ6XFx0ICovXFxuIDIxNTpcXHR2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4gMjE2OlxcdFxcdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXFxuIDIxNzpcXHRcXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXFxuIDIxODpcXHRcXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcXG4gMjE5OlxcdHtcXG4gMjIwOlxcdFxcdC8qIHByZS1zY2FsZSBjb3VudGVycyBmb3IgcGVyZm9ybWFuY2UgKi9cXG4gMjIxOlxcdFxcdHNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplO1xcbiAyMjI6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IGxzYml0ID0gc2l6ZSBcXHUwMDI2IC1zaXplOyAgLyogVXNlZCB0byBmaW5kIHBhcmVudCAqL1xcbiAyMjM6XFx0XFx0c2l6ZV90IHNoaWZ0ID0gMDtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0aWYgKCFhKVxcdFxcdC8qIG51bSBcXHUwMDNjIDIgfHwgc2l6ZSA9PSAwICovXFxuIDIyNjpcXHRcXHRcXHRyZXR1cm47XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdC8qIGNhbGxlZCBmcm9tICdzb3J0JyB3aXRob3V0IHN3YXAgZnVuY3Rpb24sIGxldCdzIHBpY2sgdGhlIGRlZmF1bHQgKi9cXG4gMjI5OlxcdFxcdGlmIChzd2FwX2Z1bmMgPT0gU1dBUF9XUkFQUEVSIFxcdTAwMjZcXHUwMDI2ICEoKHN0cnVjdCB3cmFwcGVyICopcHJpdiktXFx1MDAzZXN3YXApXFxuIDIzMDpcXHRcXHRcXHRzd2FwX2Z1bmMgPSBOVUxMO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAoIXN3YXBfZnVuYykge1xcbiAyMzM6XFx0XFx0XFx0aWYgKGlzX2FsaWduZWQoYmFzZSwgc2l6ZSwgOCkpXFxuIDIzNDpcXHRcXHRcXHRcXHRzd2FwX2Z1bmMgPSBTV0FQX1dPUkRTXzY0O1xcbiAyMzU6XFx0XFx0XFx0ZWxzZSBpZiAoaXNfYWxpZ25lZChiYXNlLCBzaXplLCA0KSlcXG4gMjM2OlxcdFxcdFxcdFxcdHN3YXBfZnVuYyA9IFNXQVBfV09SRFNfMzI7XFxuIDIzNzpcXHRcXHRcXHRlbHNlXFxuIDIzODpcXHRcXHRcXHRcXHRzd2FwX2Z1bmMgPSBTV0FQX0JZVEVTO1xcbiAyMzk6XFx0XFx0fVxcbiAyNDA6XFx0XFxuIDI0MTpcXHRcXHQvKlxcbiAyNDI6XFx0XFx0ICogTG9vcCBpbnZhcmlhbnRzOlxcbiAyNDM6XFx0XFx0ICogMS4gZWxlbWVudHMgW2Esbikgc2F0aXNmeSB0aGUgaGVhcCBwcm9wZXJ0eSAoY29tcGFyZSBncmVhdGVyIHRoYW5cXG4gMjQ0OlxcdFxcdCAqICAgIGFsbCBvZiB0aGVpciBjaGlsZHJlbiksXFxuIDI0NTpcXHRcXHQgKiAyLiBlbGVtZW50cyBbbixudW0qc2l6ZSkgYXJlIHNvcnRlZCwgYW5kXFxuIDI0NjpcXHRcXHQgKiAzLiBhIFxcdTAwM2M9IGIgXFx1MDAzYz0gYyBcXHUwMDNjPSBkIFxcdTAwM2M9IG4gKHdoZW5ldmVyIHRoZXkgYXJlIHZhbGlkKS5cXG4gMjQ3OlxcdFxcdCAqL1xcbiAyNDg6XFx0XFx0Zm9yICg7Oykge1xcbiAyNDk6XFx0XFx0XFx0c2l6ZV90IGIsIGMsIGQ7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdFxcdGlmIChhKVxcdFxcdFxcdC8qIEJ1aWxkaW5nIGhlYXA6IHNpZnQgZG93biBhICovXFxuIDI1MjpcXHRcXHRcXHRcXHRhIC09IHNpemUgXFx1MDAzY1xcdTAwM2Mgc2hpZnQ7XFxuIDI1MzpcXHRcXHRcXHRlbHNlIGlmIChuIFxcdTAwM2UgMyAqIHNpemUpIHsgLyogU29ydGluZzogRXh0cmFjdCB0d28gbGFyZ2VzdCBlbGVtZW50cyAqL1xcbiAyNTQ6XFx0XFx0XFx0XFx0biAtPSBzaXplO1xcbiAyNTU6XFx0XFx0XFx0XFx0ZG9fc3dhcChiYXNlLCBiYXNlICsgbiwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcXG4gMjU2OlxcdFxcdFxcdFxcdHNoaWZ0ID0gZG9fY21wKGJhc2UgKyBzaXplLCBiYXNlICsgMiAqIHNpemUsIGNtcF9mdW5jLCBwcml2KSBcXHUwMDNjPSAwO1xcbiAyNTc6XFx0XFx0XFx0XFx0YSA9IHNpemUgXFx1MDAzY1xcdTAwM2Mgc2hpZnQ7XFxuIDI1ODpcXHRcXHRcXHRcXHRuIC09IHNpemU7XFxuIDI1OTpcXHRcXHRcXHRcXHRkb19zd2FwKGJhc2UgKyBhLCBiYXNlICsgbiwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MTAuMDY3MTg2Mzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcxODk3MjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBTb3J0aW5nIExpYnJhcnkgUmVmYWN0b3IqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsaWIvc29ydC5jYCBjb25jZXJuaW5nIGBzb3J0X3JgIGFuZCBgc29ydGAsIGFuZCBzb21lIHJlbGF0ZWQgY2hhbmdlcyBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgYGluY2x1ZGUvbGludXgvc29ydC5oYC4gVGhlIGNvcmUgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/XG5cbkkgbmVlZCB0byBhcHBseSB0aGUgdHJpYWdlIHBoaWxvc29waHkuIEZpcnN0LCByZWFjaGFiaWxpdHkuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiBpdCdzIG5vdCByZWFjaGFibGUsIGRvbid0IGJvdGhlci4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBgc29ydF9yYCBhbmQgYHNvcnRgIGFyZSBpbiBgbGliL3NvcnQuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG5vdCBhc3N1bWUgdGhhdCB0aGUgYXV0aG9ycyBhcmUgY29ycmVjdCBpbiB0aGVpciBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiLiBDb2RlIHJlZmFjdG9yaW5ncyBjYW4gaW50cm9kdWNlIGJ1Z3MuIEFuZCBub3cgSSBzZWUgdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhIHBhdGggaW50byBCUEYgZnVuY3Rpb25hbGl0eS4gYGNoZWNrX2R1cF9pZHNgLCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIG5vdyBjYWxscyB0aGUgbW9kaWZpZWQgYHNvcnRfcmAuIEJpbmdvISBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBwYXJ0IG9mIGEgcmVhY2hhYmxlIEJQRiBzeXNjYWxsIHBhdGgg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBCUEZfTElOS19DUkVBVEVgIHdpdGggbXVsdGktYXR0YWNoIHRyYWNpbmcuIFRoaXMgbWVhbnMgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiByZWFjaGFibGUuXG5cblRoZSBpbnN0cnVjdGlvbnMgZ3VpZGUgbWUgdG8gY29uc2lkZXIgaWYgdGhlIG1vZGlmaWNhdGlvbnMgZmFsbCBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMsIHNwZWNpZmljYWxseSBcIkNvcmUgU3Vic3lzdGVtc1wiIGFuZCBcIlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwcy5cIiBUaGlzIGNoYW5nZSBhZmZlY3RzIGNvZGUgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgKEJQRiB0cmFjaW5nLCBhIGNvcmUgc3Vic3lzdGVtKSBhbmQgZG9lcyBtb2RpZnkgc29ydGluZyBsb2dpYy4gU28sIGl0IGRlZmluaXRlbHkgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gVGhlIGtleSBoZXJlIGlzIG5vdCB0byBcImRpbHV0ZVwiIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBoYXZlOiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhcyB0aGUgQlBGIGVudHJ5IHBvaW50LCBgY2hlY2tfZHVwX2lkc2AgYXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCB1c2VzIGBzb3J0X3JgLiBgc29ydF9yYCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIHVzZWQuIEl0J3MgYSBrZXkgZXhwb3J0LiBUaGUgYHNvcnRgIGZ1bmN0aW9uICh3aGljaCBub3cgY2FsbHMgYHNvcnRfcmApIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZSByZWZhY3RvcmluZy4gKkJ1dCosIEkgc2hvdWxkIGNoZWNrIGlmIGBzb3J0YCBvciBgc29ydF9yYCBpcyB1YmlxdWl0b3VzLiBJZiBpdCBpcywgdGhlbiBJIG5lZWQgdG8gcmVmaW5lIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEhvdyBtYW55IHBsYWNlcyBpbiB0aGUga2VybmVsIGNhbGwgYHNvcnRgIG9yIGBzb3J0X3JgPyBJIG11c3QgY2hlY2sgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTI3NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzoxNS43ODYxNjExNzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDk5ODA1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ydF9yXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYz04NDY9Ym9vbCBpbnRlbF9kcF9saW5rX2NhcHNfdXBkYXRlKHN0cnVjdCBpbnRlbF9kcF9saW5rX2NhcHMgKmxpbmtfY2FwcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtODk0LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmM6ODk1OlxcdHNvcnRfcihsaW5rX2NhcHMtXFx1MDAzZWNvbmZpZ3MsIGxpbmtfY2Fwcy1cXHUwMDNlbnVtX2NvbmZpZ3MsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy04OTYtXFx0ICAgICAgIHNpemVvZihsaW5rX2NhcHMtXFx1MDAzZWNvbmZpZ3NbMF0pLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy05MDQtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYzo5MDU6XFx0c29ydF9yKGxpbmtfY2Fwcy1cXHUwMDNlcmF0ZV9sYW5lX21hcCwgbGlua19jYXBzLVxcdTAwM2VudW1fY29uZmlncyxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkwNi1cXHQgICAgICAgc2l6ZW9mKGxpbmtfY2Fwcy1cXHUwMDNlcmF0ZV9sYW5lX21hcFswXSksXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkwOS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jOjkxMDpcXHRzb3J0X3IobGlua19jYXBzLVxcdTAwM2VsYW5lX3JhdGVfbWFwLCBsaW5rX2NhcHMtXFx1MDAzZW51bV9jb25maWdzLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtOTExLVxcdCAgICAgICBzaXplb2YobGlua19jYXBzLVxcdTAwM2VsYW5lX3JhdGVfbWFwWzBdKSxcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jPTM5Mz12NGwyX2gyNjRfYnVpbGRfcF9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTM5Ny1cXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXFx1MDAzZXVub3JkZXJlZF9yZWZsaXN0WzBdKSAqIGJ1aWxkZXItXFx1MDAzZW51bV92YWxpZCk7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6Mzk4OlxcdHNvcnRfcihyZWZsaXN0LCBidWlsZGVyLVxcdTAwM2VudW1fdmFsaWQsIHNpemVvZigqcmVmbGlzdCksXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtMzk5LVxcdCAgICAgICB2NGwyX2gyNjRfcF9yZWZfbGlzdF9jbXAsIE5VTEwsIGJ1aWxkZXIpO1xcbi0tXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM9NDIzPXY0bDJfaDI2NF9idWlsZF9iX3JlZl9saXN0cyhjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTQyOC1cXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXFx1MDAzZXVub3JkZXJlZF9yZWZsaXN0WzBdKSAqIGJ1aWxkZXItXFx1MDAzZW51bV92YWxpZCk7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6NDI5OlxcdHNvcnRfcihiMF9yZWZsaXN0LCBidWlsZGVyLVxcdTAwM2VudW1fdmFsaWQsIHNpemVvZigqYjBfcmVmbGlzdCksXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtNDMwLVxcdCAgICAgICB2NGwyX2gyNjRfYjBfcmVmX2xpc3RfY21wLCBOVUxMLCBidWlsZGVyKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTQzMy1cXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXFx1MDAzZXVub3JkZXJlZF9yZWZsaXN0WzBdKSAqIGJ1aWxkZXItXFx1MDAzZW51bV92YWxpZCk7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6NDM0OlxcdHNvcnRfcihiMV9yZWZsaXN0LCBidWlsZGVyLVxcdTAwM2VudW1fdmFsaWQsIHNpemVvZigqYjFfcmVmbGlzdCksXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtNDM1LVxcdCAgICAgICB2NGwyX2gyNjRfYjFfcmVmX2xpc3RfY21wLCBOVUxMLCBidWlsZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ydC5oLTE2LVxcbmluY2x1ZGUvbGludXgvc29ydC5oOjE3OnZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbmluY2x1ZGUvbGludXgvc29ydC5oLTE4LVxcdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTQxNTA9c3RydWN0IGJ0Zl9yZWNvcmQgKmJ0Zl9wYXJzZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQyNzMtXFxua2VybmVsL2JwZi9idGYuYzo0Mjc0OlxcdHNvcnRfcihyZWMtXFx1MDAzZWZpZWxkcywgcmVjLVxcdTAwM2VjbnQsIHNpemVvZihzdHJ1Y3QgYnRmX2ZpZWxkKSwgYnRmX2ZpZWxkX2NtcCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTQyNzUtXFx0ICAgICAgIE5VTEwsIHJlYyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjc4MD1pbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4NjAtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI4NjE6XFx0XFx0c29ydF9yKHVzLnN5bXMsIGNudCwgc2l6ZW9mKCp1cy5zeW1zKSwgc3ltYm9sc19jbXBfcixcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjg2Mi1cXHRcXHQgICAgICAgc3ltYm9sc19zd2FwX3IsIFxcdTAwMjZkYXRhKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTA2LVxcdFxcdCAqL1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTA3OlxcdFxcdHNvcnRfcihhZGRycywgY250LCBzaXplb2YoKmFkZHJzKSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjkwOC1cXHRcXHQgICAgICAgYnBmX2twcm9iZV9tdWx0aV9jb29raWVfY21wLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4MTk9c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgyOC1cXHQgKi9cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzgyOTpcXHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODMwLVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9ODM2Nz1zdGF0aWMgdm9pZCBzZXR1cF90cmFjZV9zY3JhdGNoKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy04NDAzLVxcdG5yX2VudHJpZXMgPSB0c2NyYXRjaC1cXHUwMDNlbnJfZW50cmllcztcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo4NDA0OlxcdHNvcnRfcih0c2NyYXRjaC1cXHUwMDNlZW50cmllcywgbnJfZW50cmllcywgc2l6ZW9mKHN0cnVjdCB0cmFjZV9tb2RfZW50cnkpLFxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTg0MDUtXFx0ICAgICAgIG1vZF9hZGRyX2NvbXAsIE5VTEwsIE5VTEwpO1xcbi0tXFxubGliL3NvcnQuYz0xODI9c3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXFxuLS1cXG5saWIvc29ydC5jLTIxNC0gKi9cXG5saWIvc29ydC5jOjIxNTp2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG5saWIvc29ydC5jLTIxNi1cXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi0tXFxubGliL3NvcnQuYz0yOTg9dm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbi0tXFxubGliL3NvcnQuYy0zMDYtXFxubGliL3NvcnQuYzozMDc6XFx0cmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcXHUwMDI2dyk7XFxubGliL3NvcnQuYy0zMDgtfVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmM9NTA3PXN0YXRpYyBpbnQgZHVtcF9idGZfa2Z1bmNzKHN0cnVjdCBidGZfZHVtcCAqZCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMtNTQ3LVxcdC8qIFNvcnQga2Z1bmNzIGJ5IG5hbWUgZm9yIGltcHJvdmVkIHZtbGludXguaCBzdGFiaWxpdHkgICovXFxudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmM6NTQ4OlxcdHFzb3J0X3Ioa2Z1bmNzLmVsZW1zLCBrZnVuY3MuY250LCBzaXplb2YoKmtmdW5jcy5lbGVtcyksIGNtcF9rZnVuY3MsICh2b2lkICopYnRmKTtcXG50b29scy9icGYvYnBmdG9vbC9idGYuYy01NDktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtmdW5jcy5jbnQ7IGkrKykge1xcbi0tXFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYz0xNTM1PXN0YXRpYyBpbnQgc29ydF9idGZfYnlfbmFtZShzdHJ1Y3QgYnRmICpidGYpXFxuLS1cXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jLTE1NTktXFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYzoxNTYwOlxcdHFzb3J0X3IocGVybXV0ZV9pZHMsIG5yX3R5cGVzLCBzaXplb2YoKnBlcm11dGVfaWRzKSwgY21wX3R5cGVfbmFtZXMsXFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYy0xNTYxLVxcdFxcdGJ0Zik7XFxuLS1cXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jPTMxMT1zdGF0aWMgaW50IHNvcnRfcmVsKHN0cnVjdCByZWxfaW5mbyAqcmkpXFxuLS1cXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jLTMyMC1cXHRcXHRyaS1cXHUwMDNlc29ydGVkW2ldID0gaTtcXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jOjMyMTpcXHRxc29ydF9yKHJpLVxcdTAwM2Vzb3J0ZWQsIHJpLVxcdTAwM2Vucl9lbnRyaWVzLCBzeiwgcmVsX2NtcCwgcmkpO1xcbnRvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMtMzIyLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzoxOC4yMzYxNDk1ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzODQzMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgRnVuY3Rpb24gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBgc29ydF9yYCBpc24ndCBzb21lIHdpZGVzcHJlYWQgdXRpbGl0eSBmdW5jdGlvbi4gR29vZCB0byBrbm93LiBNeSBpbml0aWFsIGh1bmNoIHRoYXQgaXQgd2FzIGRlZXBseSBpbmdyYWluZWQgZXZlcnl3aGVyZSBpcyB3cm9uZy4gSXQncyBhY3R1YWxseSBjYWxsZWQgaW4gdGhlc2UgcmVsYXRpdmVseSBjb250YWluZWQsIHNwZWNpYWxpemVkIGFyZWFzOiBgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBgYnRmX3BhcnNlX2ZpZWxkc2AsIGFuZCBhIGZldyBvdGhlcnMuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiB1YmlxdWl0b3VzIGlzIGltcG9ydGFudDsgaXQgbWVhbnMgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGVmZm9ydHMgd2lsbCBiZSBmb2N1c2VkLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYW5kIGBjaGVja19kdXBfaWRzYCBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFzIHdlbGwsIHNpbmNlIHRoZXkncmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBjaGVjayB3aGF0J3MgbmVlZGVkIGZvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBGcm9tIHRoZXJlLCBJJ2xsIHNlYXJjaCB0byBkZXRlcm1pbmUgd2hlcmUgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgYWN0dWFsbHkgY29tcGlsZWQsIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjIwLjc3NDU4NjI2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDI5NzA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03OTg9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo3OTk6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKTtcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTgwMC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04NTc9c3RhdGljIGlubGluZSBpbnRcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg1ODpicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg1OS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NzkzPXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0My1cXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODQ0OlxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQ1LVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODE5PXN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzktXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4NDA6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODQxLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTMwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjIyLjQ0NDg5MDg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNTA4NTEwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gQlBGIFRyYWNlIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIEJQRiB0cmFjaW5nIHNldHVwIHdvcmtzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgY2hlY2tfZHVwX2lkc2AgZnVuY3Rpb25zIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lcyAzODAwIHRvIDM5NDAsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGAjaWZkZWZgIGNvbmRpdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgdGVsbCBtZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgYmVnaW5uaW5nLCBsaW5lcyAxIHRvIDUwLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZSBpbmNsdWRlIHN0YXRlbWVudHMgYXJlIG1hbmFnZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZS4gR290dGEgYmUgZWZmaWNpZW50IGhlcmUsIGp1c3QgYSBxdWljayBzY2FuIHRvIG9yaWVudCBteXNlbGYsIHRoZW4gSSB3aWxsIGRpdmUgZGVlcGVyIGFzIG5lZWRlZC4gSSBob3BlIHRoaXMgZ2V0cyBtZSB1cCB0byBzcGVlZCwgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzoyNi43OTU3NDQyNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzgwOlxcdFxcdH1cXG4zNzgxOlxcdH1cXG4zNzgyOlxcdCNlbmRpZlxcbjM3ODM6XFx0XFxuMzc4NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XFxuMzc4NTpcXHRcXHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcXG4zNzg2OlxcdFxcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxcbjM3ODc6XFx0XFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG4zNzg4OlxcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbjM3ODk6XFx0XFx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXFxuMzc5MDpcXHQjZW5kaWZcXG4zNzkxOlxcdH07XFxuMzc5MjpcXHRcXG4zNzkzOlxcdHN0YXRpYyBpbnQgaWRzX2NtcF9yKGNvbnN0IHZvaWQgKnBhLCBjb25zdCB2b2lkICpwYiwgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zNzk0OlxcdHtcXG4zNzk1OlxcdFxcdHUzMiBhID0gKih1MzIgKikgcGE7XFxuMzc5NjpcXHRcXHR1MzIgYiA9ICoodTMyICopIHBiO1xcbjM3OTc6XFx0XFxuMzc5ODpcXHRcXHRyZXR1cm4gKGEgXFx1MDAzZSBiKSAtIChhIFxcdTAwM2MgYik7XFxuMzc5OTpcXHR9XFxuMzgwMDpcXHRcXG4zODAxOlxcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXFxuMzgwMjpcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zODAzOlxcdHtcXG4zODA0OlxcdFxcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XFxuMzgwNTpcXHRcXHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XFxuMzgwNjpcXHRcXHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xcbjM4MDc6XFx0XFxuMzgwODpcXHRcXHRpZHMgICAgID0gZGF0YVswXTtcXG4zODA5OlxcdFxcdGNvb2tpZXMgPSBkYXRhWzFdO1xcbjM4MTA6XFx0XFxuMzgxMTpcXHRcXHRpZiAoY29va2llcykge1xcbjM4MTI6XFx0XFx0XFx0Y29va2llX2EgPSBjb29raWVzICsgKGlkX2EgLSBpZHMpO1xcbjM4MTM6XFx0XFx0XFx0Y29va2llX2IgPSBjb29raWVzICsgKGlkX2IgLSBpZHMpO1xcbjM4MTQ6XFx0XFx0XFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XFxuMzgxNTpcXHRcXHR9XFxuMzgxNjpcXHRcXHRzd2FwKCppZF9hLCAqaWRfYik7XFxuMzgxNzpcXHR9XFxuMzgxODpcXHRcXG4zODE5OlxcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbjM4MjA6XFx0e1xcbjM4MjE6XFx0XFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XFxuMzgyMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4zODIzOlxcdFxcbjM4MjQ6XFx0XFx0LypcXG4zODI1OlxcdFxcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcXG4zODI2OlxcdFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4zODI3OlxcdFxcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cXG4zODI4OlxcdFxcdCAqL1xcbjM4Mjk6XFx0XFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDU6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NjpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ3OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0ODpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDk6XFx0XFx0aW50IGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MjYuNzk1OTExNjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDAwMjE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfdHJhY2UuY2AgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBncmFiIHRoYXQgTWFrZWZpbGUgYW5kIHBva2UgYXJvdW5kIHRoZSBgI2lmZGVmYCBibG9ja3Mgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLCBlc3BlY2lhbGx5IGFzIHRoZXkgcmVsYXRlIHRvIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBmZXcgcmVhc29ucyBmb3IgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uOiBJdCBjb3VsZCBiZSBhYm91dCBrZXJuZWwgdmVyc2lvbiBzdXBwb3J0LCBwZXJoYXBzIHRoaXMgaXMgYSBuZXdlciBhZGRpdGlvbjsgbWF5YmUgdGhlcmUncyBhbiBvcHRpb24gZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZHVyaW5nIGNvbXBpbGF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHk7IHBvc3NpYmx5IHNvbWUgZGVwZW5kZW5jaWVzIG5lZWQgdG8gYmUgcHJlc2VudCBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyB1bml2ZXJzYWxseSBhdmFpbGFibGUgb3IgaWYgdGhlcmUncyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBlbmFibGUgaXQuIFRoaXMgd2lsbCBncmVhdGx5IGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGFiaWxpdHkgYW5kIHBvcnRhYmlsaXR5IG9mIGFueSBjb2RlIEkgd3JpdGUgbGV2ZXJhZ2luZyBpdC4gSSdtIGtlZW4gdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIGxvZ2ljIHNvIEkga25vdyB3aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgZm9yIHN1Y2Nlc3NmdWwgYnVpbGRzLiBTbywgSSBuZWVkIHRoZSBNYWtlZmlsZSBhbmQgdGhlIHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBicm9hZGVyIEJQRiB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MzAuMjM1OTM2NTM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk3OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjMwLjI4NzkyNDI1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODE4OTQzMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgYnBmX3RyYWNlLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaW4gdGhlIGtlcm5lbCB0cmFjaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgbGluZXMgMzc4MCBhbmQgMzkyMCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhlIGZhY3QgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGAjaWZkZWZgcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHksIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBtaWdodCBub3QgYWx3YXlzIGJlIGF2YWlsYWJsZS5cblxuS25vd2luZyB0aGUga2VybmVsLCBJIGNhbiBhbnRpY2lwYXRlIGEgZmV3IHBvc3NpYmlsaXRpZXMuIEl0IGNvdWxkIGJlIHRpZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbiwgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChsaWtlIG9uZSByZWxhdGluZyB0byBCUEYgb3IgdHJhY2luZyBmZWF0dXJlcyksIG9yIHBlcmhhcHMgZXZlbiBzb21lIGtpbmQgb2YgZXhwZXJpbWVudGFsIG9yIGludGVybmFsIGZsYWcuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnRhYmlsaXR5IGFuZCBmZWF0dXJlIHNldCBvZiBhbnkgQlBGLWJhc2VkIHRyYWNpbmcgYXBwbGljYXRpb25zIEknbSB3b3JraW5nIHdpdGggb3IgYW5hbHl6aW5nLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcyB0byBhdm9pZCBhbnkgdW5mb3Jlc2VlbiBydW50aW1lIGVycm9ycy4gU28sIGxldCdzIGdldCB0aG9zZSBsaW5lcyBvcGVuIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MzYuMTA2ODcwMDY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc1MDpcXHRcXG4zNzUxOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjM3NTI6XFx0XFx0fVxcbjM3NTM6XFx0XFxuMzc1NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjM3NTU6XFx0fVxcbjM3NTY6XFx0XFxuMzc1NzpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4zNzU4OlxcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4zNzU5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNlcV9maWxlICpzZXEpXFxuMzc2MDpcXHR7XFxuMzc2MTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XFxuMzc2MjpcXHRcXHRcXHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xcbjM3NjM6XFx0XFx0Ym9vbCBoYXNfY29va2llcyA9ICEhdHJfbGluay1cXHUwMDNlY29va2llcztcXG4zNzY0OlxcdFxcbjM3NjU6XFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCJhdHRhY2hfdHlwZTpcXFxcdCV1XFxcXG5cXFwiLCB0cl9saW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcXG4zNzY2OlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiY250OlxcXFx0JXVcXFxcblxcXCIsIHRyX2xpbmstXFx1MDAzZW5vZGVzX2NudCk7XFxuMzc2NzpcXHRcXG4zNzY4OlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiJXNcXFxcdCAlc1xcXFx0ICVzXFxcXHQgJXNcXFxcblxcXCIsIFxcXCJvYmotaWRcXFwiLCBcXFwiYnRmLWlkXFxcIiwgXFxcImNvb2tpZVxcXCIsIFxcXCJmdW5jXFxcIik7XFxuMzc2OTpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRyX2xpbmstXFx1MDAzZW5vZGVzX2NudDsgaSsrKSB7XFxuMzc3MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcXHUwMDI2dHJfbGluay1cXHUwMDNlbm9kZXNbaV07XFxuMzc3MTpcXHRcXHRcXHR1MzIgYnRmX2lkLCBvYmpfaWQ7XFxuMzc3MjpcXHRcXG4zNzczOlxcdFxcdFxcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWtleSwgXFx1MDAyNm9ial9pZCwgXFx1MDAyNmJ0Zl9pZCk7XFxuMzc3NDpcXHRcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiV1XFxcXHQgJXVcXFxcdCAlbGx1XFxcXHQgJXBTXFxcXG5cXFwiLFxcbjM3NzU6XFx0XFx0XFx0XFx0ICAgb2JqX2lkLCBidGZfaWQsXFxuMzc3NjpcXHRcXHRcXHRcXHQgICBoYXNfY29va2llcyA/IHRyX2xpbmstXFx1MDAzZWNvb2tpZXNbaV0gOiAwLFxcbjM3Nzc6XFx0XFx0XFx0XFx0ICAgKHZvaWQgKikgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWlwKTtcXG4zNzc4OlxcdFxcbjM3Nzk6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMzc4MDpcXHRcXHR9XFxuMzc4MTpcXHR9XFxuMzc4MjpcXHQjZW5kaWZcXG4zNzgzOlxcdFxcbjM3ODQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbjM3ODU6XFx0XFx0LnJlbGVhc2UgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UsXFxuMzc4NjpcXHRcXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcXG4zNzg3OlxcdFxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxuMzc4ODpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4zNzg5OlxcdFxcdC5zaG93X2ZkaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzozNi4xMDcwNDc5NzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk4NzcxNjE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBUcmFjZSBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgdHJhY2luZyBjb2RlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgdGhlcmUgd2VyZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgaGFuZGxlZCBhcm91bmQgbGluZSAzOTIwIHRvIDM5NDUsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGJsb2NrIG9mIGNvZGUsIHRvIHNlZSBob3cgaXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBkZWJ1Z2dpbmcuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzo0Mi4wOTQ3NjY1MjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTIwOlxcdGVycm9yOlxcbjM5MjE6XFx0XFx0a3ZmcmVlKGZleGl0cyk7XFxuMzkyMjpcXHRcXHRrdmZyZWUoY29va2llcyk7XFxuMzkyMzpcXHRcXHRrdmZyZWUoaWRzKTtcXG4zOTI0OlxcdFxcdGt2ZnJlZShsaW5rKTtcXG4zOTI1OlxcdFxcdHJldHVybiBlcnI7XFxuMzkyNjpcXHR9XFxuMzkyNzpcXHRcXG4zOTI4OlxcdCNlbHNlXFxuMzkyOTpcXHRcXG4zOTMwOlxcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4zOTMxOlxcdHtcXG4zOTMyOlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4zOTMzOlxcdH1cXG4zOTM0OlxcdFxcbjM5MzU6XFx0I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDIuMDk0OTI3MzU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODc5NTYyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBDb25kaXRpb25hbCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGJsb2NrIG9mIGNvZGUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBgI2Vsc2VgIHN0YXRlbWVudCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYCNpZmAuIEkgbmVlZCB0byB2aXN1YWxseSBwYXJzZSB0aGlzIHF1aWNrbHksIGFuZCBJIGtub3cgSSBjYW4ndCBqdXN0IHNjYW4gZnJvbSB0aGUgYCNlbHNlYCB1cC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZmluZCB0aGUgc3RhcnQgb2YgdGhlIGAjaWZgIGJsb2NrLiBJdCBjb3VsZCBiZSBuZXN0ZWQgcHJldHR5IGRlZXBseSwgb3IgZXZlbiBpbiBhIG1hY3JvLCBzbyBpdCdzIGJlc3QgdG8gdHJhY2sgaXQgZG93biBwcmVjaXNlbHkuIFRoZW4sIEkgY2FuIHN0YXJ0IHRvIGZvcm0gYSB3b3JraW5nIHRoZW9yeSBpbiBteSBoZWFkIGFib3V0IHRoZSBwb3NzaWJsZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aGlzIHNlY3Rpb24gYW5kIHdoZXJlIGVhY2ggYnJhbmNoIGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYxNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDQuMTgyODg2MDI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyMzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2ODA9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4MS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4MjojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4My0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzkzMD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzNTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTIFxcdTAwMjZcXHUwMDI2IENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzo0NC4yMzAxMTM5MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4NjY4Mzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIEJQRi4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIGluIGEgd2F5IHRoYXQgaW1wYWN0cyB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gZXhwZWN0aW5nLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyBjYW4gYmUgY29tcGxleCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGdvaW5nIHRvIGltcGFjdCBCUEYncyBiZWhhdmlvdXIuIEkgd2lsbCBzdGFydCBieSBxdWVyeWluZyB0aGUga2VybmVsIGNvbmZpZyBhbmQgbG9va2luZyBmb3IgdGhvc2Ugc3BlY2lmaWMgc3ltYm9scy4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgb24gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDc1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDcuNzE2ODAwMDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjcxNjIyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9FVkVOVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9ODUxPWNvbmZpZyBFUFJPQkVfRVZFTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NjQtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODY1OmNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctODY2LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDkuNDQzOTcxMDAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTQyMDQyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL3RyYWNlL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODY1LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhhdCBhcmVhIG9mIHRoZSBjb25maWd1cmF0aW9uIHRoYXQncyBkcmF3aW5nIG15IGF0dGVudGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgdHJhY2luZyBmZWF0dXJlIG9yIG9wdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0IG9uY2UgSSdtIHRoZXJlOyBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciBzeW1ib2wsIGRlcGVuZGVuY3ksIG9yIGEgY29uZGl0aW9uYWwgdGhhdCBJIGhhdmUgZXhwZXJpZW5jZSBpbiBtYW5hZ2luZy4gSSBhbSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiBhIHBhcnRpY3VsYXIgdHJhY2luZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NTIuMzU4MTc3NDE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjA6XFx0XFx0ICBldmVudHMuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHdoYXQgZmllbGRzIGFyZSByZWNvcmRlZCBpblxcbiA4NjE6XFx0XFx0ICBhbiBldmVudCBvciBldmVuIGRlcmVmZXJlbmNlIGEgZmllbGQgb2YgYW4gZXZlbnQuIEl0IGNhblxcbiA4NjI6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NjM6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg2NDpcXHRcXG4gODY1OlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg2NjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg2NzpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg2ODpcXHRcXHRib29sXFxuIDg2OTpcXHRcXHRkZWZhdWx0IHlcXG4gODcwOlxcdFxcdGhlbHBcXG4gODcxOlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg3MjpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NzM6XFx0XFxuIDg3NDpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODc1OlxcdFxcdGRlZl9ib29sIG5cXG4gODc2OlxcdFxcbiA4Nzc6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4Nzg6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjUyLjM1ODI4ODQ4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc4ODU3NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0IGFuZCBJJ20gXCJ0aGlua2luZ1wiIGl0OlxuXG4qKkNoZWNraW5nIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoaXMgZmxhZyBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQga2VybmVsIGVudmlyb25tZW50LiBNeSBwcmltYXJ5IGZvY3VzIGlzIGxpa2VseSBvbiBwZXJmb3JtYW5jZSBpbXBhY3QgYW5kIHRoZSBpbnRyaWNhY2llcyBvZiBkaXJlY3QgY2FsbCBwYXRjaGluZywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBjb25zaWRlcmF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLiBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIGEgcGFydGljdWxhciBjb2RlIHBhdGg/IFdoYXQgYWJvdXQgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIHRyYWNpbmcgbWVjaGFuaXNtcyBvciBzZWN1cml0eSBmZWF0dXJlcz8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucywgdGhlbiBqdW1wIHRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBjb250cm9sIGZsb3cuIEFueSByZWNlbnQgcGF0Y2hlcyBvciBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBmZWF0dXJlIHRoYXQgbWlnaHQgcHJvdmlkZSBpbnNpZ2h0IGludG8gZWRnZSBjYXNlcz8gSSBob3BlIHRoZXJlIGFyZSB1c2VmdWwgY29tbWVudHMuIEl0J3MgdGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIHJ1bnRpbWUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODY4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzo1NC45MzcxNDg1OTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTk0OTkzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjU2LjYzNjY1MzczOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjg3NzM2NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFjZSBJbmZyYXN0cnVjdHVyZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIGFuZCBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8ganVtcCB0byB0aGUgdmljaW5pdHkgb2YgbGluZSAzMjUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc2VjdGlvbiBvZiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgcmVsZXZhbnQgZmVhdHVyZSBmbGFncywgcGVyaGFwcyBvcHRpb25zIHJlbGF0ZWQgdG8gc3BlY2lmaWMgdHJhY2Vwb2ludHMgb3IgZXZlbnQgdHlwZXMsIG9yIG1heWJlIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gaG9waW5nIHRoaXMgd2lsbCBqb2cgbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgcGFydGljdWxhciBwaWVjZXMuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MDAuMzI0MzkzMDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcbiAzMjE6XFx0XFx0ICBUaGlzIHdheSBhIENPTkZJR19GVU5DVElPTl9UUkFDRVIga2VybmVsIGlzIHNsaWdodGx5IGxhcmdlciwgYnV0XFxuIDMyMjpcXHRcXHQgIG90aGVyd2lzZSBoYXMgbmF0aXZlIHBlcmZvcm1hbmNlIGFzIGxvbmcgYXMgbm8gdHJhY2luZyBpcyBhY3RpdmUuXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4gMzI1OlxcdFxcdGRlZl9ib29sIHlcXG4gMzI2OlxcdFxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcXG4gMzI3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4gMzI4OlxcdFxcbiAzMjk6XFx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuIDMzMDpcXHRcXHRkZWZfYm9vbCB5XFxuIDMzMTpcXHRcXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUyB8fCBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG4gMzMyOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xcbiAzMzU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcXG4gMzM3OlxcdFxcbiAzMzg6XFx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xcbiAzMzk6XFx0XFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDowMC4zMjQ0OTQ0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjczNjIxNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBCUEYgRXZlbnRpbmcgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgQlBGX0VWRU5UUyBhcmUgc2V0IHVwLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBjbGVhciB0aGF0IGl0IGxldmVyYWdlcyBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLiBNYWtlcyBzZW5zZSDigJMgd2UncmUgaG9va2luZyBpbnRvIHN5c2NhbGxzLCBwcm9iaW5nIGtlcm5lbCBmdW5jdGlvbnMsIGFuZCB1c2luZyB0aGUgcGVyZiBpbmZyYXN0cnVjdHVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBEWU5BTUlDX0ZUUkFDRWAgd2lsbCBiZSByZXF1aXJlZCBmb3IgdGhhdCBkZWVwZXIgaW5zdHJ1bWVudGF0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IGNoZWNrIGlmIGBzb3J0Lm9gIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IGhlcmUuIExldCdzIHF1aWNrbHkgcGVlayBhdCB0aGUgYGxpYi9NYWtlZmlsZWAgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzUyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDowMi45OTgxMTg1OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjMwMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvcnQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL01ha2VmaWxlPTUzPUNPTlRFWFRfQU5BTFlTSVNfcmhhc2h0YWJsZS5vIDo9IHlcXG5saWIvTWFrZWZpbGUtNTQtXFxubGliL01ha2VmaWxlOjU1Om9iai15ICs9IGJjZC5vIHNvcnQubyBwYXJzZXIubyBkZWJ1Z19sb2Nrcy5vIHJhbmRvbTMyLm8gXFxcXFxcbmxpYi9NYWtlZmlsZS01Ni1cXHQgYnVzdF9zcGlubG9ja3MubyBrYXNwcmludGYubyBiaXRtYXAubyBzY2F0dGVybGlzdC5vIFxcXFxcXG5saWIvTWFrZWZpbGU6NTc6XFx0IGxpc3Rfc29ydC5vIHV1aWQubyBpb3ZfaXRlci5vIGNsel9jdHoubyBcXFxcXFxubGliL01ha2VmaWxlLTU4LVxcdCBic2VhcmNoLm8gZmluZF9iaXQubyBsbGlzdC5vIGx3cS5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXFxcXFxcbi0tXFxubGliL2dyb3VwX2NwdXMuYz00ODg9c3RydWN0IGNwdW1hc2sgKmdyb3VwX2NwdXNfZXZlbmx5KHVuc2lnbmVkIGludCBudW1ncnBzLCB1bnNpZ25lZCBpbnQgKm51bW1hc2tzKVxcbi0tXFxubGliL2dyb3VwX2NwdXMuYy01MjMtXFx0ICogQ1BVIGlzIGhhbmRsZWQgaW4gdGhlIDFzdCBvciAybmQgc3RhZ2UsIGFuZCBlaXRoZXIgd2F5IGlzIGNvcnJlY3RcXG5saWIvZ3JvdXBfY3B1cy5jOjUyNDpcXHQgKiBmcm9tIEFQSSB1c2VyIHZpZXdwb2ludCBzaW5jZSAyLXN0YWdlIHNwcmVhZCBpcyBzb3J0IG9mXFxubGliL2dyb3VwX2NwdXMuYy01MjUtXFx0ICogb3B0aW1pemF0aW9uLlxcbi0tXFxubGliL29iamFnZy5jPTYwNz1jb25zdCBzdHJ1Y3Qgb2JqYWdnX3N0YXRzICpvYmphZ2dfc3RhdHNfZ2V0KHN0cnVjdCBvYmphZ2cgKm9iamFnZylcXG4tLVxcbmxpYi9vYmphZ2cuYy02MzAtXFxubGliL29iamFnZy5jOjYzMTpcXHRzb3J0KG9iamFnZ19zdGF0cy1cXHUwMDNlc3RhdHNfaW5mbywgb2JqYWdnX3N0YXRzLVxcdTAwM2VzdGF0c19pbmZvX2NvdW50LFxcbmxpYi9vYmphZ2cuYy02MzItXFx0ICAgICBzaXplb2Yoc3RydWN0IG9iamFnZ19vYmpfc3RhdHNfaW5mbyksXFxuLS1cXG5saWIvb2JqYWdnLmM9MTAwNz1vYmphZ2dfaGludHNfc3RhdHNfZ2V0KHN0cnVjdCBvYmphZ2dfaGludHMgKm9iamFnZ19oaW50cylcXG4tLVxcbmxpYi9vYmphZ2cuYy0xMDI3LVxcbmxpYi9vYmphZ2cuYzoxMDI4OlxcdHNvcnQob2JqYWdnX3N0YXRzLVxcdTAwM2VzdGF0c19pbmZvLCBvYmphZ2dfc3RhdHMtXFx1MDAzZXN0YXRzX2luZm9fY291bnQsXFxubGliL29iamFnZy5jLTEwMjktXFx0ICAgICBzaXplb2Yoc3RydWN0IG9iamFnZ19vYmpfc3RhdHNfaW5mbyksXFxuLS1cXG5saWIvc29ydC5jPTE4Mj1zdGF0aWMgc2l6ZV90IHBhcmVudChzaXplX3QgaSwgdW5zaWduZWQgaW50IGxzYml0LCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmxpYi9zb3J0LmMtMTk3LSAqXFxubGliL3NvcnQuYzoxOTg6ICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXFxubGliL3NvcnQuYy0xOTktICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxcbi0tXFxubGliL3Rlc3RfcGFybWFuLmM9MTEzPXN0YXRpYyB2b2lkIHRlc3RfcGFybWFuX21vdmUodm9pZCAqcHJpdiwgdW5zaWduZWQgbG9uZyBmcm9tX2luZGV4LFxcbi0tXFxubGliL3Rlc3RfcGFybWFuLmMtMTIzLVxcbmxpYi90ZXN0X3Bhcm1hbi5jOjEyNDpzdGF0aWMgY29uc3Qgc3RydWN0IHBhcm1hbl9vcHMgdGVzdF9wYXJtYW5fbHNvcnRfb3BzID0ge1xcbmxpYi90ZXN0X3Bhcm1hbi5jLTEyNS1cXHQuYmFzZV9jb3VudFxcdD0gVEVTVF9QQVJNQU5fQkFTRV9DT1VOVCxcXG4tLVxcbmxpYi90ZXN0X3Bhcm1hbi5jPTM2MD1zdGF0aWMgaW50IHRlc3RfcGFybWFuX2xzb3J0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9wYXJtYW4uYy0zNjQtXFxubGliL3Rlc3RfcGFybWFuLmM6MzY1OlxcdHRlc3RfcGFybWFuID0gdGVzdF9wYXJtYW5fY3JlYXRlKFxcdTAwMjZ0ZXN0X3Bhcm1hbl9sc29ydF9vcHMpO1xcbmxpYi90ZXN0X3Bhcm1hbi5jLTM2Ni1cXHRpZiAoSVNfRVJSKHRlc3RfcGFybWFuKSlcXG4tLVxcbmxpYi90ZXN0cy9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfS0ZJRk9fS1VOSVRfVEVTVCkgKz0ga2ZpZm9fa3VuaXQub1xcbmxpYi90ZXN0cy9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfVEVTVF9MSVNUX1NPUlQpICs9IHRlc3RfbGlzdF9zb3J0Lm9cXG5saWIvdGVzdHMvTWFrZWZpbGUtMzQtb2JqLSQoQ09ORklHX0xJTkVBUl9SQU5HRVNfVEVTVCkgKz0gdGVzdF9saW5lYXJfcmFuZ2VzLm9cXG4tLVxcbmxpYi90ZXN0cy9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfU0xVQl9LVU5JVF9URVNUKSArPSBzbHViX2t1bml0Lm9cXG5saWIvdGVzdHMvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RFU1RfU09SVCkgKz0gdGVzdF9zb3J0Lm9cXG5saWIvdGVzdHMvTWFrZWZpbGUtNTItQ0ZMQUdTX3N0YWNraW5pdF9rdW5pdC5vICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIHN3aXRjaC11bnJlYWNoYWJsZSlcXG4tLVxcbmxpYi92c3ByaW50Zi5jPTM0NjI9aW50IHZzc2NhbmYoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncylcXG4tLVxcbmxpYi92c3ByaW50Zi5jLTM2NTktXFxubGliL3ZzcHJpbnRmLmM6MzY2MDpcXHRcXHQvKiBoYXZlIHNvbWUgc29ydCBvZiBpbnRlZ2VyIGNvbnZlcnNpb24uXFxubGliL3ZzcHJpbnRmLmMtMzY2MS1cXHRcXHQgKiBmaXJzdCwgc2tpcCB3aGl0ZSBzcGFjZSBpbiBidWZmZXIuXFxuLS1cXG5saWIvenN0ZC9jb21wcmVzcy9odWZfY29tcHJlc3MuYz01ODk9c3RhdGljIHZvaWQgSFVGX3NpbXBsZVF1aWNrU29ydChub2RlRWx0IGFycltdLCBpbnQgbG93LCBpbnQgaGlnaCkge1xcbi0tXFxubGliL3pzdGQvY29tcHJlc3MvaHVmX2NvbXByZXNzLmMtNjA5LSAqIFNvcnRzIHRoZSBzeW1ib2xzIFswLCBtYXhTeW1ib2xWYWx1ZV0gYnkgY291bnRbc3ltYm9sXSBpbiBkZWNyZWFzaW5nIG9yZGVyLlxcbmxpYi96c3RkL2NvbXByZXNzL2h1Zl9jb21wcmVzcy5jOjYxMDogKiBUaGlzIGlzIGEgdHlwaWNhbCBidWNrZXQgc29ydGluZyBzdHJhdGVneSB0aGF0IHVzZXMgZWl0aGVyIHF1aWNrc29ydCBvciBpbnNlcnRpb24gc29ydCB0byBzb3J0IGVhY2ggYnVja2V0LlxcbmxpYi96c3RkL2NvbXByZXNzL2h1Zl9jb21wcmVzcy5jLTYxMS0gKlxcbi0tXFxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmM9MzA9dm9pZCBaU1REX3VwZGF0ZURVQlQoWlNURF9NYXRjaFN0YXRlX3QqIG1zLFxcbi0tXFxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmMtNjktLyogWlNURF9pbnNlcnREVUJUMSgpIDpcXG5saWIvenN0ZC9jb21wcmVzcy96c3RkX2xhenkuYzo3MDogKiAgc29ydCBvbmUgYWxyZWFkeSBpbnNlcnRlZCBidXQgdW5zb3J0ZWQgcG9zaXRpb25cXG5saWIvenN0ZC9jb21wcmVzcy96c3RkX2xhenkuYy03MS0gKiAgYXNzdW1wdGlvbiA6IGN1cnIgXFx1MDAzZT0gYnRsb3cgPT0gKGN1cnIgLSBidG1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjA0OjAzLjA1NDc1NjkwN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTIyNDI0MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gSSBzZWUgdGhhdCBgbGliL3NvcnQub2AgaXMgYmVpbmcgYnVpbHQgaW50byB0aGUga2VybmVsIHVuY29uZGl0aW9uYWxseSDigJMgaXQncyBhbiBgb2JqLXlgIGluIHRoZSBgbGliL01ha2VmaWxlYC4gVGhlIEJQRiB0cmFjaW5nIGZ1bmN0aW9uYWxpdHksIGFzIGV4cGVjdGVkLCByZWxpZXMgb24gc2V2ZXJhbCBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkOiBgQ09ORklHX0JQRl9FVkVOVFNgLCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgQ09ORklHX0tQUk9CRV9FVkVOVFNgLCBhbW9uZyBvdGhlcnMuIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aG9zZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBjb25maWdzIHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbi4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgc29ydF9yYCB3aXRoaW4gYGxpYi9zb3J0LmNgLCBhbmQgYm90aCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbmQgYGNoZWNrX2R1cF9pZHNgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgS1BST0JFX0VWRU5UU2AsIGFzIEkgYWxyZWFkeSBzdXNwZWN0ZWQuXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyB0YWtpbmcgb3V0IGBzb3J0X25vbmF0b21pY2AgYW5kIGBzb3J0X3Jfbm9uYXRvbWljYCwgc2ltcGxpZnlpbmcgYGxpYi9zb3J0LmNgIGJ5IGltcGxlbWVudGluZyBgc29ydF9yYCBkaXJlY3RseSwgYW5kIHJlbW92aW5nIHRob3NlIHNjaGVkdWxpbmcgcG9pbnQgY2hlY2tzLiBJdCB0aGVuIHVwZGF0ZXMgdGhlIGBjaGVja19kdXBfaWRzKClgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCwgd2hpY2ggaXMgdGhlIG9ubHkgY2FsbGVyLCB0byB1c2UgdGhlIHNpbXBsaWZpZWQgYHNvcnRfcigpYCBmdW5jdGlvbi4gVGhpcyBpcyB0b3VjaGluZyBib3RoIGNvcmUgbGlicmFyeSBzb3J0aW5nIGxvZ2ljIGFuZCB0aGUgQlBGIHRyYWNlIG11bHRpLWF0dGFjaCBoYW5kbGluZywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JJ3ZlIHJldmlld2VkIGV2ZXJ5dGhpbmcgbWV0aWN1bG91c2x5LCBhbmQgSSdtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM3OSwiT3V0cHV0VG9rZW5zIjoyMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MTAuOTc3MTg0NjEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2ODExNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvcnRfclwiLFxuICAgIFwiY2hlY2tfZHVwX2lkc1wiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwncyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvcnRfclwiLFxuICAgIFwiY2hlY2tfZHVwX2lkc1wiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwncyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDoxMS4wNTY4NzQ0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODk5Mzk4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDoxMS4wNTc0NzkxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1NDg5MzMwMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjbGVhbnMgdXAgdGhlIGtlcm5lbCBzb3J0aW5nIGxpYnJhcnkgKGxpYi9zb3J0LmMgYW5kIGluY2x1ZGUvbGludXgvc29ydC5oKSBieSByZW1vdmluZyBjb25kX3Jlc2NoZWQoKSBsb2dpYyBhbmQgdGhlIHNvcnRfbm9uYXRvbWljL3NvcnRfcl9ub25hdG9taWMgd3JhcHBlciBmdW5jdGlvbnMsIHVwZGF0aW5nIGJwZl90cmFjZS5jIHRvIGNhbGwgc29ydF9yKCkgZGlyZWN0bHkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZjA2MjlkY2E2YjVlZTg5OWM2MTY5YTNjMjFiNThlOGQxYzEyYzc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTk6MDI6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvcnQuaCBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5pbmRleCBjMDFlZjgwNGEwZWIyLi44NzE3NzU5NzhhZjBhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5AQCAtMjMsMTUgKzIzLDQgQEAgdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0ICBjbXBfZnVuY190IGNtcF9mdW5jLFxuIFx0ICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpO1xuIFxuLS8qIFZlcnNpb25zIHRoYXQgcGVyaW9kaWNhbGx5IGNhbGwgY29uZF9yZXNjaGVkKCk6ICovXG4tXG4tdm9pZCBzb3J0X3Jfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0XHQgICAgICBjb25zdCB2b2lkICpwcml2KTtcbi1cbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7XG4tXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCAyOTI2MDk1MWFhODcxLi4xZDdlNzNkZGJhZmJlIDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0zODI2LDcgKzM4MjYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbiBcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcbiBcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cbiBcdCAqL1xuLVx0c29ydF9yX25vbmF0b21pYyhpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4rXHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4gXHRcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xuZGlmZiAtLWdpdCBhL2xpYi9zb3J0LmMgYi9saWIvc29ydC5jXG5pbmRleCA1MjM2Mzk5NWNjYzVjLi44ZTczZGM1NTQ3NmJiIDEwMDY0NFxuLS0tIGEvbGliL3NvcnQuY1xuKysrIGIvbGliL3NvcnQuY1xuQEAgLTE4NiwxMyArMTg2LDM2IEBAIHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIGkgLyAyO1xuIH1cbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnByaXYsXG4tXHRcdCAgICAgYm9vbCBtYXlfc2NoZWR1bGUpXG4rLyoqXG4rICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xuKyAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuKyAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuKyAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuKyAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4rICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbisgKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxuKyAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcbisgKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuKyAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cbisgKlxuKyAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuKyAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxuKyAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxuKyAqIGNtcF9mdW5jKGIsIGEpLlxuKyAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFx1MDAzYz0gMCwgdGhlblxuKyAqIGNtcF9mdW5jKGEsIGMpIFx1MDAzYz0gMC5cbisgKlxuKyAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcbisgKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxuKyAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuKyAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXG4rICovXG4rdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4rXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuK1x0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuK1x0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4ge1xuIFx0LyogcHJlLXNjYWxlIGNvdW50ZXJzIGZvciBwZXJmb3JtYW5jZSAqL1xuIFx0c2l6ZV90IG4gPSBudW0gKiBzaXplLCBhID0gKG51bS8yKSAqIHNpemU7XG5AQCAtMjYzLDkgKzI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0XHRcdGIgPSBwYXJlbnQoYiwgbHNiaXQsIHNpemUpO1xuIFx0XHRcdGRvX3N3YXAoYmFzZSArIGIsIGJhc2UgKyBjLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChtYXlfc2NoZWR1bGUpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRuIC09IHNpemU7XG5AQCAtMjczLDYzICsyOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdGlmIChuID09IHNpemUgKiAyIFx1MDAyNlx1MDAyNiBkb19jbXAoYmFzZSwgYmFzZSArIHNpemUsIGNtcF9mdW5jLCBwcml2KSBcdTAwM2UgMClcbiBcdFx0ZG9fc3dhcChiYXNlLCBiYXNlICsgc2l6ZSwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcbiB9XG4tXG4tLyoqXG4tICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xuLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxuLSAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcbi0gKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuLSAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cbi0gKlxuLSAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuLSAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxuLSAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxuLSAqIGNtcF9mdW5jKGIsIGEpLlxuLSAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFx1MDAzYz0gMCwgdGhlblxuLSAqIGNtcF9mdW5jKGEsIGMpIFx1MDAzYz0gMC5cbi0gKlxuLSAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcbi0gKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxuLSAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuLSAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXG4tICovXG4tdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCBmYWxzZSk7XG4tfVxuIEVYUE9SVF9TWU1CT0woc29ydF9yKTtcbiBcbi0vKipcbi0gKiBzb3J0X3Jfbm9uYXRvbWljIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cywgd2l0aCBjb25kX3Jlc2NoZWRcbi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcbi0gKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcbi0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuLSAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4tICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICpcbi0gKiBTYW1lIGFzIHNvcnRfciwgYnV0IHByZWZlcnJlZCBmb3IgbGFyZ2VyIGFycmF5cyBhcyBpdCBkb2VzIGEgcGVyaW9kaWNcbi0gKiBjb25kX3Jlc2NoZWQoKS5cbi0gKi9cbi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCB0cnVlKTtcbi19XG4tRVhQT1JUX1NZTUJPTChzb3J0X3Jfbm9uYXRvbWljKTtcbi1cbiB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHQgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4gXHQgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbkBAIC0zMzksMTkgKzMwNCw2IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdFx0LnN3YXAgPSBzd2FwX2Z1bmMsXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFx1MDAyNncsIGZhbHNlKTtcbitcdHJldHVybiBzb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woc29ydCk7XG4tXG4tdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpXG4te1xuLVx0c3RydWN0IHdyYXBwZXIgdyA9IHtcbi1cdFx0LmNtcCAgPSBjbXBfZnVuYyxcbi1cdFx0LnN3YXAgPSBzd2FwX2Z1bmMsXG4tXHR9O1xuLVxuLVx0cmV0dXJuIF9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFx1MDAyNncsIHRydWUpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHNvcnRfbm9uYXRvbWljKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjA0OjExLjA1NzQ4MDA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyMjE0ODk3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgTGludXggS2VybmVsIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9zb3J0LmhgLCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCwgYW5kIGBsaWIvc29ydC5jYC4gUmlnaHQgYXdheSwgSSBrbm93IHRoaXMgaGFzIHRvIGRvIHdpdGggc29ydGluZyBhbGdvcml0aG1zIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgc3BlY2lmaWMgY2hhbmdlcyBhcmUgdGhlIHJlbW92YWwgb2YgYHNvcnRfcl9ub25hdG9taWNgIGFuZCBgc29ydF9ub25hdG9taWNgLCBhbmQgdGhlIHJlcGxhY2VtZW50IG9mIGBzb3J0X3Jfbm9uYXRvbWljYCB3aXRoIGBzb3J0X3JgIGluIHRoZSBCUEYgdHJhY2UgY29kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGBzb3J0X3JgIGluIHRoZSBsaWJyYXJ5IGlzIHNpbXBsaWZpZWQgYnkgZ2V0dGluZyByaWQgb2YgdGhlIGBtYXlfc2NoZWR1bGVgIGFuZCBgY29uZF9yZXNjaGVkKClgIGxvZ2ljLCB3aGljaCBhbHNvIGludm9sdmVkIHJlbW92aW5nIHRoZSBgX25vbmF0b21pY2AgdmVyc2lvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGVmZm9ydCBmb2N1c2VkIG9uIHJlbW92aW5nIHByZWVtcHRpb24gcG9pbnRzIHdpdGhpbiB0aGUgc29ydGluZyByb3V0aW5lcy4gVGhlIHBhdGNoIGlzIGdldHRpbmcgcmlkIG9mIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIGluIHRoZSBjb3JlIHNvcnQgZnVuY3Rpb25zLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IEl0J3MgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCwgaWYgYW55IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIG9yIHBvdGVudGlhbCBwYWRkaW5nIGxlYWtzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBhbmQgYmFzZWQgb24gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgaW50ZXJuYWxzLCBJIGRvbid0IHNlZSBhbnkgb2YgdGhvc2UgcmVkIGZsYWdzLiBUaGlzIHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIGZvY3VzZWQgb24gcmVtb3Zpbmcgc2NoZWR1bGluZyBwb2ludHMuXG5cbkhvd2V2ZXIsIEknbSBub3QgZ29pbmcgdG8gYmUgKnRvbyogaGFzdHkuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGJwZl90cmFjZS5jYCBhbmQgYGxpYi9zb3J0LmNgIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgbGluZSAzODI2IGluIGBicGZfdHJhY2UuY2AgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBqdXN0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBtaXNzZWQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhhdCBzcGVjaWZpYyBgc29ydF9yYCBjYWxsIGluIHRoZSBCUEYgdHJhY2UgZnVuY3Rpb25hbGl0eS4gV2l0aCBteSBleHBlcmllbmNlLCBJIGNhbiBzY2FuIHRoaXMgY29kZSBhbmQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvZGQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvciBhbnkgc2l0dWF0aW9ucyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBpbmFkdmVydGVudGx5IGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MjAuMjc4OTc0MjE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk2ODQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19kdXBfaWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgwMT1zdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MTgtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4MTk6c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MjAte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4NDA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODItXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4ODM6XFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MjAuMzI4OTQ3ODQzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwODExODk4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBUcmFjZSBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmlsZSByZWFkaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwncyB0cmFjaW5nIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgQlBGIHRyYWNpbmcuIExldCBtZSBwdWxsIHVwIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBsaW5lcyAzODAwIHRvIDM4NDAuIFRoYXQgcmVnaW9uIHNob3VsZCBob2xkIHRoZSBrZXksIG9yIGF0IGxlYXN0IGEgc2lnbmlmaWNhbnQgcGllY2UsIHJlbGF0ZWQgdG8gaG93IGZpbGUgcmVhZHMgYXJlIGhhbmRsZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHRyYWNpbmcuIEhvcGVmdWxseSwgSSBjYW4gcGlucG9pbnQgd2hlcmUgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcgZGl2ZXJnZXMuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MjQuNDEwMTQxMzU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5Mjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwMDpcXHRcXG4zODAxOlxcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXFxuMzgwMjpcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zODAzOlxcdHtcXG4zODA0OlxcdFxcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XFxuMzgwNTpcXHRcXHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XFxuMzgwNjpcXHRcXHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xcbjM4MDc6XFx0XFxuMzgwODpcXHRcXHRpZHMgICAgID0gZGF0YVswXTtcXG4zODA5OlxcdFxcdGNvb2tpZXMgPSBkYXRhWzFdO1xcbjM4MTA6XFx0XFxuMzgxMTpcXHRcXHRpZiAoY29va2llcykge1xcbjM4MTI6XFx0XFx0XFx0Y29va2llX2EgPSBjb29raWVzICsgKGlkX2EgLSBpZHMpO1xcbjM4MTM6XFx0XFx0XFx0Y29va2llX2IgPSBjb29raWVzICsgKGlkX2IgLSBpZHMpO1xcbjM4MTQ6XFx0XFx0XFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XFxuMzgxNTpcXHRcXHR9XFxuMzgxNjpcXHRcXHRzd2FwKCppZF9hLCAqaWRfYik7XFxuMzgxNzpcXHR9XFxuMzgxODpcXHRcXG4zODE5OlxcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbjM4MjA6XFx0e1xcbjM4MjE6XFx0XFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XFxuMzgyMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4zODIzOlxcdFxcbjM4MjQ6XFx0XFx0LypcXG4zODI1OlxcdFxcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcXG4zODI2OlxcdFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4zODI3OlxcdFxcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cXG4zODI4OlxcdFxcdCAqL1xcbjM4Mjk6XFx0XFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDoyNC40MTA4MzkxNjlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIxMzU5NDgxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ29uc2lkZXJhdGlvbnMgZm9yIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIHBhdGNoIGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBjbGVhbjsgYmFzaWNhbGx5LCBpdCdzIHJlbW92aW5nIHRoZSBgc29ydF9ub25hdG9taWNgIGFuZCBgc29ydF9yX25vbmF0b21pY2AgdmFyaWFudHMgYW5kIGRpdGNoaW5nIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIHdpdGhpbiB0aG9zZSBzb3J0aW5nIGxvb3BzLiBJdCdzIGFsc28gbWFraW5nIGEgZGlyZWN0IGNhbGwgdG8gYHNvcnRfcmAgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgcG90ZW50aWFsIEtNU0FOIGltcGxpY2F0aW9ucy5cblxuRmlyc3QsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSByaXNrcz8gTm8sIGRlZmluaXRlbHkgbm90LiBJIGNhbiBxdWlja2x5IHJ1bGUgdGhhdCBvdXQ6IG5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBub3RoaW5nJ3MgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG5ldyBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgcHJlc2VudC4gSXQncyBub3QgY2hhbmdpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGFueSB3YXkgdGhhdCBJIGNhbiBzZWUsIGFuZCB0aGVyZSdzIG5vIHdheSBpdCBjb3VsZCBpbnRyb2R1Y2UgYW4gaW5mby1sZWFrLiBTbywgbm8sIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlYXNvbmluZyBhIGJpdCBtb3JlLCBkcmF3aW5nIHRoZSBjb250cmFzdCB3aXRoIEtBU0FOLiBXZSdyZSB0YWxraW5nIEtNU0FOIGhlcmUsIHNvIGxldCdzIHJlY2FsbCB3aGF0IGl0IGRvZXMuIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSwgc2ltcGx5IHJlbW92ZXMgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbHMgaW4gdGhlIHNvcnRpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBkcm9wcyB0aGUgYHNvcnRfbm9uYXRvbWljYCBhbmQgYHNvcnRfcl9ub25hdG9taWNgIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyB0aGUgc2luZ2xlIGNhbGxzaXRlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIHRvIHVzZSBgc29ydF9yYC4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQuIFRoZSB1bmRlcmx5aW5nIGBzb3J0YCBhbmQgYHNvcnRfcmAgcm91dGluZXMgYXJlIGFscmVhZHkgd2VsbC10ZXN0ZWQuIEFueSBwb3RlbnRpYWwgc29ydGluZyBidWdzLCBsaWtlIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIEtNU0FOJ3MgcHJvdmlkaW5nIG5vIGFkZGl0aW9uYWwgdmFsdWUgaGVyZS5cblxuUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjIzLCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjA0OjM2LjU0Njc5MTE2NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xlYW5zIHVwIHRoZSBrZXJuZWwgc29ydGluZyBsaWJyYXJ5IChsaWIvc29ydC5jIGFuZCBpbmNsdWRlL2xpbnV4L3NvcnQuaCkgYnkgcmVtb3ZpbmcgY29uZF9yZXNjaGVkKCkgbG9naWMgYW5kIHRoZSBzb3J0X25vbmF0b21pYy9zb3J0X3Jfbm9uYXRvbWljIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyBicGZfdHJhY2UuYyB0byBjYWxsIHNvcnRfcigpIGRpcmVjdGx5LiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIHBhZGRpbmcsIHVzZXIgY29waWVzIChjb3B5X3RvX3VzZXIvcHV0X3VzZXIpLCBvciBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xlYW5zIHVwIHRoZSBrZXJuZWwgc29ydGluZyBsaWJyYXJ5IChsaWIvc29ydC5jIGFuZCBpbmNsdWRlL2xpbnV4L3NvcnQuaCkgYnkgcmVtb3ZpbmcgY29uZF9yZXNjaGVkKCkgbG9naWMgYW5kIHRoZSBzb3J0X25vbmF0b21pYy9zb3J0X3Jfbm9uYXRvbWljIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyBicGZfdHJhY2UuYyB0byBjYWxsIHNvcnRfcigpIGRpcmVjdGx5LiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIHBhZGRpbmcsIHVzZXIgY29waWVzIChjb3B5X3RvX3VzZXIvcHV0X3VzZXIpLCBvciBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 18:39:53 +0000 UTC FinishedAt: 2026-09-10 19:04:38 +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": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "KPROBE_EVENTS" ], "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": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "KPROBE_EVENTS" ], "series_id": "65413d4b-ab1a-4116-a09f-05929a4451ca" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "sort_r", "check_dup_ids", "bpf_tracing_multi_attach" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvcnRfciYjMzQ7LAogICAgJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwmIzM5O3Mgc29ydCBsaWJyYXJ5IGJ5IGVsaW1pbmF0aW5nIHNvcnRfbm9uYXRvbWljIGFuZCBzb3J0X3Jfbm9uYXRvbWljIChhbmQgdGhlIHVuZGVybHlpbmcgY29uZF9yZXNjaGVkIGxvb3AgbG9naWMpLCByZWltcGxlbWVudGluZyBzb3J0X3IgZGlyZWN0bHkuIEl0IGFsc28gbW9kaWZpZXMga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIChjaGVja19kdXBfaWRzKSB0byBpbnZva2Ugc29ydF9yIGRpcmVjdGx5IGluc3RlYWQgb2Ygc29ydF9yX25vbmF0b21pYy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiByZWFjaGFibGUgY29yZSBsaWJyYXJ5IGFuZCBCUEYgdHJhY2luZyBzdWJzeXN0ZW1zIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGwgaW50ZXJmYWNlcyAoZS5nLiwgQlBGX0xJTktfQ1JFQVRFIGZvciBtdWx0aS10cmFjaW5nKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxOTowMjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvcnQuaCBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5pbmRleCBjMDFlZjgwNGEwZWIyLi44NzE3NzU5NzhhZjBhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5AQCAtMjMsMTUgJiM0MzsyMyw0IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbiBcdCAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKTtcbiBcbi0vKiBWZXJzaW9ucyB0aGF0IHBlcmlvZGljYWxseSBjYWxsIGNvbmRfcmVzY2hlZCgpOiAqL1xuLVxuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcbi1cdFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdik7XG4tXG4tdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpO1xuLVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggMjkyNjA5NTFhYTg3MS4uMWQ3ZTczZGRiYWZiZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMzgyNiw3ICYjNDM7MzgyNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuIFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xuIFx0ICogYXJlIGxlZnQgc29ydGVkLlxuIFx0ICovXG4tXHRzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcbiYjNDM7XHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG5kaWZmIC0tZ2l0IGEvbGliL3NvcnQuYyBiL2xpYi9zb3J0LmNcbmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0XG4tLS0gYS9saWIvc29ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvc29ydC5jXG5AQCAtMTg2LDEzICYjNDM7MTg2LDM2IEBAIHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIGkgLyAyO1xuIH1cbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnByaXYsXG4tXHRcdCAgICAgYm9vbCBtYXlfc2NoZWR1bGUpXG4mIzQzOy8qKlxuJiM0MzsgKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzXG4mIzQzOyAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuJiM0MzsgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbiYjNDM7ICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50XG4mIzQzOyAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4mIzQzOyAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4mIzQzOyAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGVcbiYjNDM7ICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuJiM0MzsgKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuJiM0MzsgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuJiM0MzsgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzpcbiYjNDM7ICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mXG4mIzQzOyAqIGNtcF9mdW5jKGIsIGEpLlxuJiM0MzsgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgXHUwMDNjPSAwIGFuZCBjbXBfZnVuYyhiLCBjKSBcdTAwM2M9IDAsIHRoZW5cbiYjNDM7ICogY21wX2Z1bmMoYSwgYykgXHUwMDNjPSAwLlxuJiM0MzsgKlxuJiM0MzsgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlXG4mIzQzOyAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlXG4mIzQzOyAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuJiM0MzsgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4mIzQzO1x0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbiYjNDM7XHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4mIzQzO1x0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4ge1xuIFx0LyogcHJlLXNjYWxlIGNvdW50ZXJzIGZvciBwZXJmb3JtYW5jZSAqL1xuIFx0c2l6ZV90IG4gPSBudW0gKiBzaXplLCBhID0gKG51bS8yKSAqIHNpemU7XG5AQCAtMjYzLDkgJiM0MzsyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdFx0XHRiID0gcGFyZW50KGIsIGxzYml0LCBzaXplKTtcbiBcdFx0XHRkb19zd2FwKGJhc2UgJiM0MzsgYiwgYmFzZSAmIzQzOyBjLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChtYXlfc2NoZWR1bGUpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRuIC09IHNpemU7XG5AQCAtMjczLDYzICYjNDM7MjkzLDggQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHRpZiAobiA9PSBzaXplICogMiBcdTAwMjZcdTAwMjYgZG9fY21wKGJhc2UsIGJhc2UgJiM0Mzsgc2l6ZSwgY21wX2Z1bmMsIHByaXYpIFx1MDAzZSAwKVxuIFx0XHRkb19zd2FwKGJhc2UsIGJhc2UgJiM0Mzsgc2l6ZSwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcbiB9XG4tXG4tLyoqXG4tICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xuLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxuLSAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcbi0gKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuLSAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cbi0gKlxuLSAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuLSAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxuLSAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxuLSAqIGNtcF9mdW5jKGIsIGEpLlxuLSAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFx1MDAzYz0gMCwgdGhlblxuLSAqIGNtcF9mdW5jKGEsIGMpIFx1MDAzYz0gMC5cbi0gKlxuLSAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcbi0gKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxuLSAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuLSAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXG4tICovXG4tdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCBmYWxzZSk7XG4tfVxuIEVYUE9SVF9TWU1CT0woc29ydF9yKTtcbiBcbi0vKipcbi0gKiBzb3J0X3Jfbm9uYXRvbWljIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cywgd2l0aCBjb25kX3Jlc2NoZWRcbi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcbi0gKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcbi0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuLSAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4tICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICpcbi0gKiBTYW1lIGFzIHNvcnRfciwgYnV0IHByZWZlcnJlZCBmb3IgbGFyZ2VyIGFycmF5cyBhcyBpdCBkb2VzIGEgcGVyaW9kaWNcbi0gKiBjb25kX3Jlc2NoZWQoKS5cbi0gKi9cbi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCB0cnVlKTtcbi19XG4tRVhQT1JUX1NZTUJPTChzb3J0X3Jfbm9uYXRvbWljKTtcbi1cbiB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHQgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4gXHQgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbkBAIC0zMzksMTkgJiM0MzszMDQsNiBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHRcdC5zd2FwID0gc3dhcF9mdW5jLFxuIFx0fTtcbiBcbi1cdHJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcdTAwMjZ3LCBmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcdTAwMjZ3KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChzb3J0KTtcbi1cbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbi17XG4tXHRzdHJ1Y3Qgd3JhcHBlciB3ID0ge1xuLVx0XHQuY21wICA9IGNtcF9mdW5jLFxuLVx0XHQuc3dhcCA9IHN3YXBfZnVuYyxcbi1cdH07XG4tXG4tXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dywgdHJ1ZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvcnRfciYjMzQ7LAogICAgJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGtlcm5lbCYjMzk7cyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGYwNjI5ZGNhNmI1ZWU4OTljNjE2OWEzYzIxYjU4ZThkMWMxMmM3OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDE5OjAyOjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb3J0LmggYi9pbmNsdWRlL2xpbnV4L3NvcnQuaAppbmRleCBjMDFlZjgwNGEwZWIyLi44NzE3NzU5NzhhZjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvcnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvcnQuaApAQCAtMjMsMTUgJiM0MzsyMyw0IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCiAJICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpOwogCi0vKiBWZXJzaW9ucyB0aGF0IHBlcmlvZGljYWxseSBjYWxsIGNvbmRfcmVzY2hlZCgpOiAqLwotCi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCi0JCSAgICAgIGNvbnN0IHZvaWQgKnByaXYpOwotCi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCQkgICAgY21wX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDI5MjYwOTUxYWE4NzEuLjFkN2U3M2RkYmFmYmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTM4MjYsNyAmIzQzOzM4MjYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudCkKIAkgKiBhbmQgY2hlY2sgaXQgZm9yIGR1cGxpY2F0ZXMuIFRoZSBpZHMgYW5kIGNvb2tpZXMgYXJyYXlzCiAJICogYXJlIGxlZnQgc29ydGVkLgogCSAqLwotCXNvcnRfcl9ub25hdG9taWMoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpOwomIzQzOwlzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpOwogCiAJZm9yIChpbnQgaSA9IDE7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkgewpkaWZmIC0tZ2l0IGEvbGliL3NvcnQuYyBiL2xpYi9zb3J0LmMKaW5kZXggNTIzNjM5OTVjY2M1Yy4uOGU3M2RjNTU0NzZiYiAxMDA2NDQKLS0tIGEvbGliL3NvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvc29ydC5jCkBAIC0xODYsMTMgJiM0MzsxODYsMzYgQEAgc3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpCiAJcmV0dXJuIGkgLyAyOwogfQogCi0jaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKLQotc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLAotCQkgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLAotCQkgICAgIGNvbnN0IHZvaWQgKnByaXYsCi0JCSAgICAgYm9vbCBtYXlfc2NoZWR1bGUpCiYjNDM7LyoqCiYjNDM7ICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cwomIzQzOyAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydAomIzQzOyAqIEBudW06IG51bWJlciBvZiBlbGVtZW50cwomIzQzOyAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudAomIzQzOyAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uCiYjNDM7ICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTEwKJiM0MzsgKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZQomIzQzOyAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnkKJiM0MzsgKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcAomIzQzOyAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbAomIzQzOyAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOgomIzQzOyAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZgomIzQzOyAqIGNtcF9mdW5jKGIsIGEpLgomIzQzOyAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSAmbHQ7PSAwIGFuZCBjbXBfZnVuYyhiLCBjKSAmbHQ7PSAwLCB0aGVuCiYjNDM7ICogY21wX2Z1bmMoYSwgYykgJmx0Oz0gMC4KJiM0MzsgKgomIzQzOyAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGUKJiM0MzsgKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZQomIzQzOyAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZQomIzQzOyAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuCiYjNDM7ICovCiYjNDM7dm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiYjNDM7CSAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsCiYjNDM7CSAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYywKJiM0MzsJICAgIGNvbnN0IHZvaWQgKnByaXYpCiB7CiAJLyogcHJlLXNjYWxlIGNvdW50ZXJzIGZvciBwZXJmb3JtYW5jZSAqLwogCXNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplOwpAQCAtMjYzLDkgJiM0MzsyODYsNiBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkJCWIgPSBwYXJlbnQoYiwgbHNiaXQsIHNpemUpOwogCQkJZG9fc3dhcChiYXNlICYjNDM7IGIsIGJhc2UgJiM0MzsgYywgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTsKIAkJfQotCi0JCWlmIChtYXlfc2NoZWR1bGUpCi0JCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKIAluIC09IHNpemU7CkBAIC0yNzMsNjMgJiM0MzsyOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAlpZiAobiA9PSBzaXplICogMiAmYW1wOyZhbXA7IGRvX2NtcChiYXNlLCBiYXNlICYjNDM7IHNpemUsIGNtcF9mdW5jLCBwcml2KSAmZ3Q7IDApCiAJCWRvX3N3YXAoYmFzZSwgYmFzZSAmIzQzOyBzaXplLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpOwogfQotCi0vKioKLSAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHMKLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydAotICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzCi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnQKLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uCi0gKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTAotICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uCi0gKgotICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlCi0gKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5Ci0gKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcAotICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLgotICoKLSAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbAotICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6Ci0gKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2YKLSAqIGNtcF9mdW5jKGIsIGEpLgotICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpICZsdDs9IDAgYW5kIGNtcF9mdW5jKGIsIGMpICZsdDs9IDAsIHRoZW4KLSAqIGNtcF9mdW5jKGEsIGMpICZsdDs9IDAuCi0gKgotICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZQotICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGUKLSAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZQotICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS4KLSAqLwotdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCi0JICAgIGNvbnN0IHZvaWQgKnByaXYpCi17Ci0JX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCBmYWxzZSk7Ci19CiBFWFBPUlRfU1lNQk9MKHNvcnRfcik7CiAKLS8qKgotICogc29ydF9yX25vbmF0b21pYyAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHMsIHdpdGggY29uZF9yZXNjaGVkCi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnQKLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50cwotICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50Ci0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTEwKLSAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICoKLSAqIFNhbWUgYXMgc29ydF9yLCBidXQgcHJlZmVycmVkIGZvciBsYXJnZXIgYXJyYXlzIGFzIGl0IGRvZXMgYSBwZXJpb2RpYwotICogY29uZF9yZXNjaGVkKCkuCi0gKi8KLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKLQkJICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLAotCQkgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYywKLQkJICAgICAgY29uc3Qgdm9pZCAqcHJpdikKLXsKLQlfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIHRydWUpOwotfQotRVhQT1JUX1NZTUJPTChzb3J0X3Jfbm9uYXRvbWljKTsKLQogdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAogCSAgY21wX2Z1bmNfdCBjbXBfZnVuYywKIAkgIHN3YXBfZnVuY190IHN3YXBfZnVuYykKQEAgLTMzOSwxOSAmIzQzOzMwNCw2IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkJLnN3YXAgPSBzd2FwX2Z1bmMsCiAJfTsKIAotCXJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCAmYW1wO3csIGZhbHNlKTsKJiM0MzsJcmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCAmYW1wO3cpOwogfQogRVhQT1JUX1NZTUJPTChzb3J0KTsKLQotdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKLQkJICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCi0JCSAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpCi17Ci0Jc3RydWN0IHdyYXBwZXIgdyA9IHsKLQkJLmNtcCAgPSBjbXBfZnVuYywKLQkJLnN3YXAgPSBzd2FwX2Z1bmMsCi0JfTsKLQotCXJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCAmYW1wO3csIHRydWUpOwotfQotRVhQT1JUX1NZTUJPTChzb3J0X25vbmF0b21pYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3Mgc2ltcGxpZnlpbmcgdGhlIHNvcnRpbmcgaW1wbGVtZW50YXRpb25zLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemluZyBhd2F5IHNvbWUgb3ZlcmhlYWQuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgX25vbmF0b21pY2AgdmFyaWFudHMgb2YgdGhlIHNvcnQgZnVuY3Rpb25zIChgc29ydF9yX25vbmF0b21pY2AsIGBzb3J0X25vbmF0b21pY2ApIGluIGBpbmNsdWRlL2xpbnV4L3NvcnQuaGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGltcGxlbWVudGF0aW9uIGluIGBsaWIvc29ydC5jYC4gVGhlc2UgYF9ub25hdG9taWNgIHZhcmlhbnRzIHdlcmUgbGlrZWx5IGRlc2lnbmVkIGZvciBzY2VuYXJpb3Mgd2hlcmUgcHJlZW1wdGlvbiB3YXMgdW5kZXNpcmFibGUgZHVyaW5nIHRoZSBzb3J0LCBwZXJoYXBzIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24gb3IgaW50ZXJydXB0IGNvbnRleHQuIFRoZSByZW1vdmFsIHN1Z2dlc3RzIGVpdGhlcjoKCjEuICBUaGF0IHRoZXNlIHNjZW5hcmlvcyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50LAoyLiAgVGhhdCB0aGUgbG9ja2luZyBzdHJhdGVneSBhcm91bmQgdGhlc2Ugc29ydHMgaGFzIGNoYW5nZWQsIG9yCjMuICBUaGF0IGEgbGVzcyBpbnRydXNpdmUgbWVjaGFuaXNtIGlzIG5vdyBpbiBwbGFjZSB0byBoYW5kbGUgdGhvc2UgY29uY2VybnMuCgpUaGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgY2hhbmdlLCB3aGVyZSBgc29ydF9yX25vbmF0b21pY2AgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RhbmRhcmQgYHNvcnRfcmAgaW4gYGNoZWNrX2R1cF9pZHMoKWAsIGlzIHRlbGxpbmcuIFRoaXMgZnVuY3Rpb24sIGBjaGVja19kdXBfaWRzKClgLCBsaWtlbHkgaW52b2x2ZXMgYSBkYXRhIHN0cnVjdHVyZSAocGVyaGFwcyBhIGxpc3Qgb2YgdHJhY2Vwb2ludHMgb3IgQlBGIHByb2dyYW0gaWRlbnRpZmllcnMpIHRoYXQgbmVlZHMgdG8gYmUgc29ydGVkIGZvciBlZmZpY2llbnQgbG9va3VwIG9yIGNvbXBhcmlzb24uIFRoZSBmYWN0IHRoYXQgdGhlIGBfbm9uYXRvbWljYCB2ZXJzaW9uIHdhcyAqb3JpZ2luYWxseSogdXNlZCBoZXJlIHN1Z2dlc3RzIHRoYXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgb3IgYWNjZXNzIHBhdHRlcm5zIGluIGBjaGVja19kdXBfaWRzKClgIGNvdWxkIGJlIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaWYgbm90IGNhcmVmdWxseSBtYW5hZ2VkLiBIb3dldmVyLCB0aGUgc3dpdGNoIHRvIHRoZSBzdGFuZGFyZCBgc29ydF9yYCBzaWduYWxzIGEgc2hpZnQgdG93YXJkcyBhbGxvd2luZyBwcmVlbXB0aW9uIHdpdGhpbiB0aGF0IHNvcnQsIGltcGx5aW5nIHRoZSBkZXNpZ24gaGFzIGJlZW4gbW9kaWZpZWQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgY2hlY2tfZHVwX2lkcygpYCBpcyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSByZXN0IG9mIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBmb3IgZnVydGhlciB1c2VzIG9mIHRoaXMgc29ydCBvciBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIGRlc2lnbiBvZiB0aGUgbG9ja2luZy9wcmVlbXB0aW9uIHN0cmF0ZWdpZXMuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgcmVnYXJkaW5nIGNvbmN1cnJlbmN5IGFuZCBzY2hlZHVsaW5nLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBjb25kX3Jlc2NoZWQoKWAgZnJvbSB0aGUgbmV3IGBzb3J0X3JgIGluIGBsaWIvc29ydC5jYCByYWlzZXMgcXVlc3Rpb25zIHJlZ2FyZGluZyBzY2hlZHVsaW5nIGJlaGF2aW9yLgoKVGhpcyBpcyB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGlzIHBhdGNoIG1vZGlmaWVzIHByZWVtcHRpb24gc2FmZXR5IGluIHRoZXNlIGZ1bmN0aW9ucyBhbmQgaWYgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGNvdWxkIG5vdyBiZSBzdWJqZWN0IHRvIHVuZXhwZWN0ZWQgaW50ZXJydXB0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIHBhdGNoIGFuZCBJIG11c3QgZW5zdXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgdGhvcm91Z2hseSB1bmRlcnN0b29kIGFuZCB3ZWxsLXRlc3RlZCBiZWZvcmUgYmVpbmcgYWNjZXB0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfZHVwX2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgwMT1zdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODE4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4MTk6c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgyMC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4NDA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODgyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4ODM6XHRlcnIgPSBjaGVja19kdXBfaWRzKGlkcywgY29va2llcywgY250KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODg0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTk3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBUcmFjaW5nIElzc3VlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBjb25kaXRpb25zIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbmQgYGNoZWNrX2R1cF9pZHNgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggQlBGIGludGVybmFscywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgZGVsdmUgaW50byBgYnBmX3RyYWNlLmNgIGFuZCBmb2N1cyBvbiB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lcyAzODAwIHRvIDM5MDAuIFRoYXQgcmFuZ2UgaXMgYSBsaWtlbHkgaG90c3BvdCBmb3IgdGhlIGxvZ2ljIHRoYXQgZ292ZXJucyBmdW5jdGlvbiBhdHRhY2htZW50IGFuZCBwb3RlbnRpYWwgSUQgY2xhc2hlcy4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGNyaXRpY2FsIGNoZWNrcyBhbmQgY29uZGl0aW9uYWwgY2FsbHMgdGhhdCBJIG5lZWQgdG8gZGlzc2VjdC4gR3JhYmJpbmcgbXkgdHJ1c3R5IGRlYnVnZ2VyLCBhbmQgb3BlbmluZyBgYnBmX3RyYWNlLmNgIHRvIHRoYXQgZXhhY3Qgc3BvdCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBjb250cm9sIGZsb3cgYW5kIGhlbHAgbWUgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBpbnZva2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzgwMDpcdFxuMzgwMTpcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXG4zODAyOlx0XHRcdCAgICAgICBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxuMzgwMzpcdHtcbjM4MDQ6XHRcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XG4zODA1Olx0XHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XG4zODA2Olx0XHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xuMzgwNzpcdFxuMzgwODpcdFx0aWRzICAgICA9IGRhdGFbMF07XG4zODA5Olx0XHRjb29raWVzID0gZGF0YVsxXTtcbjM4MTA6XHRcbjM4MTE6XHRcdGlmIChjb29raWVzKSB7XG4zODEyOlx0XHRcdGNvb2tpZV9hID0gY29va2llcyAmIzQzOyAoaWRfYSAtIGlkcyk7XG4zODEzOlx0XHRcdGNvb2tpZV9iID0gY29va2llcyAmIzQzOyAoaWRfYiAtIGlkcyk7XG4zODE0Olx0XHRcdHN3YXAoKmNvb2tpZV9hLCAqY29va2llX2IpO1xuMzgxNTpcdFx0fVxuMzgxNjpcdFx0c3dhcCgqaWRfYSwgKmlkX2IpO1xuMzgxNzpcdH1cbjM4MTg6XHRcbjM4MTk6XHRzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbjM4MjA6XHR7XG4zODIxOlx0XHR2b2lkICpkYXRhWzJdID0geyBpZHMsIGNvb2tpZXMgfTtcbjM4MjI6XHRcdGludCBlcnIgPSAwO1xuMzgyMzpcdFxuMzgyNDpcdFx0LypcbjM4MjU6XHRcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcbjM4MjY6XHRcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcbjM4Mjc6XHRcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cbjM4Mjg6XHRcdCAqL1xuMzgyOTpcdFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcbjM4MzA6XHRcbjM4MzE6XHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4zODMyOlx0XHRcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xuMzgzMzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zODM0Olx0XHRcdFx0YnJlYWs7XG4zODM1Olx0XHRcdH1cbjM4MzY6XHRcdH1cbjM4Mzc6XHRcdHJldHVybiBlcnI7XG4zODM4Olx0fVxuMzgzOTpcdFxuMzg0MDpcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjM4NDE6XHR7XG4zODQyOlx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XG4zODQzOlx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XG4zODQ0Olx0XHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xuMzg0NTpcdFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XG4zODQ2Olx0XHR1NjQgX191c2VyICp1Y29va2llcztcbjM4NDc6XHRcdHU2NCAqY29va2llcyA9IE5VTEw7XG4zODQ4Olx0XHR1MzIgX191c2VyICp1aWRzO1xuMzg0OTpcdFx0aW50IGVycjtcbjM4NTA6XHRcbjM4NTE6XHRcdHVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XG4zODUyOlx0XHRjbnQgPSBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY250O1xuMzg1MzpcdFxuMzg1NDpcdFx0aWYgKCFjbnQgfHwgIXVpZHMpXG4zODU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg1NjpcdFx0aWYgKGNudCBcdTAwM2UgTUFYX1RSQUNJTkdfTVVMVElfQ05UKVxuMzg1NzpcdFx0XHRyZXR1cm4gLUUyQklHO1xuMzg1ODpcdFx0aWYgKGF0dHItXHUwMDNlbGlua19jcmVhdGUuZmxhZ3MgfHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQpXG4zODU5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg2MDpcdFxuMzg2MTpcdFx0aWRzID0ga3ZtYWxsb2Nfb2JqcygqaWRzLCBjbnQpO1xuMzg2MjpcdFx0aWYgKCFpZHMpXG4zODYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzg2NDpcdFxuMzg2NTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGlkcywgdWlkcywgY250ICogc2l6ZW9mKCppZHMpKSkge1xuMzg2NjpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMzg2NzpcdFx0XHRnb3RvIGVycm9yO1xuMzg2ODpcdFx0fVxuMzg2OTpcdFxuMzg3MDpcdFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNvb2tpZXMpO1xuMzg3MTpcdFx0aWYgKHVjb29raWVzKSB7XG4zODcyOlx0XHRcdGNvb2tpZXMgPSBrdm1hbGxvY19vYmpzKCpjb29raWVzLCBjbnQpO1xuMzg3MzpcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbjM4NzQ6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg3NTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4zODc2Olx0XHRcdH1cbjM4Nzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xuMzg3ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODc5Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4ODA6XHRcdFx0fVxuMzg4MTpcdFx0fVxuMzg4MjpcdFxuMzg4MzpcdFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XG4zODg0Olx0XHRpZiAoZXJyKVxuMzg4NTpcdFx0XHRnb3RvIGVycm9yO1xuMzg4NjpcdFxuMzg4NzpcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJKSB7XG4zODg4Olx0XHRcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcbjM4ODk6XHRcdFx0aWYgKCFmZXhpdHMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFNvcnQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc29ydF9ub25hdG9taWNgIGFuZCBgc29ydF9yX25vbmF0b21pY2AgYXJlIGdvbmUuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgd2VyZSByZW1vdmVkLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYWR2YW5jZW1lbnRzIGluIHRoZSBrZXJuZWwmIzM5O3MgcHJlZW1wdGlvbiBtZWNoYW5pc21zIOKAkyBzcGVjaWZpY2FsbHkgbGF6eSBwcmVlbXB0aW9uLCBkeW5hbWljIHByZWVtcHRpb24sIG9yIHBlcmhhcHMgYmVjYXVzZSBgY29uZF9yZXNjaGVkYCBiZWNhbWUgdW5uZWNlc3Nhcnkgb3Igd2FzIGVsaW1pbmF0ZWQgaW4gbWFueSBhcmVhcywgaW5jbHVkaW5nIHdpdGhpbiB0aGUgc29ydCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcywgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbGliL3NvcnQuY2AuIExldCYjMzk7cyBleGFtaW5lIHRoYXQgZmlsZS4gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBhdCB0aGUgZnVsbCBmaWxlLCBvciBhdCBsZWFzdCBhIHNpemVhYmxlIGNodW5rIG9mIGl0LCBpbiBvcmRlciB0byBnZXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFRoaXMgc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIHJlbW92YWwgb2YgdGhvc2Ugc3BlY2lmaWMgc29ydCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvc29ydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHQgKi9cbiAxODE6XHRfX2F0dHJpYnV0ZV9jb25zdF9fIF9fYWx3YXlzX2lubGluZVxuIDE4MjpcdHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuIDE4MzpcdHtcbiAxODQ6XHRcdGkgLT0gc2l6ZTtcbiAxODU6XHRcdGkgLT0gc2l6ZSBcdTAwMjYgLShpIFx1MDAyNiBsc2JpdCk7XG4gMTg2Olx0XHRyZXR1cm4gaSAvIDI7XG4gMTg3Olx0fVxuIDE4ODpcdFxuIDE4OTpcdC8qKlxuIDE5MDpcdCAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHNcbiAxOTE6XHQgKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcbiAxOTI6XHQgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbiAxOTM6XHQgKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcbiAxOTQ6XHQgKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuIDE5NTpcdCAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4gMTk2Olx0ICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4gMTk3Olx0ICpcbiAxOTg6XHQgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGVcbiAxOTk6XHQgKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5XG4gMjAwOlx0ICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXBcbiAyMDE6XHQgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuXG4gMjAyOlx0ICpcbiAyMDM6XHQgKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWxcbiAyMDQ6XHQgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzpcbiAyMDU6XHQgKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2ZcbiAyMDY6XHQgKiBjbXBfZnVuYyhiLCBhKS5cbiAyMDc6XHQgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgXHUwMDNjPSAwIGFuZCBjbXBfZnVuYyhiLCBjKSBcdTAwM2M9IDAsIHRoZW5cbiAyMDg6XHQgKiBjbXBfZnVuYyhhLCBjKSBcdTAwM2M9IDAuXG4gMjA5Olx0ICpcbiAyMTA6XHQgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlXG4gMjExOlx0ICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGVcbiAyMTI6XHQgKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2VcbiAyMTM6XHQgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLlxuIDIxNDpcdCAqL1xuIDIxNTpcdHZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIDIxNjpcdFx0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbiAyMTc6XHRcdCAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcbiAyMTg6XHRcdCAgICBjb25zdCB2b2lkICpwcml2KVxuIDIxOTpcdHtcbiAyMjA6XHRcdC8qIHByZS1zY2FsZSBjb3VudGVycyBmb3IgcGVyZm9ybWFuY2UgKi9cbiAyMjE6XHRcdHNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplO1xuIDIyMjpcdFx0Y29uc3QgdW5zaWduZWQgaW50IGxzYml0ID0gc2l6ZSBcdTAwMjYgLXNpemU7ICAvKiBVc2VkIHRvIGZpbmQgcGFyZW50ICovXG4gMjIzOlx0XHRzaXplX3Qgc2hpZnQgPSAwO1xuIDIyNDpcdFxuIDIyNTpcdFx0aWYgKCFhKVx0XHQvKiBudW0gXHUwMDNjIDIgfHwgc2l6ZSA9PSAwICovXG4gMjI2Olx0XHRcdHJldHVybjtcbiAyMjc6XHRcbiAyMjg6XHRcdC8qIGNhbGxlZCBmcm9tICYjMzk7c29ydCYjMzk7IHdpdGhvdXQgc3dhcCBmdW5jdGlvbiwgbGV0JiMzOTtzIHBpY2sgdGhlIGRlZmF1bHQgKi9cbiAyMjk6XHRcdGlmIChzd2FwX2Z1bmMgPT0gU1dBUF9XUkFQUEVSIFx1MDAyNlx1MDAyNiAhKChzdHJ1Y3Qgd3JhcHBlciAqKXByaXYpLVx1MDAzZXN3YXApXG4gMjMwOlx0XHRcdHN3YXBfZnVuYyA9IE5VTEw7XG4gMjMxOlx0XG4gMjMyOlx0XHRpZiAoIXN3YXBfZnVuYykge1xuIDIzMzpcdFx0XHRpZiAoaXNfYWxpZ25lZChiYXNlLCBzaXplLCA4KSlcbiAyMzQ6XHRcdFx0XHRzd2FwX2Z1bmMgPSBTV0FQX1dPUkRTXzY0O1xuIDIzNTpcdFx0XHRlbHNlIGlmIChpc19hbGlnbmVkKGJhc2UsIHNpemUsIDQpKVxuIDIzNjpcdFx0XHRcdHN3YXBfZnVuYyA9IFNXQVBfV09SRFNfMzI7XG4gMjM3Olx0XHRcdGVsc2VcbiAyMzg6XHRcdFx0XHRzd2FwX2Z1bmMgPSBTV0FQX0JZVEVTO1xuIDIzOTpcdFx0fVxuIDI0MDpcdFxuIDI0MTpcdFx0LypcbiAyNDI6XHRcdCAqIExvb3AgaW52YXJpYW50czpcbiAyNDM6XHRcdCAqIDEuIGVsZW1lbnRzIFthLG4pIHNhdGlzZnkgdGhlIGhlYXAgcHJvcGVydHkgKGNvbXBhcmUgZ3JlYXRlciB0aGFuXG4gMjQ0Olx0XHQgKiAgICBhbGwgb2YgdGhlaXIgY2hpbGRyZW4pLFxuIDI0NTpcdFx0ICogMi4gZWxlbWVudHMgW24sbnVtKnNpemUpIGFyZSBzb3J0ZWQsIGFuZFxuIDI0NjpcdFx0ICogMy4gYSBcdTAwM2M9IGIgXHUwMDNjPSBjIFx1MDAzYz0gZCBcdTAwM2M9IG4gKHdoZW5ldmVyIHRoZXkgYXJlIHZhbGlkKS5cbiAyNDc6XHRcdCAqL1xuIDI0ODpcdFx0Zm9yICg7Oykge1xuIDI0OTpcdFx0XHRzaXplX3QgYiwgYywgZDtcbiAyNTA6XHRcbiAyNTE6XHRcdFx0aWYgKGEpXHRcdFx0LyogQnVpbGRpbmcgaGVhcDogc2lmdCBkb3duIGEgKi9cbiAyNTI6XHRcdFx0XHRhIC09IHNpemUgXHUwMDNjXHUwMDNjIHNoaWZ0O1xuIDI1MzpcdFx0XHRlbHNlIGlmIChuIFx1MDAzZSAzICogc2l6ZSkgeyAvKiBTb3J0aW5nOiBFeHRyYWN0IHR3byBsYXJnZXN0IGVsZW1lbnRzICovXG4gMjU0Olx0XHRcdFx0biAtPSBzaXplO1xuIDI1NTpcdFx0XHRcdGRvX3N3YXAoYmFzZSwgYmFzZSAmIzQzOyBuLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIDI1NjpcdFx0XHRcdHNoaWZ0ID0gZG9fY21wKGJhc2UgJiM0Mzsgc2l6ZSwgYmFzZSAmIzQzOyAyICogc2l6ZSwgY21wX2Z1bmMsIHByaXYpIFx1MDAzYz0gMDtcbiAyNTc6XHRcdFx0XHRhID0gc2l6ZSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4gMjU4Olx0XHRcdFx0biAtPSBzaXplO1xuIDI1OTpcdFx0XHRcdGRvX3N3YXAoYmFzZSAmIzQzOyBhLCBiYXNlICYjNDM7IG4sIHNpemUsIHN3YXBfZnVuYywgcHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgU29ydGluZyBMaWJyYXJ5IFJlZmFjdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsaWIvc29ydC5jYCBjb25jZXJuaW5nIGBzb3J0X3JgIGFuZCBgc29ydGAsIGFuZCBzb21lIHJlbGF0ZWQgY2hhbmdlcyBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgYGluY2x1ZGUvbGludXgvc29ydC5oYC4gVGhlIGNvcmUgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/CgpJIG5lZWQgdG8gYXBwbHkgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBGaXJzdCwgcmVhY2hhYmlsaXR5LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgaXQmIzM5O3Mgbm90IHJlYWNoYWJsZSwgZG9uJiMzOTt0IGJvdGhlci4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBgc29ydF9yYCBhbmQgYHNvcnRgIGFyZSBpbiBgbGliL3NvcnQuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG5vdCBhc3N1bWUgdGhhdCB0aGUgYXV0aG9ycyBhcmUgY29ycmVjdCBpbiB0aGVpciBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7LiBDb2RlIHJlZmFjdG9yaW5ncyBjYW4gaW50cm9kdWNlIGJ1Z3MuIEFuZCBub3cgSSBzZWUgdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhIHBhdGggaW50byBCUEYgZnVuY3Rpb25hbGl0eS4gYGNoZWNrX2R1cF9pZHNgLCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIG5vdyBjYWxscyB0aGUgbW9kaWZpZWQgYHNvcnRfcmAuIEJpbmdvISBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBwYXJ0IG9mIGEgcmVhY2hhYmxlIEJQRiBzeXNjYWxsIHBhdGgg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBCUEZfTElOS19DUkVBVEVgIHdpdGggbXVsdGktYXR0YWNoIHRyYWNpbmcuIFRoaXMgbWVhbnMgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiByZWFjaGFibGUuCgpUaGUgaW5zdHJ1Y3Rpb25zIGd1aWRlIG1lIHRvIGNvbnNpZGVyIGlmIHRoZSBtb2RpZmljYXRpb25zIGZhbGwgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLCBzcGVjaWZpY2FsbHkgJiMzNDtDb3JlIFN1YnN5c3RlbXMmIzM0OyBhbmQgJiMzNDtSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHMuJiMzNDsgVGhpcyBjaGFuZ2UgYWZmZWN0cyBjb2RlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIChCUEYgdHJhY2luZywgYSBjb3JlIHN1YnN5c3RlbSkgYW5kIGRvZXMgbW9kaWZ5IHNvcnRpbmcgbG9naWMuIFNvLCBpdCBkZWZpbml0ZWx5IG1lZXRzIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGZvY3VzIHN5bWJvbHMuIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGUga2V5IGhlcmUgaXMgbm90IHRvICYjMzQ7ZGlsdXRlJiMzNDsgdGhlIGZ1enppbmcgZWZmb3J0LiBJIGhhdmU6IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFzIHRoZSBCUEYgZW50cnkgcG9pbnQsIGBjaGVja19kdXBfaWRzYCBhcyBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0IHVzZXMgYHNvcnRfcmAuIGBzb3J0X3JgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGEga2V5IGV4cG9ydC4gVGhlIGBzb3J0YCBmdW5jdGlvbiAod2hpY2ggbm93IGNhbGxzIGBzb3J0X3JgKSBpcyBhbHNvIGEga2V5IGZ1bmN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgcmVmYWN0b3JpbmcuICpCdXQqLCBJIHNob3VsZCBjaGVjayBpZiBgc29ydGAgb3IgYHNvcnRfcmAgaXMgdWJpcXVpdG91cy4gSWYgaXQgaXMsIHRoZW4gSSBuZWVkIHRvIHJlZmluZSB0aGUgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBIb3cgbWFueSBwbGFjZXMgaW4gdGhlIGtlcm5lbCBjYWxsIGBzb3J0YCBvciBgc29ydF9yYD8gSSBtdXN0IGNoZWNrIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvcnRfclxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jPTg0Nj1ib29sIGludGVsX2RwX2xpbmtfY2Fwc191cGRhdGUoc3RydWN0IGludGVsX2RwX2xpbmtfY2FwcyAqbGlua19jYXBzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtODk0LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYzo4OTU6XHRzb3J0X3IobGlua19jYXBzLVx1MDAzZWNvbmZpZ3MsIGxpbmtfY2Fwcy1cdTAwM2VudW1fY29uZmlncyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtODk2LVx0ICAgICAgIHNpemVvZihsaW5rX2NhcHMtXHUwMDNlY29uZmlnc1swXSksXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy05MDQtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jOjkwNTpcdHNvcnRfcihsaW5rX2NhcHMtXHUwMDNlcmF0ZV9sYW5lX21hcCwgbGlua19jYXBzLVx1MDAzZW51bV9jb25maWdzLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy05MDYtXHQgICAgICAgc2l6ZW9mKGxpbmtfY2Fwcy1cdTAwM2VyYXRlX2xhbmVfbWFwWzBdKSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkwOS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmM6OTEwOlx0c29ydF9yKGxpbmtfY2Fwcy1cdTAwM2VsYW5lX3JhdGVfbWFwLCBsaW5rX2NhcHMtXHUwMDNlbnVtX2NvbmZpZ3MsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkxMS1cdCAgICAgICBzaXplb2YobGlua19jYXBzLVx1MDAzZWxhbmVfcmF0ZV9tYXBbMF0pLFxuLS1cbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jPTM5Mz12NGwyX2gyNjRfYnVpbGRfcF9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcbi0tXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYy0zOTctXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXHUwMDNldW5vcmRlcmVkX3JlZmxpc3RbMF0pICogYnVpbGRlci1cdTAwM2VudW1fdmFsaWQpO1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6Mzk4Olx0c29ydF9yKHJlZmxpc3QsIGJ1aWxkZXItXHUwMDNlbnVtX3ZhbGlkLCBzaXplb2YoKnJlZmxpc3QpLFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtMzk5LVx0ICAgICAgIHY0bDJfaDI2NF9wX3JlZl9saXN0X2NtcCwgTlVMTCwgYnVpbGRlcik7XG4tLVxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM9NDIzPXY0bDJfaDI2NF9idWlsZF9iX3JlZl9saXN0cyhjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcbi0tXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYy00MjgtXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXHUwMDNldW5vcmRlcmVkX3JlZmxpc3RbMF0pICogYnVpbGRlci1cdTAwM2VudW1fdmFsaWQpO1xuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6NDI5Olx0c29ydF9yKGIwX3JlZmxpc3QsIGJ1aWxkZXItXHUwMDNlbnVtX3ZhbGlkLCBzaXplb2YoKmIwX3JlZmxpc3QpLFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtNDMwLVx0ICAgICAgIHY0bDJfaDI2NF9iMF9yZWZfbGlzdF9jbXAsIE5VTEwsIGJ1aWxkZXIpO1xuLS1cbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTQzMy1cdCAgICAgICBzaXplb2YoYnVpbGRlci1cdTAwM2V1bm9yZGVyZWRfcmVmbGlzdFswXSkgKiBidWlsZGVyLVx1MDAzZW51bV92YWxpZCk7XG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYzo0MzQ6XHRzb3J0X3IoYjFfcmVmbGlzdCwgYnVpbGRlci1cdTAwM2VudW1fdmFsaWQsIHNpemVvZigqYjFfcmVmbGlzdCksXG5kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWgyNjQuYy00MzUtXHQgICAgICAgdjRsMl9oMjY0X2IxX3JlZl9saXN0X2NtcCwgTlVMTCwgYnVpbGRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9zb3J0LmgtMTYtXG5pbmNsdWRlL2xpbnV4L3NvcnQuaDoxNzp2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbmluY2x1ZGUvbGludXgvc29ydC5oLTE4LVx0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTQxNTA9c3RydWN0IGJ0Zl9yZWNvcmQgKmJ0Zl9wYXJzZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL2JwZi9idGYuYy00MjczLVxua2VybmVsL2JwZi9idGYuYzo0Mjc0Olx0c29ydF9yKHJlYy1cdTAwM2VmaWVsZHMsIHJlYy1cdTAwM2VjbnQsIHNpemVvZihzdHJ1Y3QgYnRmX2ZpZWxkKSwgYnRmX2ZpZWxkX2NtcCxcbmtlcm5lbC9icGYvYnRmLmMtNDI3NS1cdCAgICAgICBOVUxMLCByZWMpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNzgwPWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4NjAtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjg2MTpcdFx0c29ydF9yKHVzLnN5bXMsIGNudCwgc2l6ZW9mKCp1cy5zeW1zKSwgc3ltYm9sc19jbXBfcixcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yODYyLVx0XHQgICAgICAgc3ltYm9sc19zd2FwX3IsIFx1MDAyNmRhdGEpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTA2LVx0XHQgKi9cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTA3Olx0XHRzb3J0X3IoYWRkcnMsIGNudCwgc2l6ZW9mKCphZGRycyksXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjkwOC1cdFx0ICAgICAgIGJwZl9rcHJvYmVfbXVsdGlfY29va2llX2NtcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgyOC1cdCAqL1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4Mjk6XHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzAtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9ODM2Nz1zdGF0aWMgdm9pZCBzZXR1cF90cmFjZV9zY3JhdGNoKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtODQwMy1cdG5yX2VudHJpZXMgPSB0c2NyYXRjaC1cdTAwM2Vucl9lbnRyaWVzO1xua2VybmVsL3RyYWNlL3RyYWNlLmM6ODQwNDpcdHNvcnRfcih0c2NyYXRjaC1cdTAwM2VlbnRyaWVzLCBucl9lbnRyaWVzLCBzaXplb2Yoc3RydWN0IHRyYWNlX21vZF9lbnRyeSksXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy04NDA1LVx0ICAgICAgIG1vZF9hZGRyX2NvbXAsIE5VTEwsIE5VTEwpO1xuLS1cbmxpYi9zb3J0LmM9MTgyPXN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuLS1cbmxpYi9zb3J0LmMtMjE0LSAqL1xubGliL3NvcnQuYzoyMTU6dm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG5saWIvc29ydC5jLTIxNi1cdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tLVxubGliL3NvcnQuYz0yOTg9dm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLS1cbmxpYi9zb3J0LmMtMzA2LVxubGliL3NvcnQuYzozMDc6XHRyZXR1cm4gc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFx1MDAyNncpO1xubGliL3NvcnQuYy0zMDgtfVxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jPTUwNz1zdGF0aWMgaW50IGR1bXBfYnRmX2tmdW5jcyhzdHJ1Y3QgYnRmX2R1bXAgKmQsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zilcbi0tXG50b29scy9icGYvYnBmdG9vbC9idGYuYy01NDctXHQvKiBTb3J0IGtmdW5jcyBieSBuYW1lIGZvciBpbXByb3ZlZCB2bWxpbnV4Lmggc3RhYmlsaXR5ICAqL1xudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmM6NTQ4Olx0cXNvcnRfcihrZnVuY3MuZWxlbXMsIGtmdW5jcy5jbnQsIHNpemVvZigqa2Z1bmNzLmVsZW1zKSwgY21wX2tmdW5jcywgKHZvaWQgKilidGYpO1xudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMtNTQ5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2Z1bmNzLmNudDsgaSYjNDM7JiM0MzspIHtcbi0tXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jPTE1MzU9c3RhdGljIGludCBzb3J0X2J0Zl9ieV9uYW1lKHN0cnVjdCBidGYgKmJ0Zilcbi0tXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jLTE1NTktXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jOjE1NjA6XHRxc29ydF9yKHBlcm11dGVfaWRzLCBucl90eXBlcywgc2l6ZW9mKCpwZXJtdXRlX2lkcyksIGNtcF90eXBlX25hbWVzLFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYy0xNTYxLVx0XHRidGYpO1xuLS1cbnRvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmM9MzExPXN0YXRpYyBpbnQgc29ydF9yZWwoc3RydWN0IHJlbF9pbmZvICpyaSlcbi0tXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jLTMyMC1cdFx0cmktXHUwMDNlc29ydGVkW2ldID0gaTtcbnRvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmM6MzIxOlx0cXNvcnRfcihyaS1cdTAwM2Vzb3J0ZWQsIHJpLVx1MDAzZW5yX2VudHJpZXMsIHN6LCByZWxfY21wLCByaSk7XG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jLTMyMi1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgRnVuY3Rpb24gVXNhZ2UqKgoKT2theSwgc28gYHNvcnRfcmAgaXNuJiMzOTt0IHNvbWUgd2lkZXNwcmVhZCB1dGlsaXR5IGZ1bmN0aW9uLiBHb29kIHRvIGtub3cuIE15IGluaXRpYWwgaHVuY2ggdGhhdCBpdCB3YXMgZGVlcGx5IGluZ3JhaW5lZCBldmVyeXdoZXJlIGlzIHdyb25nLiBJdCYjMzk7cyBhY3R1YWxseSBjYWxsZWQgaW4gdGhlc2UgcmVsYXRpdmVseSBjb250YWluZWQsIHNwZWNpYWxpemVkIGFyZWFzOiBgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBgYnRmX3BhcnNlX2ZpZWxkc2AsIGFuZCBhIGZldyBvdGhlcnMuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogdWJpcXVpdG91cyBpcyBpbXBvcnRhbnQ7IGl0IG1lYW5zIGFueSBjaGFuZ2VzIG9yIGRlYnVnZ2luZyBlZmZvcnRzIHdpbGwgYmUgZm9jdXNlZC4KCkdpdmVuIHRoZSBjb250ZXh0LCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbmQgYGNoZWNrX2R1cF9pZHNgIHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXMgd2VsbCwgc2luY2UgdGhleSYjMzk7cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGNoZWNrIHdoYXQmIzM5O3MgbmVlZGVkIGZvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBzZWFyY2ggdG8gZGV0ZXJtaW5lIHdoZXJlIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGFjdHVhbGx5IGNvbXBpbGVkLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03OTg9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjc5OTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpO1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04MDAtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg1Nz1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NTg6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg1OS17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTc5Mz1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQzLVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg0NDpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQ1LVx0XHRlbHNlXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4MTk9c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzktXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzg0MDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MjktXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gQlBGIFRyYWNlIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgQlBGIHRyYWNpbmcgc2V0dXAgd29ya3MsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYW5kIGBjaGVja19kdXBfaWRzYCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZXMgMzgwMCB0byAzOTQwLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBgI2lmZGVmYCBjb25kaXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB3aWxsIHRlbGwgbWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgb3IgaW5jbHVkZWQgYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IHRoZSBiZWdpbm5pbmcsIGxpbmVzIDEgdG8gNTAsIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIGluY2x1ZGUgc3RhdGVtZW50cyBhcmUgbWFuYWdlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0aXZlLiBHb3R0YSBiZSBlZmZpY2llbnQgaGVyZSwganVzdCBhIHF1aWNrIHNjYW4gdG8gb3JpZW50IG15c2VsZiwgdGhlbiBJIHdpbGwgZGl2ZSBkZWVwZXIgYXMgbmVlZGVkLiBJIGhvcGUgdGhpcyBnZXRzIG1lIHVwIHRvIHNwZWVkLCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc4MDpcdFx0fVxuMzc4MTpcdH1cbjM3ODI6XHQjZW5kaWZcbjM3ODM6XHRcbjM3ODQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG4zNzg1Olx0XHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcbjM3ODY6XHRcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxuMzc4NzpcdFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbjM3ODg6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbjM3ODk6XHRcdC5zaG93X2ZkaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvLFxuMzc5MDpcdCNlbmRpZlxuMzc5MTpcdH07XG4zNzkyOlx0XG4zNzkzOlx0c3RhdGljIGludCBpZHNfY21wX3IoY29uc3Qgdm9pZCAqcGEsIGNvbnN0IHZvaWQgKnBiLCBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxuMzc5NDpcdHtcbjM3OTU6XHRcdHUzMiBhID0gKih1MzIgKikgcGE7XG4zNzk2Olx0XHR1MzIgYiA9ICoodTMyICopIHBiO1xuMzc5NzpcdFxuMzc5ODpcdFx0cmV0dXJuIChhIFx1MDAzZSBiKSAtIChhIFx1MDAzYyBiKTtcbjM3OTk6XHR9XG4zODAwOlx0XG4zODAxOlx0c3RhdGljIHZvaWQgaWRzX3N3YXBfcih2b2lkICphLCB2b2lkICpiLCBpbnQgc2l6ZSBfX21heWJlX3VudXNlZCxcbjM4MDI6XHRcdFx0ICAgICAgIGNvbnN0IHZvaWQgKnByaXYgX19tYXliZV91bnVzZWQpXG4zODAzOlx0e1xuMzgwNDpcdFx0dTY0ICpjb29raWVfYSwgKmNvb2tpZV9iLCAqY29va2llcztcbjM4MDU6XHRcdHUzMiAqaWRfYSA9IGEsICppZF9iID0gYiwgKmlkcztcbjM4MDY6XHRcdHZvaWQgKipkYXRhID0gKHZvaWQgKiopIHByaXY7XG4zODA3Olx0XG4zODA4Olx0XHRpZHMgICAgID0gZGF0YVswXTtcbjM4MDk6XHRcdGNvb2tpZXMgPSBkYXRhWzFdO1xuMzgxMDpcdFxuMzgxMTpcdFx0aWYgKGNvb2tpZXMpIHtcbjM4MTI6XHRcdFx0Y29va2llX2EgPSBjb29raWVzICYjNDM7IChpZF9hIC0gaWRzKTtcbjM4MTM6XHRcdFx0Y29va2llX2IgPSBjb29raWVzICYjNDM7IChpZF9iIC0gaWRzKTtcbjM4MTQ6XHRcdFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XG4zODE1Olx0XHR9XG4zODE2Olx0XHRzd2FwKCppZF9hLCAqaWRfYik7XG4zODE3Olx0fVxuMzgxODpcdFxuMzgxOTpcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuMzgyMDpcdHtcbjM4MjE6XHRcdHZvaWQgKmRhdGFbMl0gPSB7IGlkcywgY29va2llcyB9O1xuMzgyMjpcdFx0aW50IGVyciA9IDA7XG4zODIzOlx0XG4zODI0Olx0XHQvKlxuMzgyNTpcdFx0ICogU29ydCBpZHMgYXJyYXkgKHRvZ2V0aGVyIHdpdGggY29va2llcyBhcnJheSBpZiBkZWZpbmVkKVxuMzgyNjpcdFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xuMzgyNzpcdFx0ICogYXJlIGxlZnQgc29ydGVkLlxuMzgyODpcdFx0ICovXG4zODI5Olx0XHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xuMzgzMDpcdFxuMzgzMTpcdFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbjM4MzI6XHRcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG4zODMzOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjM4MzQ6XHRcdFx0XHRicmVhaztcbjM4MzU6XHRcdFx0fVxuMzgzNjpcdFx0fVxuMzgzNzpcdFx0cmV0dXJuIGVycjtcbjM4Mzg6XHR9XG4zODM5Olx0XG4zODQwOlx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzg0MTpcdHtcbjM4NDI6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcbjM4NDM6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcbjM4NDQ6XHRcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XG4zODQ1Olx0XHR1MzIgY250LCAqaWRzID0gTlVMTDtcbjM4NDY6XHRcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xuMzg0NzpcdFx0dTY0ICpjb29raWVzID0gTlVMTDtcbjM4NDg6XHRcdHUzMiBfX3VzZXIgKnVpZHM7XG4zODQ5Olx0XHRpbnQgZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU3OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOgoKKipEaXZpbmcgaW50byBgYnBmX3RyYWNlLmNgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGdyYWIgdGhhdCBNYWtlZmlsZSBhbmQgcG9rZSBhcm91bmQgdGhlIGAjaWZkZWZgIGJsb2NrcyB3aXRoaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AsIGVzcGVjaWFsbHkgYXMgdGhleSByZWxhdGUgdG8gYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBmZXcgcmVhc29ucyBmb3IgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uOiBJdCBjb3VsZCBiZSBhYm91dCBrZXJuZWwgdmVyc2lvbiBzdXBwb3J0LCBwZXJoYXBzIHRoaXMgaXMgYSBuZXdlciBhZGRpdGlvbjsgbWF5YmUgdGhlcmUmIzM5O3MgYW4gb3B0aW9uIGZsYWcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGR1cmluZyBjb21waWxhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5OyBwb3NzaWJseSBzb21lIGRlcGVuZGVuY2llcyBuZWVkIHRvIGJlIHByZXNlbnQgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIG9yIGlmIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXRoIHRvIGVuYWJsZSBpdC4gVGhpcyB3aWxsIGdyZWF0bHkgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN0YWJpbGl0eSBhbmQgcG9ydGFiaWxpdHkgb2YgYW55IGNvZGUgSSB3cml0ZSBsZXZlcmFnaW5nIGl0LiBJJiMzOTttIGtlZW4gdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIGxvZ2ljIHNvIEkga25vdyB3aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgZm9yIHN1Y2Nlc3NmdWwgYnVpbGRzLiBTbywgSSBuZWVkIHRoZSBNYWtlZmlsZSBhbmQgdGhlIHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBicm9hZGVyIEJQRiB0cmFjaW5nIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2UubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBicGZfdHJhY2UuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIHRoZSBrZXJuZWwgdHJhY2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBsaW5lcyAzNzgwIGFuZCAzOTIwIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgZmFjdCB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGAjaWZkZWZgcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHksIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBtaWdodCBub3QgYWx3YXlzIGJlIGF2YWlsYWJsZS4KCktub3dpbmcgdGhlIGtlcm5lbCwgSSBjYW4gYW50aWNpcGF0ZSBhIGZldyBwb3NzaWJpbGl0aWVzLiBJdCBjb3VsZCBiZSB0aWVkIHRvIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiAobGlrZSBvbmUgcmVsYXRpbmcgdG8gQlBGIG9yIHRyYWNpbmcgZmVhdHVyZXMpLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGV4cGVyaW1lbnRhbCBvciBpbnRlcm5hbCBmbGFnLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwb3J0YWJpbGl0eSBhbmQgZmVhdHVyZSBzZXQgb2YgYW55IEJQRi1iYXNlZCB0cmFjaW5nIGFwcGxpY2F0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBvciBhbmFseXppbmcuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIHRvIGF2b2lkIGFueSB1bmZvcmVzZWVuIHJ1bnRpbWUgZXJyb3JzLiBTbywgbGV0JiMzOTtzIGdldCB0aG9zZSBsaW5lcyBvcGVuIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc1MDpcdFxuMzc1MTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjM3NTI6XHRcdH1cbjM3NTM6XHRcbjM3NTQ6XHRcdHJldHVybiBlcnI7XG4zNzU1Olx0fVxuMzc1NjpcdFxuMzc1NzpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuMzc1ODpcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbjM3NTk6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbjM3NjA6XHR7XG4zNzYxOlx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4zNzYyOlx0XHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4zNzYzOlx0XHRib29sIGhhc19jb29raWVzID0gISF0cl9saW5rLVx1MDAzZWNvb2tpZXM7XG4zNzY0Olx0XG4zNzY1Olx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7YXR0YWNoX3R5cGU6XFx0JXVcXG5cJiMzNDssIHRyX2xpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZSk7XG4zNzY2Olx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7Y250OlxcdCV1XFxuXCYjMzQ7LCB0cl9saW5rLVx1MDAzZW5vZGVzX2NudCk7XG4zNzY3Olx0XG4zNzY4Olx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7JXNcXHQgJXNcXHQgJXNcXHQgJXNcXG5cJiMzNDssIFwmIzM0O29iai1pZFwmIzM0OywgXCYjMzQ7YnRmLWlkXCYjMzQ7LCBcJiMzNDtjb29raWVcJiMzNDssIFwmIzM0O2Z1bmNcJiMzNDspO1xuMzc2OTpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRyX2xpbmstXHUwMDNlbm9kZXNfY250OyBpJiM0MzsmIzQzOykge1xuMzc3MDpcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcdTAwMjZ0cl9saW5rLVx1MDAzZW5vZGVzW2ldO1xuMzc3MTpcdFx0XHR1MzIgYnRmX2lkLCBvYmpfaWQ7XG4zNzcyOlx0XG4zNzczOlx0XHRcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXHUwMDNldHJhbXBvbGluZS1cdTAwM2VrZXksIFx1MDAyNm9ial9pZCwgXHUwMDI2YnRmX2lkKTtcbjM3NzQ6XHRcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyV1XFx0ICV1XFx0ICVsbHVcXHQgJXBTXFxuXCYjMzQ7LFxuMzc3NTpcdFx0XHRcdCAgIG9ial9pZCwgYnRmX2lkLFxuMzc3NjpcdFx0XHRcdCAgIGhhc19jb29raWVzID8gdHJfbGluay1cdTAwM2Vjb29raWVzW2ldIDogMCxcbjM3Nzc6XHRcdFx0XHQgICAodm9pZCAqKSBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLVx1MDAzZWlwKTtcbjM3Nzg6XHRcbjM3Nzk6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4zNzgwOlx0XHR9XG4zNzgxOlx0fVxuMzc4MjpcdCNlbmRpZlxuMzc4MzpcdFxuMzc4NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcbjM3ODU6XHRcdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxuMzc4NjpcdFx0LmRlYWxsb2NfZGVmZXJyZWQgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2MsXG4zNzg3Olx0XHQuZmlsbF9saW5rX2luZm8gPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxuMzc4ODpcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xuMzc4OTpcdFx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVHJhY2UgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgb2YgdGhlIGtlcm5lbCB0cmFjaW5nIGNvZGUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgdGhlcmUgd2VyZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgaGFuZGxlZCBhcm91bmQgbGluZSAzOTIwIHRvIDM5NDUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgcGFydGljdWxhciBibG9jayBvZiBjb2RlLCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZy4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTIwOlx0ZXJyb3I6XG4zOTIxOlx0XHRrdmZyZWUoZmV4aXRzKTtcbjM5MjI6XHRcdGt2ZnJlZShjb29raWVzKTtcbjM5MjM6XHRcdGt2ZnJlZShpZHMpO1xuMzkyNDpcdFx0a3ZmcmVlKGxpbmspO1xuMzkyNTpcdFx0cmV0dXJuIGVycjtcbjM5MjY6XHR9XG4zOTI3Olx0XG4zOTI4Olx0I2Vsc2VcbjM5Mjk6XHRcbjM5MzA6XHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4zOTMxOlx0e1xuMzkzMjpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMzkzMzpcdH1cbjM5MzQ6XHRcbjM5MzU6XHQjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTIFx1MDAyNlx1MDAyNiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgQ29uZGl0aW9uYWwgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGJsb2NrIG9mIGNvZGUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBgI2Vsc2VgIHN0YXRlbWVudCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYCNpZmAuIEkgbmVlZCB0byB2aXN1YWxseSBwYXJzZSB0aGlzIHF1aWNrbHksIGFuZCBJIGtub3cgSSBjYW4mIzM5O3QganVzdCBzY2FuIGZyb20gdGhlIGAjZWxzZWAgdXAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBmaW5kIHRoZSBzdGFydCBvZiB0aGUgYCNpZmAgYmxvY2suIEl0IGNvdWxkIGJlIG5lc3RlZCBwcmV0dHkgZGVlcGx5LCBvciBldmVuIGluIGEgbWFjcm8sIHNvIGl0JiMzOTtzIGJlc3QgdG8gdHJhY2sgaXQgZG93biBwcmVjaXNlbHkuIFRoZW4sIEkgY2FuIHN0YXJ0IHRvIGZvcm0gYSB3b3JraW5nIHRoZW9yeSBpbiBteSBoZWFkIGFib3V0IHRoZSBwb3NzaWJsZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aGlzIHNlY3Rpb24gYW5kIHdoZXJlIGVhY2ggYnJhbmNoIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzY4MD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODEtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4MjojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODMtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zOTMwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzNC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTM1OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2IENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA3NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgcmVsZXZhbnQgdG8gQlBGLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIGluIGEgd2F5IHRoYXQgaW1wYWN0cyB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGV4cGVjdGluZy4gVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIG9wdGlvbnMgY2FuIGJlIGNvbXBsZXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBnb2luZyB0byBpbXBhY3QgQlBGJiMzOTtzIGJlaGF2aW91ci4gSSB3aWxsIHN0YXJ0IGJ5IHF1ZXJ5aW5nIHRoZSBrZXJuZWwgY29uZmlnIGFuZCBsb29raW5nIGZvciB0aG9zZSBzcGVjaWZpYyBzeW1ib2xzLiBUaGlzIGlzIGEgY3JpdGljYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBzdGFuZCBvbiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9FVkVOVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9ODUxPWNvbmZpZyBFUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODY0LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODY1OmNvbmZpZyBCUEZfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NjYtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4NjUuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHNwZWNpZmljIGluIHRoYXQgYXJlYSBvZiB0aGUgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIGRyYXdpbmcgbXkgYXR0ZW50aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciB0cmFjaW5nIGZlYXR1cmUgb3Igb3B0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0IG9uY2UgSSYjMzk7bSB0aGVyZTsgSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHN5bWJvbCwgZGVwZW5kZW5jeSwgb3IgYSBjb25kaXRpb25hbCB0aGF0IEkgaGF2ZSBleHBlcmllbmNlIGluIG1hbmFnaW5nLiBJIGFtIGhvcGluZyB0byBnZXQgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIGEgcGFydGljdWxhciB0cmFjaW5nIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XHQgIGV2ZW50cy4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXQgd2hhdCBmaWVsZHMgYXJlIHJlY29yZGVkIGluXG4gODYxOlx0XHQgIGFuIGV2ZW50IG9yIGV2ZW4gZGVyZWZlcmVuY2UgYSBmaWVsZCBvZiBhbiBldmVudC4gSXQgY2FuXG4gODYyOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODYzOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NjQ6XHRcbiA4NjU6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg2NjpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg2NzpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4Njg6XHRcdGJvb2xcbiA4Njk6XHRcdGRlZmF1bHQgeVxuIDg3MDpcdFx0aGVscFxuIDg3MTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NzI6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODczOlx0XG4gODc0Olx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODc1Olx0XHRkZWZfYm9vbCBuXG4gODc2Olx0XG4gODc3Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg3ODpcdFx0ZGVmX2Jvb2wgblxuIDg3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg2OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydCBhbmQgSSYjMzk7bSAmIzM0O3RoaW5raW5nJiMzNDsgaXQ6CgoqKkNoZWNraW5nIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGlzIGZsYWcgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjdXJyZW50IGtlcm5lbCBlbnZpcm9ubWVudC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBsaWtlbHkgb24gcGVyZm9ybWFuY2UgaW1wYWN0IGFuZCB0aGUgaW50cmljYWNpZXMgb2YgZGlyZWN0IGNhbGwgcGF0Y2hpbmcsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgY29uc2lkZXJhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmVhdHVyZS4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBhIHBhcnRpY3VsYXIgY29kZSBwYXRoPyBXaGF0IGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciB0cmFjaW5nIG1lY2hhbmlzbXMgb3Igc2VjdXJpdHkgZmVhdHVyZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCB0aGVuIGp1bXAgdG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGNvbnRyb2wgZmxvdy4gQW55IHJlY2VudCBwYXRjaGVzIG9yIGRpc2N1c3Npb25zIGFyb3VuZCB0aGlzIGZlYXR1cmUgdGhhdCBtaWdodCBwcm92aWRlIGluc2lnaHQgaW50byBlZGdlIGNhc2VzPyBJIGhvcGUgdGhlcmUgYXJlIHVzZWZ1bCBjb21tZW50cy4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjE0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVHJhY2UgSW5mcmFzdHJ1Y3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBga2VybmVsL3RyYWNlL0tjb25maWdgLCBhbmQgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8ganVtcCB0byB0aGUgdmljaW5pdHkgb2YgbGluZSAzMjUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc2VjdGlvbiBvZiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIHJlbGV2YW50IGZlYXR1cmUgZmxhZ3MsIHBlcmhhcHMgb3B0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIHRyYWNlcG9pbnRzIG9yIGV2ZW50IHR5cGVzLCBvciBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGpvZyBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBwYXJ0aWN1bGFyIHBpZWNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdFxuIDMyMTpcdFx0ICBUaGlzIHdheSBhIENPTkZJR19GVU5DVElPTl9UUkFDRVIga2VybmVsIGlzIHNsaWdodGx5IGxhcmdlciwgYnV0XG4gMzIyOlx0XHQgIG90aGVyd2lzZSBoYXMgbmF0aXZlIHBlcmZvcm1hbmNlIGFzIGxvbmcgYXMgbm8gdHJhY2luZyBpcyBhY3RpdmUuXG4gMzIzOlx0XG4gMzI0Olx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuIDMyNTpcdFx0ZGVmX2Jvb2wgeVxuIDMyNjpcdFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRVxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuIDMyODpcdFxuIDMyOTpcdGNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xuIDMzMDpcdFx0ZGVmX2Jvb2wgeVxuIDMzMTpcdFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1MgfHwgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG4gMzMyOlx0XHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xuIDMzNTpcdFx0ZGVmX2Jvb2wgeVxuIDMzNjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcbiAzMzc6XHRcbiAzMzg6XHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG4gMzM5Olx0XHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzUyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgQlBGIEV2ZW50aW5nIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBCUEZfRVZFTlRTIGFyZSBzZXQgdXAsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGl0IGxldmVyYWdlcyBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLiBNYWtlcyBzZW5zZSDigJMgd2UmIzM5O3JlIGhvb2tpbmcgaW50byBzeXNjYWxscywgcHJvYmluZyBrZXJuZWwgZnVuY3Rpb25zLCBhbmQgdXNpbmcgdGhlIHBlcmYgaW5mcmFzdHJ1Y3R1cmUuIEFuZCwgb2YgY291cnNlLCBgRFlOQU1JQ19GVFJBQ0VgIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHRoYXQgZGVlcGVyIGluc3RydW1lbnRhdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaWYgYHNvcnQub2AgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gTGV0JiMzOTtzIHF1aWNrbHkgcGVlayBhdCB0aGUgYGxpYi9NYWtlZmlsZWAgYW5kIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvcnQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGU9NTM9Q09OVEVYVF9BTkFMWVNJU19yaGFzaHRhYmxlLm8gOj0geVxubGliL01ha2VmaWxlLTU0LVxubGliL01ha2VmaWxlOjU1Om9iai15ICYjNDM7PSBiY2QubyBzb3J0Lm8gcGFyc2VyLm8gZGVidWdfbG9ja3MubyByYW5kb20zMi5vIFxcXG5saWIvTWFrZWZpbGUtNTYtXHQgYnVzdF9zcGlubG9ja3MubyBrYXNwcmludGYubyBiaXRtYXAubyBzY2F0dGVybGlzdC5vIFxcXG5saWIvTWFrZWZpbGU6NTc6XHQgbGlzdF9zb3J0Lm8gdXVpZC5vIGlvdl9pdGVyLm8gY2x6X2N0ei5vIFxcXG5saWIvTWFrZWZpbGUtNTgtXHQgYnNlYXJjaC5vIGZpbmRfYml0Lm8gbGxpc3QubyBsd3EubyBtZW13ZWlnaHQubyBrZmlmby5vIFxcXG4tLVxubGliL2dyb3VwX2NwdXMuYz00ODg9c3RydWN0IGNwdW1hc2sgKmdyb3VwX2NwdXNfZXZlbmx5KHVuc2lnbmVkIGludCBudW1ncnBzLCB1bnNpZ25lZCBpbnQgKm51bW1hc2tzKVxuLS1cbmxpYi9ncm91cF9jcHVzLmMtNTIzLVx0ICogQ1BVIGlzIGhhbmRsZWQgaW4gdGhlIDFzdCBvciAybmQgc3RhZ2UsIGFuZCBlaXRoZXIgd2F5IGlzIGNvcnJlY3RcbmxpYi9ncm91cF9jcHVzLmM6NTI0Olx0ICogZnJvbSBBUEkgdXNlciB2aWV3cG9pbnQgc2luY2UgMi1zdGFnZSBzcHJlYWQgaXMgc29ydCBvZlxubGliL2dyb3VwX2NwdXMuYy01MjUtXHQgKiBvcHRpbWl6YXRpb24uXG4tLVxubGliL29iamFnZy5jPTYwNz1jb25zdCBzdHJ1Y3Qgb2JqYWdnX3N0YXRzICpvYmphZ2dfc3RhdHNfZ2V0KHN0cnVjdCBvYmphZ2cgKm9iamFnZylcbi0tXG5saWIvb2JqYWdnLmMtNjMwLVxubGliL29iamFnZy5jOjYzMTpcdHNvcnQob2JqYWdnX3N0YXRzLVx1MDAzZXN0YXRzX2luZm8sIG9iamFnZ19zdGF0cy1cdTAwM2VzdGF0c19pbmZvX2NvdW50LFxubGliL29iamFnZy5jLTYzMi1cdCAgICAgc2l6ZW9mKHN0cnVjdCBvYmphZ2dfb2JqX3N0YXRzX2luZm8pLFxuLS1cbmxpYi9vYmphZ2cuYz0xMDA3PW9iamFnZ19oaW50c19zdGF0c19nZXQoc3RydWN0IG9iamFnZ19oaW50cyAqb2JqYWdnX2hpbnRzKVxuLS1cbmxpYi9vYmphZ2cuYy0xMDI3LVxubGliL29iamFnZy5jOjEwMjg6XHRzb3J0KG9iamFnZ19zdGF0cy1cdTAwM2VzdGF0c19pbmZvLCBvYmphZ2dfc3RhdHMtXHUwMDNlc3RhdHNfaW5mb19jb3VudCxcbmxpYi9vYmphZ2cuYy0xMDI5LVx0ICAgICBzaXplb2Yoc3RydWN0IG9iamFnZ19vYmpfc3RhdHNfaW5mbyksXG4tLVxubGliL3NvcnQuYz0xODI9c3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXG4tLVxubGliL3NvcnQuYy0xOTctICpcbmxpYi9zb3J0LmM6MTk4OiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxubGliL3NvcnQuYy0xOTktICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuLS1cbmxpYi90ZXN0X3Bhcm1hbi5jPTExMz1zdGF0aWMgdm9pZCB0ZXN0X3Bhcm1hbl9tb3ZlKHZvaWQgKnByaXYsIHVuc2lnbmVkIGxvbmcgZnJvbV9pbmRleCxcbi0tXG5saWIvdGVzdF9wYXJtYW4uYy0xMjMtXG5saWIvdGVzdF9wYXJtYW4uYzoxMjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwYXJtYW5fb3BzIHRlc3RfcGFybWFuX2xzb3J0X29wcyA9IHtcbmxpYi90ZXN0X3Bhcm1hbi5jLTEyNS1cdC5iYXNlX2NvdW50XHQ9IFRFU1RfUEFSTUFOX0JBU0VfQ09VTlQsXG4tLVxubGliL3Rlc3RfcGFybWFuLmM9MzYwPXN0YXRpYyBpbnQgdGVzdF9wYXJtYW5fbHNvcnQodm9pZClcbi0tXG5saWIvdGVzdF9wYXJtYW4uYy0zNjQtXG5saWIvdGVzdF9wYXJtYW4uYzozNjU6XHR0ZXN0X3Bhcm1hbiA9IHRlc3RfcGFybWFuX2NyZWF0ZShcdTAwMjZ0ZXN0X3Bhcm1hbl9sc29ydF9vcHMpO1xubGliL3Rlc3RfcGFybWFuLmMtMzY2LVx0aWYgKElTX0VSUih0ZXN0X3Bhcm1hbikpXG4tLVxubGliL3Rlc3RzL01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19LRklGT19LVU5JVF9URVNUKSAmIzQzOz0ga2ZpZm9fa3VuaXQub1xubGliL3Rlc3RzL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19URVNUX0xJU1RfU09SVCkgJiM0Mzs9IHRlc3RfbGlzdF9zb3J0Lm9cbmxpYi90ZXN0cy9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTElORUFSX1JBTkdFU19URVNUKSAmIzQzOz0gdGVzdF9saW5lYXJfcmFuZ2VzLm9cbi0tXG5saWIvdGVzdHMvTWFrZWZpbGU9NTA9b2JqLSQoQ09ORklHX1NMVUJfS1VOSVRfVEVTVCkgJiM0Mzs9IHNsdWJfa3VuaXQub1xubGliL3Rlc3RzL01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19URVNUX1NPUlQpICYjNDM7PSB0ZXN0X3NvcnQub1xubGliL3Rlc3RzL01ha2VmaWxlLTUyLUNGTEFHU19zdGFja2luaXRfa3VuaXQubyAmIzQzOz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgc3dpdGNoLXVucmVhY2hhYmxlKVxuLS1cbmxpYi92c3ByaW50Zi5jPTM0NjI9aW50IHZzc2NhbmYoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncylcbi0tXG5saWIvdnNwcmludGYuYy0zNjU5LVxubGliL3ZzcHJpbnRmLmM6MzY2MDpcdFx0LyogaGF2ZSBzb21lIHNvcnQgb2YgaW50ZWdlciBjb252ZXJzaW9uLlxubGliL3ZzcHJpbnRmLmMtMzY2MS1cdFx0ICogZmlyc3QsIHNraXAgd2hpdGUgc3BhY2UgaW4gYnVmZmVyLlxuLS1cbmxpYi96c3RkL2NvbXByZXNzL2h1Zl9jb21wcmVzcy5jPTU4OT1zdGF0aWMgdm9pZCBIVUZfc2ltcGxlUXVpY2tTb3J0KG5vZGVFbHQgYXJyW10sIGludCBsb3csIGludCBoaWdoKSB7XG4tLVxubGliL3pzdGQvY29tcHJlc3MvaHVmX2NvbXByZXNzLmMtNjA5LSAqIFNvcnRzIHRoZSBzeW1ib2xzIFswLCBtYXhTeW1ib2xWYWx1ZV0gYnkgY291bnRbc3ltYm9sXSBpbiBkZWNyZWFzaW5nIG9yZGVyLlxubGliL3pzdGQvY29tcHJlc3MvaHVmX2NvbXByZXNzLmM6NjEwOiAqIFRoaXMgaXMgYSB0eXBpY2FsIGJ1Y2tldCBzb3J0aW5nIHN0cmF0ZWd5IHRoYXQgdXNlcyBlaXRoZXIgcXVpY2tzb3J0IG9yIGluc2VydGlvbiBzb3J0IHRvIHNvcnQgZWFjaCBidWNrZXQuXG5saWIvenN0ZC9jb21wcmVzcy9odWZfY29tcHJlc3MuYy02MTEtICpcbi0tXG5saWIvenN0ZC9jb21wcmVzcy96c3RkX2xhenkuYz0zMD12b2lkIFpTVERfdXBkYXRlRFVCVChaU1REX01hdGNoU3RhdGVfdCogbXMsXG4tLVxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmMtNjktLyogWlNURF9pbnNlcnREVUJUMSgpIDpcbmxpYi96c3RkL2NvbXByZXNzL3pzdGRfbGF6eS5jOjcwOiAqICBzb3J0IG9uZSBhbHJlYWR5IGluc2VydGVkIGJ1dCB1bnNvcnRlZCBwb3NpdGlvblxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmMtNzEtICogIGFzc3VtcHRpb24gOiBjdXJyIFx1MDAzZT0gYnRsb3cgPT0gKGN1cnIgLSBidG1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzc5CgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIEkgc2VlIHRoYXQgYGxpYi9zb3J0Lm9gIGlzIGJlaW5nIGJ1aWx0IGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHkg4oCTIGl0JiMzOTtzIGFuIGBvYmoteWAgaW4gdGhlIGBsaWIvTWFrZWZpbGVgLiBUaGUgQlBGIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgYXMgZXhwZWN0ZWQsIHJlbGllcyBvbiBzZXZlcmFsIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGVuYWJsZWQ6IGBDT05GSUdfQlBGX0VWRU5UU2AsIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kIGBDT05GSUdfS1BST0JFX0VWRU5UU2AsIGFtb25nIG90aGVycy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aG9zZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMgYW5kIGNvbmZpZ3MgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBzb3J0X3JgIHdpdGhpbiBgbGliL3NvcnQuY2AsIGFuZCBib3RoIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgY2hlY2tfZHVwX2lkc2AgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfRVZFTlRTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCwgYXMgSSBhbHJlYWR5IHN1c3BlY3RlZC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyB0YWtpbmcgb3V0IGBzb3J0X25vbmF0b21pY2AgYW5kIGBzb3J0X3Jfbm9uYXRvbWljYCwgc2ltcGxpZnlpbmcgYGxpYi9zb3J0LmNgIGJ5IGltcGxlbWVudGluZyBgc29ydF9yYCBkaXJlY3RseSwgYW5kIHJlbW92aW5nIHRob3NlIHNjaGVkdWxpbmcgcG9pbnQgY2hlY2tzLiBJdCB0aGVuIHVwZGF0ZXMgdGhlIGBjaGVja19kdXBfaWRzKClgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCwgd2hpY2ggaXMgdGhlIG9ubHkgY2FsbGVyLCB0byB1c2UgdGhlIHNpbXBsaWZpZWQgYHNvcnRfcigpYCBmdW5jdGlvbi4gVGhpcyBpcyB0b3VjaGluZyBib3RoIGNvcmUgbGlicmFyeSBzb3J0aW5nIGxvZ2ljIGFuZCB0aGUgQlBGIHRyYWNlIG11bHRpLWF0dGFjaCBoYW5kbGluZywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSYjMzk7dmUgcmV2aWV3ZWQgZXZlcnl0aGluZyBtZXRpY3Vsb3VzbHksIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvcnRfciYjMzQ7LAogICAgJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGtlcm5lbCYjMzk7cyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb3J0X3ImIzM0OywKICAgICYjMzQ7Y2hlY2tfZHVwX2lkcyYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwmIzM5O3Mgc29ydCBsaWJyYXJ5IGJ5IGVsaW1pbmF0aW5nIHNvcnRfbm9uYXRvbWljIGFuZCBzb3J0X3Jfbm9uYXRvbWljIChhbmQgdGhlIHVuZGVybHlpbmcgY29uZF9yZXNjaGVkIGxvb3AgbG9naWMpLCByZWltcGxlbWVudGluZyBzb3J0X3IgZGlyZWN0bHkuIEl0IGFsc28gbW9kaWZpZXMga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIChjaGVja19kdXBfaWRzKSB0byBpbnZva2Ugc29ydF9yIGRpcmVjdGx5IGluc3RlYWQgb2Ygc29ydF9yX25vbmF0b21pYy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiByZWFjaGFibGUgY29yZSBsaWJyYXJ5IGFuZCBCUEYgdHJhY2luZyBzdWJzeXN0ZW1zIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGwgaW50ZXJmYWNlcyAoZS5nLiwgQlBGX0xJTktfQ1JFQVRFIGZvciBtdWx0aS10cmFjaW5nKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxOTowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ydC5oIGIvaW5jbHVkZS9saW51eC9zb3J0LmgKaW5kZXggYzAxZWY4MDRhMGViMi4uODcxNzc1OTc4YWYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zb3J0LmgKQEAgLTIzLDE1ICYjNDM7MjMsNCBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJICBjbXBfZnVuY190IGNtcF9mdW5jLAogCSAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKTsKIAotLyogVmVyc2lvbnMgdGhhdCBwZXJpb2RpY2FsbHkgY2FsbCBjb25kX3Jlc2NoZWQoKTogKi8KLQotdm9pZCBzb3J0X3Jfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCQkgICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsCi0JCSAgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLAotCQkgICAgICBjb25zdCB2b2lkICpwcml2KTsKLQotdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKLQkJICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCi0JCSAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwppbmRleCAyOTI2MDk1MWFhODcxLi4xZDdlNzNkZGJhZmJlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCkBAIC0zODI2LDcgJiM0MzszODI2LDcgQEAgc3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpCiAJICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5cwogCSAqIGFyZSBsZWZ0IHNvcnRlZC4KIAkgKi8KLQlzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTsKJiM0MzsJc29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTsKIAogCWZvciAoaW50IGkgPSAxOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewogCQlpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHsKZGlmZiAtLWdpdCBhL2xpYi9zb3J0LmMgYi9saWIvc29ydC5jCmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0Ci0tLSBhL2xpYi9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3NvcnQuYwpAQCAtMTg2LDEzICYjNDM7MTg2LDM2IEBAIHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKQogCXJldHVybiBpIC8gMjsKIH0KIAotI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7Ci0KLXN0YXRpYyB2b2lkIF9fc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCQkgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYywKLQkJICAgICBjb25zdCB2b2lkICpwcml2LAotCQkgICAgIGJvb2wgbWF5X3NjaGVkdWxlKQomIzQzOy8qKgomIzQzOyAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHMKJiM0MzsgKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnQKJiM0MzsgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHMKJiM0MzsgKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnQKJiM0MzsgKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgomIzQzOyAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMCiYjNDM7ICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGUKJiM0MzsgKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5CiYjNDM7ICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXAKJiM0MzsgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWwKJiM0MzsgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzoKJiM0MzsgKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2YKJiM0MzsgKiBjbXBfZnVuYyhiLCBhKS4KJiM0MzsgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgJmx0Oz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgJmx0Oz0gMCwgdGhlbgomIzQzOyAqIGNtcF9mdW5jKGEsIGMpICZsdDs9IDAuCiYjNDM7ICoKJiM0MzsgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlCiYjNDM7ICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGUKJiM0MzsgKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2UKJiM0MzsgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLgomIzQzOyAqLwomIzQzO3ZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAomIzQzOwkgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLAomIzQzOwkgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCiYjNDM7CSAgICBjb25zdCB2b2lkICpwcml2KQogewogCS8qIHByZS1zY2FsZSBjb3VudGVycyBmb3IgcGVyZm9ybWFuY2UgKi8KIAlzaXplX3QgbiA9IG51bSAqIHNpemUsIGEgPSAobnVtLzIpICogc2l6ZTsKQEAgLTI2Myw5ICYjNDM7Mjg2LDYgQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJCQliID0gcGFyZW50KGIsIGxzYml0LCBzaXplKTsKIAkJCWRvX3N3YXAoYmFzZSAmIzQzOyBiLCBiYXNlICYjNDM7IGMsIHNpemUsIHN3YXBfZnVuYywgcHJpdik7CiAJCX0KLQotCQlpZiAobWF5X3NjaGVkdWxlKQotCQkJY29uZF9yZXNjaGVkKCk7CiAJfQogCiAJbiAtPSBzaXplOwpAQCAtMjczLDYzICYjNDM7MjkzLDggQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJaWYgKG4gPT0gc2l6ZSAqIDIgJmFtcDsmYW1wOyBkb19jbXAoYmFzZSwgYmFzZSAmIzQzOyBzaXplLCBjbXBfZnVuYywgcHJpdikgJmd0OyAwKQogCQlkb19zd2FwKGJhc2UsIGJhc2UgJiM0Mzsgc2l6ZSwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTsKIH0KLQotLyoqCi0gKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzCi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnQKLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50cwotICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50Ci0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTEwKLSAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZQotICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeQotICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXAKLSAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci4KLSAqCi0gKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWwKLSAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOgotICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mCi0gKiBjbXBfZnVuYyhiLCBhKS4KLSAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSAmbHQ7PSAwIGFuZCBjbXBfZnVuYyhiLCBjKSAmbHQ7PSAwLCB0aGVuCi0gKiBjbXBfZnVuYyhhLCBjKSAmbHQ7PSAwLgotICoKLSAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGUKLSAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlCi0gKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2UKLSAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuCi0gKi8KLXZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAotCSAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsCi0JICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLAotCSAgICBjb25zdCB2b2lkICpwcml2KQotewotCV9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgY21wX2Z1bmMsIHN3YXBfZnVuYywgcHJpdiwgZmFsc2UpOwotfQogRVhQT1JUX1NZTUJPTChzb3J0X3IpOwogCi0vKioKLSAqIHNvcnRfcl9ub25hdG9taWMgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzLCB3aXRoIGNvbmRfcmVzY2hlZAotICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0Ci0gKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHMKLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudAotICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24KLSAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMCi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb24KLSAqCi0gKiBTYW1lIGFzIHNvcnRfciwgYnV0IHByZWZlcnJlZCBmb3IgbGFyZ2VyIGFycmF5cyBhcyBpdCBkb2VzIGEgcGVyaW9kaWMKLSAqIGNvbmRfcmVzY2hlZCgpLgotICovCi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYywKLQkJICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsCi0JCSAgICAgIGNvbnN0IHZvaWQgKnByaXYpCi17Ci0JX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCB0cnVlKTsKLX0KLUVYUE9SVF9TWU1CT0woc29ydF9yX25vbmF0b21pYyk7Ci0KIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKIAkgIGNtcF9mdW5jX3QgY21wX2Z1bmMsCiAJICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpCkBAIC0zMzksMTkgJiM0MzszMDQsNiBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCiAJCS5zd2FwID0gc3dhcF9mdW5jLAogCX07CiAKLQlyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgJmFtcDt3LCBmYWxzZSk7CiYjNDM7CXJldHVybiBzb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgJmFtcDt3KTsKIH0KIEVYUE9SVF9TWU1CT0woc29ydCk7Ci0KLXZvaWQgc29ydF9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCi0JCSAgICBjbXBfZnVuY190IGNtcF9mdW5jLAotCQkgICAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKQotewotCXN0cnVjdCB3cmFwcGVyIHcgPSB7Ci0JCS5jbXAgID0gY21wX2Z1bmMsCi0JCS5zd2FwID0gc3dhcF9mdW5jLAotCX07Ci0KLQlyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgJmFtcDt3LCB0cnVlKTsKLX0KLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L3NvcnQuaGAsIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLCBhbmQgYGxpYi9zb3J0LmNgLiBSaWdodCBhd2F5LCBJIGtub3cgdGhpcyBoYXMgdG8gZG8gd2l0aCBzb3J0aW5nIGFsZ29yaXRobXMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBjaGFuZ2VzIGFyZSB0aGUgcmVtb3ZhbCBvZiBgc29ydF9yX25vbmF0b21pY2AgYW5kIGBzb3J0X25vbmF0b21pY2AsIGFuZCB0aGUgcmVwbGFjZW1lbnQgb2YgYHNvcnRfcl9ub25hdG9taWNgIHdpdGggYHNvcnRfcmAgaW4gdGhlIEJQRiB0cmFjZSBjb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgYHNvcnRfcmAgaW4gdGhlIGxpYnJhcnkgaXMgc2ltcGxpZmllZCBieSBnZXR0aW5nIHJpZCBvZiB0aGUgYG1heV9zY2hlZHVsZWAgYW5kIGBjb25kX3Jlc2NoZWQoKWAgbG9naWMsIHdoaWNoIGFsc28gaW52b2x2ZWQgcmVtb3ZpbmcgdGhlIGBfbm9uYXRvbWljYCB2ZXJzaW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGVmZm9ydCBmb2N1c2VkIG9uIHJlbW92aW5nIHByZWVtcHRpb24gcG9pbnRzIHdpdGhpbiB0aGUgc29ydGluZyByb3V0aW5lcy4gVGhlIHBhdGNoIGlzIGdldHRpbmcgcmlkIG9mIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIGluIHRoZSBjb3JlIHNvcnQgZnVuY3Rpb25zLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBJdCYjMzk7cyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCwgaWYgYW55IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIG9yIHBvdGVudGlhbCBwYWRkaW5nIGxlYWtzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBhbmQgYmFzZWQgb24gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgaW50ZXJuYWxzLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9mIHRob3NlIHJlZCBmbGFncy4gVGhpcyBzZWVtcyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBmb2N1c2VkIG9uIHJlbW92aW5nIHNjaGVkdWxpbmcgcG9pbnRzLgoKSG93ZXZlciwgSSYjMzk7bSBub3QgZ29pbmcgdG8gYmUgKnRvbyogaGFzdHkuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBicGZfdHJhY2UuY2AgYW5kIGBsaWIvc29ydC5jYCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IHN1YnRsZSBpc3N1ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBsaW5lIDM4MjYgaW4gYGJwZl90cmFjZS5jYCBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGp1c3QgdG8gbWFrZSBzdXJlIG5vdGhpbmcgd2FzIG1pc3NlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhhdCBzcGVjaWZpYyBgc29ydF9yYCBjYWxsIGluIHRoZSBCUEYgdHJhY2UgZnVuY3Rpb25hbGl0eS4gV2l0aCBteSBleHBlcmllbmNlLCBJIGNhbiBzY2FuIHRoaXMgY29kZSBhbmQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvZGQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvciBhbnkgc2l0dWF0aW9ucyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBpbmFkdmVydGVudGx5IGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19kdXBfaWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODAxPXN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MTgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzgxOTpzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODIwLXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODItXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzg4MzpcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFRyYWNlIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmlsZSByZWFkaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIEJQRiB0cmFjaW5nLiBMZXQgbWUgcHVsbCB1cCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDM4MDAgdG8gMzg0MC4gVGhhdCByZWdpb24gc2hvdWxkIGhvbGQgdGhlIGtleSwgb3IgYXQgbGVhc3QgYSBzaWduaWZpY2FudCBwaWVjZSwgcmVsYXRlZCB0byBob3cgZmlsZSByZWFkcyBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiBCUEYgdHJhY2luZy4gSG9wZWZ1bGx5LCBJIGNhbiBwaW5wb2ludCB3aGVyZSB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcgZGl2ZXJnZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MDA6XHRcbjM4MDE6XHRzdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxuMzgwMjpcdFx0XHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcbjM4MDM6XHR7XG4zODA0Olx0XHR1NjQgKmNvb2tpZV9hLCAqY29va2llX2IsICpjb29raWVzO1xuMzgwNTpcdFx0dTMyICppZF9hID0gYSwgKmlkX2IgPSBiLCAqaWRzO1xuMzgwNjpcdFx0dm9pZCAqKmRhdGEgPSAodm9pZCAqKikgcHJpdjtcbjM4MDc6XHRcbjM4MDg6XHRcdGlkcyAgICAgPSBkYXRhWzBdO1xuMzgwOTpcdFx0Y29va2llcyA9IGRhdGFbMV07XG4zODEwOlx0XG4zODExOlx0XHRpZiAoY29va2llcykge1xuMzgxMjpcdFx0XHRjb29raWVfYSA9IGNvb2tpZXMgJiM0MzsgKGlkX2EgLSBpZHMpO1xuMzgxMzpcdFx0XHRjb29raWVfYiA9IGNvb2tpZXMgJiM0MzsgKGlkX2IgLSBpZHMpO1xuMzgxNDpcdFx0XHRzd2FwKCpjb29raWVfYSwgKmNvb2tpZV9iKTtcbjM4MTU6XHRcdH1cbjM4MTY6XHRcdHN3YXAoKmlkX2EsICppZF9iKTtcbjM4MTc6XHR9XG4zODE4Olx0XG4zODE5Olx0c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG4zODIwOlx0e1xuMzgyMTpcdFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XG4zODIyOlx0XHRpbnQgZXJyID0gMDtcbjM4MjM6XHRcbjM4MjQ6XHRcdC8qXG4zODI1Olx0XHQgKiBTb3J0IGlkcyBhcnJheSAodG9nZXRoZXIgd2l0aCBjb29raWVzIGFycmF5IGlmIGRlZmluZWQpXG4zODI2Olx0XHQgKiBhbmQgY2hlY2sgaXQgZm9yIGR1cGxpY2F0ZXMuIFRoZSBpZHMgYW5kIGNvb2tpZXMgYXJyYXlzXG4zODI3Olx0XHQgKiBhcmUgbGVmdCBzb3J0ZWQuXG4zODI4Olx0XHQgKi9cbjM4Mjk6XHRcdHNvcnRfcihpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4zODMwOlx0XG4zODMxOlx0XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzgzMjpcdFx0XHRpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHtcbjM4MzM6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzgzNDpcdFx0XHRcdGJyZWFrO1xuMzgzNTpcdFx0XHR9XG4zODM2Olx0XHR9XG4zODM3Olx0XHRyZXR1cm4gZXJyO1xuMzgzODpcdH1cbjM4Mzk6XHRcbjM4NDA6XHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4zODQxOlx0e1xuMzg0MjpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmsgPSBOVUxMO1xuMzg0MzpcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlICpmZXhpdHMgPSBOVUxMO1xuMzg0NDpcdFx0c3RydWN0IGJwZl9saW5rX3ByaW1lciBsaW5rX3ByaW1lcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMwoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ29uc2lkZXJhdGlvbnMgZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgdGhpcyBwYXRjaCBpcyBxdWl0ZSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGNsZWFuOyBiYXNpY2FsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgc29ydF9ub25hdG9taWNgIGFuZCBgc29ydF9yX25vbmF0b21pY2AgdmFyaWFudHMgYW5kIGRpdGNoaW5nIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIHdpdGhpbiB0aG9zZSBzb3J0aW5nIGxvb3BzLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIGRpcmVjdCBjYWxsIHRvIGBzb3J0X3JgIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHBvdGVudGlhbCBLTVNBTiBpbXBsaWNhdGlvbnMuCgpGaXJzdCwgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzPyBObywgZGVmaW5pdGVseSBub3QuIEkgY2FuIHF1aWNrbHkgcnVsZSB0aGF0IG91dDogbm8gbmV3IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIG5vdGhpbmcmIzM5O3MgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG5ldyBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgcHJlc2VudC4gSXQmIzM5O3Mgbm90IGNoYW5naW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhbnkgd2F5IHRoYXQgSSBjYW4gc2VlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IGl0IGNvdWxkIGludHJvZHVjZSBhbiBpbmZvLWxlYWsuIFNvLCBubywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZWFzb25pbmcgYSBiaXQgbW9yZSwgZHJhd2luZyB0aGUgY29udHJhc3Qgd2l0aCBLQVNBTi4gV2UmIzM5O3JlIHRhbGtpbmcgS01TQU4gaGVyZSwgc28gbGV0JiMzOTtzIHJlY2FsbCB3aGF0IGl0IGRvZXMuIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSwgc2ltcGx5IHJlbW92ZXMgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbHMgaW4gdGhlIHNvcnRpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBkcm9wcyB0aGUgYHNvcnRfbm9uYXRvbWljYCBhbmQgYHNvcnRfcl9ub25hdG9taWNgIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyB0aGUgc2luZ2xlIGNhbGxzaXRlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIHRvIHVzZSBgc29ydF9yYC4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQuIFRoZSB1bmRlcmx5aW5nIGBzb3J0YCBhbmQgYHNvcnRfcmAgcm91dGluZXMgYXJlIGFscmVhZHkgd2VsbC10ZXN0ZWQuIEFueSBwb3RlbnRpYWwgc29ydGluZyBidWdzLCBsaWtlIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIEtNU0FOJiMzOTtzIHByb3ZpZGluZyBubyBhZGRpdGlvbmFsIHZhbHVlIGhlcmUuCgpSaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDI6NTUuMzI0MzA4ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyMjI1MTc2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gICAgXCJLUFJPQkVfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ydF9yXCIsXG4gICAgXCJjaGVja19kdXBfaWRzXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNsZWFucyB1cCB0aGUga2VybmVsIHNvcnRpbmcgbGlicmFyeSAobGliL3NvcnQuYyBhbmQgaW5jbHVkZS9saW51eC9zb3J0LmgpIGJ5IHJlbW92aW5nIGNvbmRfcmVzY2hlZCgpIGxvZ2ljIGFuZCB0aGUgc29ydF9ub25hdG9taWMvc29ydF9yX25vbmF0b21pYyB3cmFwcGVyIGZ1bmN0aW9ucywgdXBkYXRpbmcgYnBmX3RyYWNlLmMgdG8gY2FsbCBzb3J0X3IoKSBkaXJlY3RseS4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBwYWRkaW5nLCB1c2VyIGNvcGllcyAoY29weV90b191c2VyL3B1dF91c2VyKSwgb3IgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBhY2Nlc3MgYnVncyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUga2VybmVsJ3Mgc29ydCBsaWJyYXJ5IGJ5IGVsaW1pbmF0aW5nIHNvcnRfbm9uYXRvbWljIGFuZCBzb3J0X3Jfbm9uYXRvbWljIChhbmQgdGhlIHVuZGVybHlpbmcgY29uZF9yZXNjaGVkIGxvb3AgbG9naWMpLCByZWltcGxlbWVudGluZyBzb3J0X3IgZGlyZWN0bHkuIEl0IGFsc28gbW9kaWZpZXMga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIChjaGVja19kdXBfaWRzKSB0byBpbnZva2Ugc29ydF9yIGRpcmVjdGx5IGluc3RlYWQgb2Ygc29ydF9yX25vbmF0b21pYy4gVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiByZWFjaGFibGUgY29yZSBsaWJyYXJ5IGFuZCBCUEYgdHJhY2luZyBzdWJzeXN0ZW1zIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGwgaW50ZXJmYWNlcyAoZS5nLiwgQlBGX0xJTktfQ1JFQVRFIGZvciBtdWx0aS10cmFjaW5nKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDI6NTUuMzI0MzE0MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDY2MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTk6MDI6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb3J0LmggYi9pbmNsdWRlL2xpbnV4L3NvcnQuaFxcbmluZGV4IGMwMWVmODA0YTBlYjIuLjg3MTc3NTk3OGFmMGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvcnQuaFxcbkBAIC0yMywxNSArMjMsNCBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXFxuIFxcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcXG4gXFx0ICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpO1xcbiBcXG4tLyogVmVyc2lvbnMgdGhhdCBwZXJpb2RpY2FsbHkgY2FsbCBjb25kX3Jlc2NoZWQoKTogKi9cXG4tXFxuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi1cXHRcXHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcXG4tXFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdik7XFxuLVxcbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbi1cXHRcXHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcXG4tXFx0XFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7XFxuLVxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuaW5kZXggMjkyNjA5NTFhYTg3MS4uMWQ3ZTczZGRiYWZiZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG5AQCAtMzgyNiw3ICszODI2LDcgQEAgc3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxuIFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4gXFx0ICogYXJlIGxlZnQgc29ydGVkLlxcbiBcXHQgKi9cXG4tXFx0c29ydF9yX25vbmF0b21pYyhpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XFxuK1xcdHNvcnRfcihpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XFxuIFxcbiBcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIFxcdFxcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xcbmRpZmYgLS1naXQgYS9saWIvc29ydC5jIGIvbGliL3NvcnQuY1xcbmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0XFxuLS0tIGEvbGliL3NvcnQuY1xcbisrKyBiL2xpYi9zb3J0LmNcXG5AQCAtMTg2LDEzICsxODYsMzYgQEAgc3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXFxuIFxcdHJldHVybiBpIC8gMjtcXG4gfVxcbiBcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLVxcbi1zdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXFxuLVxcdFxcdCAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXFxuLVxcdFxcdCAgICAgY29uc3Qgdm9pZCAqcHJpdixcXG4tXFx0XFx0ICAgICBib29sIG1heV9zY2hlZHVsZSlcXG4rLyoqXFxuKyAqIHNvcnRfciAtIHNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHNcXG4rICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XFxuKyAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xcbisgKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcXG4rICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4rICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcXG4rICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxcbisgKiBhIHN3YXBfZnVuYyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBkbyBzb21ldGhpbmcgbW9yZSB0aGFuIGEgbWVtb3J5XFxuKyAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXFxuKyAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cXG4rICpcXG4rICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXFxuKyAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxcbisgKiAtIEFudGlzeW1tZXRyeTogY21wX2Z1bmMoYSwgYikgbXVzdCByZXR1cm4gdGhlIG9wcG9zaXRlIHNpZ24gb2ZcXG4rICogY21wX2Z1bmMoYiwgYSkuXFxuKyAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcXHUwMDNjPSAwIGFuZCBjbXBfZnVuYyhiLCBjKSBcXHUwMDNjPSAwLCB0aGVuXFxuKyAqIGNtcF9mdW5jKGEsIGMpIFxcdTAwM2M9IDAuXFxuKyAqXFxuKyAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcXG4rICogcXVpY2tzb3J0IGlzIHNsaWdodGx5IGZhc3RlciBvbiBhdmVyYWdlLCBpdCBzdWZmZXJzIGZyb20gZXhwbG9pdGFibGVcXG4rICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXFxuKyAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXFxuKyAqL1xcbit2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4rXFx0ICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcXG4rXFx0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxcbitcXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcXG4ge1xcbiBcXHQvKiBwcmUtc2NhbGUgY291bnRlcnMgZm9yIHBlcmZvcm1hbmNlICovXFxuIFxcdHNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplO1xcbkBAIC0yNjMsOSArMjg2LDYgQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdFxcdGIgPSBwYXJlbnQoYiwgbHNiaXQsIHNpemUpO1xcbiBcXHRcXHRcXHRkb19zd2FwKGJhc2UgKyBiLCBiYXNlICsgYywgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKG1heV9zY2hlZHVsZSlcXG4tXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuIFxcdG4gLT0gc2l6ZTtcXG5AQCAtMjczLDYzICsyOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4gXFx0aWYgKG4gPT0gc2l6ZSAqIDIgXFx1MDAyNlxcdTAwMjYgZG9fY21wKGJhc2UsIGJhc2UgKyBzaXplLCBjbXBfZnVuYywgcHJpdikgXFx1MDAzZSAwKVxcbiBcXHRcXHRkb19zd2FwKGJhc2UsIGJhc2UgKyBzaXplLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xcbiB9XFxuLVxcbi0vKipcXG4tICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xcbi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcXG4tICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzXFxuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxcbi0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxcbi0gKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTFxcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXFxuLSAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcXG4tICogY29weSAoZS5nLiBmaXggdXAgcG9pbnRlcnMgb3IgYXV4aWxpYXJ5IGRhdGEpLCBidXQgdGhlIGJ1aWx0LWluIHN3YXBcXG4tICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLlxcbi0gKlxcbi0gKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGFkaGVyZSB0byBzcGVjaWZpYyBtYXRoZW1hdGljYWxcXG4tICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6XFxuLSAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxcbi0gKiBjbXBfZnVuYyhiLCBhKS5cXG4tICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpIFxcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFxcdTAwM2M9IDAsIHRoZW5cXG4tICogY21wX2Z1bmMoYSwgYykgXFx1MDAzYz0gMC5cXG4tICpcXG4tICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZVxcbi0gKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxcbi0gKiBPKG4qbikgd29yc3QtY2FzZSBiZWhhdmlvciBhbmQgZXh0cmEgbWVtb3J5IHJlcXVpcmVtZW50cyB0aGF0IG1ha2VcXG4tICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS5cXG4tICovXFxuLXZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbi1cXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi1cXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXFxuLVxcdCAgICBjb25zdCB2b2lkICpwcml2KVxcbi17XFxuLVxcdF9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgY21wX2Z1bmMsIHN3YXBfZnVuYywgcHJpdiwgZmFsc2UpO1xcbi19XFxuIEVYUE9SVF9TWU1CT0woc29ydF9yKTtcXG4gXFxuLS8qKlxcbi0gKiBzb3J0X3Jfbm9uYXRvbWljIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cywgd2l0aCBjb25kX3Jlc2NoZWRcXG4tICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xcbi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcXG4tICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcXG4tICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXFxuLSAqXFxuLSAqIFNhbWUgYXMgc29ydF9yLCBidXQgcHJlZmVycmVkIGZvciBsYXJnZXIgYXJyYXlzIGFzIGl0IGRvZXMgYSBwZXJpb2RpY1xcbi0gKiBjb25kX3Jlc2NoZWQoKS5cXG4tICovXFxuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi1cXHRcXHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcXG4tXFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdilcXG4te1xcbi1cXHRfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIHRydWUpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0woc29ydF9yX25vbmF0b21pYyk7XFxuLVxcbiB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXFxuIFxcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcXG4gXFx0ICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpXFxuQEAgLTMzOSwxOSArMzA0LDYgQEAgdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbiBcXHRcXHQuc3dhcCA9IHN3YXBfZnVuYyxcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcXHUwMDI2dywgZmFsc2UpO1xcbitcXHRyZXR1cm4gc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFxcdTAwMjZ3KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNvcnQpO1xcbi1cXG4tdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4tXFx0XFx0ICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXFxuLVxcdFxcdCAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpXFxuLXtcXG4tXFx0c3RydWN0IHdyYXBwZXIgdyA9IHtcXG4tXFx0XFx0LmNtcCAgPSBjbXBfZnVuYyxcXG4tXFx0XFx0LnN3YXAgPSBzd2FwX2Z1bmMsXFxuLVxcdH07XFxuLVxcbi1cXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXFx1MDAyNncsIHRydWUpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMjo1NS44MDU4OTcxODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc1MjUwOTcyODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvcnRfclwiLFxuICAgIFwiY2hlY2tfZHVwX2lkc1wiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwncyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmMDYyOWRjYTZiNWVlODk5YzYxNjlhM2MyMWI1OGU4ZDFjMTJjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxOTowMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ydC5oIGIvaW5jbHVkZS9saW51eC9zb3J0LmhcbmluZGV4IGMwMWVmODA0YTBlYjIuLjg3MTc3NTk3OGFmMGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvcnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb3J0LmhcbkBAIC0yMywxNSArMjMsNCBAQCB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHQgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4gXHQgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7XG4gXG4tLyogVmVyc2lvbnMgdGhhdCBwZXJpb2RpY2FsbHkgY2FsbCBjb25kX3Jlc2NoZWQoKTogKi9cbi1cbi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgIGNvbnN0IHZvaWQgKnByaXYpO1xuLVxuLXZvaWQgc29ydF9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICBjbXBfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKTtcbi1cbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDI5MjYwOTUxYWE4NzEuLjFkN2U3M2RkYmFmYmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTM4MjYsNyArMzgyNiw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuIFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xuIFx0ICogYXJlIGxlZnQgc29ydGVkLlxuIFx0ICovXG4tXHRzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcbitcdHNvcnRfcihpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4gXG4gXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgY250OyBpKyspIHtcbiBcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG5kaWZmIC0tZ2l0IGEvbGliL3NvcnQuYyBiL2xpYi9zb3J0LmNcbmluZGV4IDUyMzYzOTk1Y2NjNWMuLjhlNzNkYzU1NDc2YmIgMTAwNjQ0XG4tLS0gYS9saWIvc29ydC5jXG4rKysgYi9saWIvc29ydC5jXG5AQCAtMTg2LDEzICsxODYsMzYgQEAgc3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXG4gXHRyZXR1cm4gaSAvIDI7XG4gfVxuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2Vcbi1cbi1zdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgY29uc3Qgdm9pZCAqcHJpdixcbi1cdFx0ICAgICBib29sIG1heV9zY2hlZHVsZSlcbisvKipcbisgKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzXG4rICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XG4rICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzXG4rICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50XG4rICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbisgKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTFxuKyAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXG4rICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuKyAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXG4rICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLlxuKyAqXG4rICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXG4rICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6XG4rICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mXG4rICogY21wX2Z1bmMoYiwgYSkuXG4rICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpIFx1MDAzYz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgXHUwMDNjPSAwLCB0aGVuXG4rICogY21wX2Z1bmMoYSwgYykgXHUwMDNjPSAwLlxuKyAqXG4rICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZVxuKyAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlXG4rICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXG4rICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS5cbisgKi9cbit2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbitcdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4rXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4rXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcbiB7XG4gXHQvKiBwcmUtc2NhbGUgY291bnRlcnMgZm9yIHBlcmZvcm1hbmNlICovXG4gXHRzaXplX3QgbiA9IG51bSAqIHNpemUsIGEgPSAobnVtLzIpICogc2l6ZTtcbkBAIC0yNjMsOSArMjg2LDYgQEAgc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHRcdFx0YiA9IHBhcmVudChiLCBsc2JpdCwgc2l6ZSk7XG4gXHRcdFx0ZG9fc3dhcChiYXNlICsgYiwgYmFzZSArIGMsIHNpemUsIHN3YXBfZnVuYywgcHJpdik7XG4gXHRcdH1cbi1cbi1cdFx0aWYgKG1heV9zY2hlZHVsZSlcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbiBcdG4gLT0gc2l6ZTtcbkBAIC0yNzMsNjMgKzI5Myw4IEBAIHN0YXRpYyB2b2lkIF9fc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0aWYgKG4gPT0gc2l6ZSAqIDIgXHUwMDI2XHUwMDI2IGRvX2NtcChiYXNlLCBiYXNlICsgc2l6ZSwgY21wX2Z1bmMsIHByaXYpIFx1MDAzZSAwKVxuIFx0XHRkb19zd2FwKGJhc2UsIGJhc2UgKyBzaXplLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIH1cbi1cbi0vKipcbi0gKiBzb3J0X3IgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzXG4tICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XG4tICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzXG4tICogQHNpemU6IHNpemUgb2YgZWFjaCBlbGVtZW50XG4tICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKiBAc3dhcF9mdW5jOiBwb2ludGVyIHRvIHN3YXAgZnVuY3Rpb24gb3IgTlVMTFxuLSAqIEBwcml2OiB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXG4tICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxuLSAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXG4tICogYXZvaWRzIGEgc2xvdyByZXRwb2xpbmUgYW5kIHNvIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyLlxuLSAqXG4tICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXG4tICogcHJvcGVydGllcyB0byBlbnN1cmUgY29ycmVjdCBhbmQgc3RhYmxlIHNvcnRpbmc6XG4tICogLSBBbnRpc3ltbWV0cnk6IGNtcF9mdW5jKGEsIGIpIG11c3QgcmV0dXJuIHRoZSBvcHBvc2l0ZSBzaWduIG9mXG4tICogY21wX2Z1bmMoYiwgYSkuXG4tICogLSBUcmFuc2l0aXZpdHk6IGlmIGNtcF9mdW5jKGEsIGIpIFx1MDAzYz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgXHUwMDNjPSAwLCB0aGVuXG4tICogY21wX2Z1bmMoYSwgYykgXHUwMDNjPSAwLlxuLSAqXG4tICogU29ydGluZyB0aW1lIGlzIE8obiBsb2cgbikgYm90aCBvbiBhdmVyYWdlIGFuZCB3b3JzdC1jYXNlLiBXaGlsZVxuLSAqIHF1aWNrc29ydCBpcyBzbGlnaHRseSBmYXN0ZXIgb24gYXZlcmFnZSwgaXQgc3VmZmVycyBmcm9tIGV4cGxvaXRhYmxlXG4tICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXG4tICogaXQgbGVzcyBzdWl0YWJsZSBmb3Iga2VybmVsIHVzZS5cbi0gKi9cbi12b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcbi17XG4tXHRfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIGZhbHNlKTtcbi19XG4gRVhQT1JUX1NZTUJPTChzb3J0X3IpO1xuIFxuLS8qKlxuLSAqIHNvcnRfcl9ub25hdG9taWMgLSBzb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzLCB3aXRoIGNvbmRfcmVzY2hlZFxuLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKlxuLSAqIFNhbWUgYXMgc29ydF9yLCBidXQgcHJlZmVycmVkIGZvciBsYXJnZXIgYXJyYXlzIGFzIGl0IGRvZXMgYSBwZXJpb2RpY1xuLSAqIGNvbmRfcmVzY2hlZCgpLlxuLSAqL1xuLXZvaWQgc29ydF9yX25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgICBzd2FwX3JfZnVuY190IHN3YXBfZnVuYyxcbi1cdFx0ICAgICAgY29uc3Qgdm9pZCAqcHJpdilcbi17XG4tXHRfX3NvcnRfcihiYXNlLCBudW0sIHNpemUsIGNtcF9mdW5jLCBzd2FwX2Z1bmMsIHByaXYsIHRydWUpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHNvcnRfcl9ub25hdG9taWMpO1xuLVxuIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdCAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbiBcdCAgc3dhcF9mdW5jX3Qgc3dhcF9mdW5jKVxuQEAgLTMzOSwxOSArMzA0LDYgQEAgdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0XHQuc3dhcCA9IHN3YXBfZnVuYyxcbiBcdH07XG4gXG4tXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dywgZmFsc2UpO1xuK1x0cmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcdTAwMjZ3KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChzb3J0KTtcbi1cbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbi17XG4tXHRzdHJ1Y3Qgd3JhcHBlciB3ID0ge1xuLVx0XHQuY21wICA9IGNtcF9mdW5jLFxuLVx0XHQuc3dhcCA9IHN3YXBfZnVuYyxcbi1cdH07XG4tXG4tXHRyZXR1cm4gX19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dywgdHJ1ZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0woc29ydF9ub25hdG9taWMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDI6NTUuODA1ODk5MzEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkyNjc5Nzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBzaW1wbGlmeWluZyB0aGUgc29ydGluZyBpbXBsZW1lbnRhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIGF3YXkgc29tZSBvdmVyaGVhZC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZW1vdmFsIG9mIGBfbm9uYXRvbWljYCB2YXJpYW50cyBvZiB0aGUgc29ydCBmdW5jdGlvbnMgKGBzb3J0X3Jfbm9uYXRvbWljYCwgYHNvcnRfbm9uYXRvbWljYCkgaW4gYGluY2x1ZGUvbGludXgvc29ydC5oYCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW1wbGVtZW50YXRpb24gaW4gYGxpYi9zb3J0LmNgLiBUaGVzZSBgX25vbmF0b21pY2AgdmFyaWFudHMgd2VyZSBsaWtlbHkgZGVzaWduZWQgZm9yIHNjZW5hcmlvcyB3aGVyZSBwcmVlbXB0aW9uIHdhcyB1bmRlc2lyYWJsZSBkdXJpbmcgdGhlIHNvcnQsIHBlcmhhcHMgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiBvciBpbnRlcnJ1cHQgY29udGV4dC4gVGhlIHJlbW92YWwgc3VnZ2VzdHMgZWl0aGVyOlxuXG4xLiAgVGhhdCB0aGVzZSBzY2VuYXJpb3MgYXJlIG5vIGxvbmdlciByZWxldmFudCxcbjIuICBUaGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFyb3VuZCB0aGVzZSBzb3J0cyBoYXMgY2hhbmdlZCwgb3JcbjMuICBUaGF0IGEgbGVzcyBpbnRydXNpdmUgbWVjaGFuaXNtIGlzIG5vdyBpbiBwbGFjZSB0byBoYW5kbGUgdGhvc2UgY29uY2VybnMuXG5cblRoZSBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBjaGFuZ2UsIHdoZXJlIGBzb3J0X3Jfbm9uYXRvbWljYCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdGFuZGFyZCBgc29ydF9yYCBpbiBgY2hlY2tfZHVwX2lkcygpYCwgaXMgdGVsbGluZy4gVGhpcyBmdW5jdGlvbiwgYGNoZWNrX2R1cF9pZHMoKWAsIGxpa2VseSBpbnZvbHZlcyBhIGRhdGEgc3RydWN0dXJlIChwZXJoYXBzIGEgbGlzdCBvZiB0cmFjZXBvaW50cyBvciBCUEYgcHJvZ3JhbSBpZGVudGlmaWVycykgdGhhdCBuZWVkcyB0byBiZSBzb3J0ZWQgZm9yIGVmZmljaWVudCBsb29rdXAgb3IgY29tcGFyaXNvbi4gVGhlIGZhY3QgdGhhdCB0aGUgYF9ub25hdG9taWNgIHZlcnNpb24gd2FzICpvcmlnaW5hbGx5KiB1c2VkIGhlcmUgc3VnZ2VzdHMgdGhhdCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSBvciBhY2Nlc3MgcGF0dGVybnMgaW4gYGNoZWNrX2R1cF9pZHMoKWAgY291bGQgYmUgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBub3QgY2FyZWZ1bGx5IG1hbmFnZWQuIEhvd2V2ZXIsIHRoZSBzd2l0Y2ggdG8gdGhlIHN0YW5kYXJkIGBzb3J0X3JgIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmRzIGFsbG93aW5nIHByZWVtcHRpb24gd2l0aGluIHRoYXQgc29ydCwgaW1wbHlpbmcgdGhlIGRlc2lnbiBoYXMgYmVlbiBtb2RpZmllZC5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGNoZWNrX2R1cF9pZHMoKWAgaXMgZG9pbmcuIEknbGwgbmVlZCB0byBleHBsb3JlIHRoZSByZXN0IG9mIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBmb3IgZnVydGhlciB1c2VzIG9mIHRoaXMgc29ydCBvciBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIGRlc2lnbiBvZiB0aGUgbG9ja2luZy9wcmVlbXB0aW9uIHN0cmF0ZWdpZXMuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgcmVnYXJkaW5nIGNvbmN1cnJlbmN5IGFuZCBzY2hlZHVsaW5nLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBjb25kX3Jlc2NoZWQoKWAgZnJvbSB0aGUgbmV3IGBzb3J0X3JgIGluIGBsaWIvc29ydC5jYCByYWlzZXMgcXVlc3Rpb25zIHJlZ2FyZGluZyBzY2hlZHVsaW5nIGJlaGF2aW9yLlxuXG5UaGlzIGlzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBmb2N1cyBvbiBob3cgdGhpcyBwYXRjaCBtb2RpZmllcyBwcmVlbXB0aW9uIHNhZmV0eSBpbiB0aGVzZSBmdW5jdGlvbnMgYW5kIGlmIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBjb3VsZCBub3cgYmUgc3ViamVjdCB0byB1bmV4cGVjdGVkIGludGVycnVwdGlvbnMuIFRoaXMgaXMgYSBjcml0aWNhbCBwYXRjaCBhbmQgSSBtdXN0IGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRob3JvdWdobHkgdW5kZXJzdG9vZCBhbmQgd2VsbC10ZXN0ZWQgYmVmb3JlIGJlaW5nIGFjY2VwdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MDIuNzMyNjk5OTQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDUwNjgxNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfZHVwX2lkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgwMT1zdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MTgtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4MTk6c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MjAte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4NDA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODItXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4ODM6XFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MDQuODM3NzczMDQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU0Mzg1MzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEJQRiBUcmFjaW5nIElzc3VlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIGNvbmRpdGlvbnMgZm9yIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgY2hlY2tfZHVwX2lkc2AuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCUEYgaW50ZXJuYWxzLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBkZWx2ZSBpbnRvIGBicGZfdHJhY2UuY2AgYW5kIGZvY3VzIG9uIHRoZSByZWdpb24gYXJvdW5kIGxpbmVzIDM4MDAgdG8gMzkwMC4gVGhhdCByYW5nZSBpcyBhIGxpa2VseSBob3RzcG90IGZvciB0aGUgbG9naWMgdGhhdCBnb3Zlcm5zIGZ1bmN0aW9uIGF0dGFjaG1lbnQgYW5kIHBvdGVudGlhbCBJRCBjbGFzaGVzLiBJJ20gZ3Vlc3NpbmcgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBjaGVja3MgYW5kIGNvbmRpdGlvbmFsIGNhbGxzIHRoYXQgSSBuZWVkIHRvIGRpc3NlY3QuIEdyYWJiaW5nIG15IHRydXN0eSBkZWJ1Z2dlciwgYW5kIG9wZW5pbmcgYGJwZl90cmFjZS5jYCB0byB0aGF0IGV4YWN0IHNwb3Qgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29udHJvbCBmbG93IGFuZCBoZWxwIG1lIGlzb2xhdGUgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gYmUgaW52b2tlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTk5NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjA3LjM4MTYyOTg1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwMDpcXHRcXG4zODAxOlxcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXFxuMzgwMjpcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zODAzOlxcdHtcXG4zODA0OlxcdFxcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XFxuMzgwNTpcXHRcXHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XFxuMzgwNjpcXHRcXHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xcbjM4MDc6XFx0XFxuMzgwODpcXHRcXHRpZHMgICAgID0gZGF0YVswXTtcXG4zODA5OlxcdFxcdGNvb2tpZXMgPSBkYXRhWzFdO1xcbjM4MTA6XFx0XFxuMzgxMTpcXHRcXHRpZiAoY29va2llcykge1xcbjM4MTI6XFx0XFx0XFx0Y29va2llX2EgPSBjb29raWVzICsgKGlkX2EgLSBpZHMpO1xcbjM4MTM6XFx0XFx0XFx0Y29va2llX2IgPSBjb29raWVzICsgKGlkX2IgLSBpZHMpO1xcbjM4MTQ6XFx0XFx0XFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XFxuMzgxNTpcXHRcXHR9XFxuMzgxNjpcXHRcXHRzd2FwKCppZF9hLCAqaWRfYik7XFxuMzgxNzpcXHR9XFxuMzgxODpcXHRcXG4zODE5OlxcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbjM4MjA6XFx0e1xcbjM4MjE6XFx0XFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XFxuMzgyMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4zODIzOlxcdFxcbjM4MjQ6XFx0XFx0LypcXG4zODI1OlxcdFxcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcXG4zODI2OlxcdFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4zODI3OlxcdFxcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cXG4zODI4OlxcdFxcdCAqL1xcbjM4Mjk6XFx0XFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDU6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NjpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ3OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0ODpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDk6XFx0XFx0aW50IGVycjtcXG4zODUwOlxcdFxcbjM4NTE6XFx0XFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XFxuMzg1MjpcXHRcXHRjbnQgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNudDtcXG4zODUzOlxcdFxcbjM4NTQ6XFx0XFx0aWYgKCFjbnQgfHwgIXVpZHMpXFxuMzg1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zODU2OlxcdFxcdGlmIChjbnQgXFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXFxuMzg1NzpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjM4NTg6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzIHx8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcXG4zODU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NjA6XFx0XFxuMzg2MTpcXHRcXHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XFxuMzg2MjpcXHRcXHRpZiAoIWlkcylcXG4zODYzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM4NjQ6XFx0XFxuMzg2NTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XFxuMzg2NjpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4Njc6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODY4OlxcdFxcdH1cXG4zODY5OlxcdFxcbjM4NzA6XFx0XFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jb29raWVzKTtcXG4zODcxOlxcdFxcdGlmICh1Y29va2llcykge1xcbjM4NzI6XFx0XFx0XFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XFxuMzg3MzpcXHRcXHRcXHRpZiAoIWNvb2tpZXMpIHtcXG4zODc0OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg3NTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4NzY6XFx0XFx0XFx0fVxcbjM4Nzc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xcbjM4Nzg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4zODc5OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4MDpcXHRcXHRcXHR9XFxuMzg4MTpcXHRcXHR9XFxuMzg4MjpcXHRcXG4zODgzOlxcdFxcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xcbjM4ODQ6XFx0XFx0aWYgKGVycilcXG4zODg1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4NjpcXHRcXG4zODg3OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcXG4zODg4OlxcdFxcdFxcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcXG4zODg5OlxcdFxcdFxcdGlmICghZmV4aXRzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjA3LjM4MTc5MjcxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODUyOTc3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgU29ydCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHNvcnRfbm9uYXRvbWljYCBhbmQgYHNvcnRfcl9ub25hdG9taWNgIGFyZSBnb25lLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgd2VyZSByZW1vdmVkLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBhZHZhbmNlbWVudHMgaW4gdGhlIGtlcm5lbCdzIHByZWVtcHRpb24gbWVjaGFuaXNtcyDigJMgc3BlY2lmaWNhbGx5IGxhenkgcHJlZW1wdGlvbiwgZHluYW1pYyBwcmVlbXB0aW9uLCBvciBwZXJoYXBzIGJlY2F1c2UgYGNvbmRfcmVzY2hlZGAgYmVjYW1lIHVubmVjZXNzYXJ5IG9yIHdhcyBlbGltaW5hdGVkIGluIG1hbnkgYXJlYXMsIGluY2x1ZGluZyB3aXRoaW4gdGhlIHNvcnQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMsIEknbGwgbmVlZCB0byBkaWcgaW50byBgbGliL3NvcnQuY2AuIExldCdzIGV4YW1pbmUgdGhhdCBmaWxlLiBJJ2xsIHByb2JhYmx5IGxvb2sgYXQgdGhlIGZ1bGwgZmlsZSwgb3IgYXQgbGVhc3QgYSBzaXplYWJsZSBjaHVuayBvZiBpdCwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoZSBtb2RpZmljYXRpb25zLiBUaGlzIHNob3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSByZW1vdmFsIG9mIHRob3NlIHNwZWNpZmljIHNvcnQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MTAuMDY3MDkzNTM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3NvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0ICovXFxuIDE4MTpcXHRfX2F0dHJpYnV0ZV9jb25zdF9fIF9fYWx3YXlzX2lubGluZVxcbiAxODI6XFx0c3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXFxuIDE4MzpcXHR7XFxuIDE4NDpcXHRcXHRpIC09IHNpemU7XFxuIDE4NTpcXHRcXHRpIC09IHNpemUgXFx1MDAyNiAtKGkgXFx1MDAyNiBsc2JpdCk7XFxuIDE4NjpcXHRcXHRyZXR1cm4gaSAvIDI7XFxuIDE4NzpcXHR9XFxuIDE4ODpcXHRcXG4gMTg5OlxcdC8qKlxcbiAxOTA6XFx0ICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xcbiAxOTE6XFx0ICogQGJhc2U6IHBvaW50ZXIgdG8gZGF0YSB0byBzb3J0XFxuIDE5MjpcXHQgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcXG4gMTkzOlxcdCAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxcbiAxOTQ6XFx0ICogQGNtcF9mdW5jOiBwb2ludGVyIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4gMTk1OlxcdCAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXFxuIDE5NjpcXHQgKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cXG4gMTk3OlxcdCAqXFxuIDE5ODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBoZWFwc29ydCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBZb3UgbWF5IHByb3ZpZGVcXG4gMTk5OlxcdCAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcXG4gMjAwOlxcdCAqIGNvcHkgKGUuZy4gZml4IHVwIHBvaW50ZXJzIG9yIGF1eGlsaWFyeSBkYXRhKSwgYnV0IHRoZSBidWlsdC1pbiBzd2FwXFxuIDIwMTpcXHQgKiBhdm9pZHMgYSBzbG93IHJldHBvbGluZSBhbmQgc28gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuXFxuIDIwMjpcXHQgKlxcbiAyMDM6XFx0ICogVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gbXVzdCBhZGhlcmUgdG8gc3BlY2lmaWMgbWF0aGVtYXRpY2FsXFxuIDIwNDpcXHQgKiBwcm9wZXJ0aWVzIHRvIGVuc3VyZSBjb3JyZWN0IGFuZCBzdGFibGUgc29ydGluZzpcXG4gMjA1OlxcdCAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxcbiAyMDY6XFx0ICogY21wX2Z1bmMoYiwgYSkuXFxuIDIwNzpcXHQgKiAtIFRyYW5zaXRpdml0eTogaWYgY21wX2Z1bmMoYSwgYikgXFx1MDAzYz0gMCBhbmQgY21wX2Z1bmMoYiwgYykgXFx1MDAzYz0gMCwgdGhlblxcbiAyMDg6XFx0ICogY21wX2Z1bmMoYSwgYykgXFx1MDAzYz0gMC5cXG4gMjA5OlxcdCAqXFxuIDIxMDpcXHQgKiBTb3J0aW5nIHRpbWUgaXMgTyhuIGxvZyBuKSBib3RoIG9uIGF2ZXJhZ2UgYW5kIHdvcnN0LWNhc2UuIFdoaWxlXFxuIDIxMTpcXHQgKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxcbiAyMTI6XFx0ICogTyhuKm4pIHdvcnN0LWNhc2UgYmVoYXZpb3IgYW5kIGV4dHJhIG1lbW9yeSByZXF1aXJlbWVudHMgdGhhdCBtYWtlXFxuIDIxMzpcXHQgKiBpdCBsZXNzIHN1aXRhYmxlIGZvciBrZXJuZWwgdXNlLlxcbiAyMTQ6XFx0ICovXFxuIDIxNTpcXHR2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG4gMjE2OlxcdFxcdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXFxuIDIxNzpcXHRcXHQgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXFxuIDIxODpcXHRcXHQgICAgY29uc3Qgdm9pZCAqcHJpdilcXG4gMjE5OlxcdHtcXG4gMjIwOlxcdFxcdC8qIHByZS1zY2FsZSBjb3VudGVycyBmb3IgcGVyZm9ybWFuY2UgKi9cXG4gMjIxOlxcdFxcdHNpemVfdCBuID0gbnVtICogc2l6ZSwgYSA9IChudW0vMikgKiBzaXplO1xcbiAyMjI6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IGxzYml0ID0gc2l6ZSBcXHUwMDI2IC1zaXplOyAgLyogVXNlZCB0byBmaW5kIHBhcmVudCAqL1xcbiAyMjM6XFx0XFx0c2l6ZV90IHNoaWZ0ID0gMDtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0aWYgKCFhKVxcdFxcdC8qIG51bSBcXHUwMDNjIDIgfHwgc2l6ZSA9PSAwICovXFxuIDIyNjpcXHRcXHRcXHRyZXR1cm47XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdC8qIGNhbGxlZCBmcm9tICdzb3J0JyB3aXRob3V0IHN3YXAgZnVuY3Rpb24sIGxldCdzIHBpY2sgdGhlIGRlZmF1bHQgKi9cXG4gMjI5OlxcdFxcdGlmIChzd2FwX2Z1bmMgPT0gU1dBUF9XUkFQUEVSIFxcdTAwMjZcXHUwMDI2ICEoKHN0cnVjdCB3cmFwcGVyICopcHJpdiktXFx1MDAzZXN3YXApXFxuIDIzMDpcXHRcXHRcXHRzd2FwX2Z1bmMgPSBOVUxMO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAoIXN3YXBfZnVuYykge1xcbiAyMzM6XFx0XFx0XFx0aWYgKGlzX2FsaWduZWQoYmFzZSwgc2l6ZSwgOCkpXFxuIDIzNDpcXHRcXHRcXHRcXHRzd2FwX2Z1bmMgPSBTV0FQX1dPUkRTXzY0O1xcbiAyMzU6XFx0XFx0XFx0ZWxzZSBpZiAoaXNfYWxpZ25lZChiYXNlLCBzaXplLCA0KSlcXG4gMjM2OlxcdFxcdFxcdFxcdHN3YXBfZnVuYyA9IFNXQVBfV09SRFNfMzI7XFxuIDIzNzpcXHRcXHRcXHRlbHNlXFxuIDIzODpcXHRcXHRcXHRcXHRzd2FwX2Z1bmMgPSBTV0FQX0JZVEVTO1xcbiAyMzk6XFx0XFx0fVxcbiAyNDA6XFx0XFxuIDI0MTpcXHRcXHQvKlxcbiAyNDI6XFx0XFx0ICogTG9vcCBpbnZhcmlhbnRzOlxcbiAyNDM6XFx0XFx0ICogMS4gZWxlbWVudHMgW2Esbikgc2F0aXNmeSB0aGUgaGVhcCBwcm9wZXJ0eSAoY29tcGFyZSBncmVhdGVyIHRoYW5cXG4gMjQ0OlxcdFxcdCAqICAgIGFsbCBvZiB0aGVpciBjaGlsZHJlbiksXFxuIDI0NTpcXHRcXHQgKiAyLiBlbGVtZW50cyBbbixudW0qc2l6ZSkgYXJlIHNvcnRlZCwgYW5kXFxuIDI0NjpcXHRcXHQgKiAzLiBhIFxcdTAwM2M9IGIgXFx1MDAzYz0gYyBcXHUwMDNjPSBkIFxcdTAwM2M9IG4gKHdoZW5ldmVyIHRoZXkgYXJlIHZhbGlkKS5cXG4gMjQ3OlxcdFxcdCAqL1xcbiAyNDg6XFx0XFx0Zm9yICg7Oykge1xcbiAyNDk6XFx0XFx0XFx0c2l6ZV90IGIsIGMsIGQ7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdFxcdGlmIChhKVxcdFxcdFxcdC8qIEJ1aWxkaW5nIGhlYXA6IHNpZnQgZG93biBhICovXFxuIDI1MjpcXHRcXHRcXHRcXHRhIC09IHNpemUgXFx1MDAzY1xcdTAwM2Mgc2hpZnQ7XFxuIDI1MzpcXHRcXHRcXHRlbHNlIGlmIChuIFxcdTAwM2UgMyAqIHNpemUpIHsgLyogU29ydGluZzogRXh0cmFjdCB0d28gbGFyZ2VzdCBlbGVtZW50cyAqL1xcbiAyNTQ6XFx0XFx0XFx0XFx0biAtPSBzaXplO1xcbiAyNTU6XFx0XFx0XFx0XFx0ZG9fc3dhcChiYXNlLCBiYXNlICsgbiwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcXG4gMjU2OlxcdFxcdFxcdFxcdHNoaWZ0ID0gZG9fY21wKGJhc2UgKyBzaXplLCBiYXNlICsgMiAqIHNpemUsIGNtcF9mdW5jLCBwcml2KSBcXHUwMDNjPSAwO1xcbiAyNTc6XFx0XFx0XFx0XFx0YSA9IHNpemUgXFx1MDAzY1xcdTAwM2Mgc2hpZnQ7XFxuIDI1ODpcXHRcXHRcXHRcXHRuIC09IHNpemU7XFxuIDI1OTpcXHRcXHRcXHRcXHRkb19zd2FwKGJhc2UgKyBhLCBiYXNlICsgbiwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MTAuMDY3MTg2Mzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcxODk3MjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBTb3J0aW5nIExpYnJhcnkgUmVmYWN0b3IqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsaWIvc29ydC5jYCBjb25jZXJuaW5nIGBzb3J0X3JgIGFuZCBgc29ydGAsIGFuZCBzb21lIHJlbGF0ZWQgY2hhbmdlcyBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgYGluY2x1ZGUvbGludXgvc29ydC5oYC4gVGhlIGNvcmUgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/XG5cbkkgbmVlZCB0byBhcHBseSB0aGUgdHJpYWdlIHBoaWxvc29waHkuIEZpcnN0LCByZWFjaGFiaWxpdHkuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiBpdCdzIG5vdCByZWFjaGFibGUsIGRvbid0IGJvdGhlci4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCBgc29ydF9yYCBhbmQgYHNvcnRgIGFyZSBpbiBgbGliL3NvcnQuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG5vdCBhc3N1bWUgdGhhdCB0aGUgYXV0aG9ycyBhcmUgY29ycmVjdCBpbiB0aGVpciBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiLiBDb2RlIHJlZmFjdG9yaW5ncyBjYW4gaW50cm9kdWNlIGJ1Z3MuIEFuZCBub3cgSSBzZWUgdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhIHBhdGggaW50byBCUEYgZnVuY3Rpb25hbGl0eS4gYGNoZWNrX2R1cF9pZHNgLCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIG5vdyBjYWxscyB0aGUgbW9kaWZpZWQgYHNvcnRfcmAuIEJpbmdvISBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBwYXJ0IG9mIGEgcmVhY2hhYmxlIEJQRiBzeXNjYWxsIHBhdGgg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBCUEZfTElOS19DUkVBVEVgIHdpdGggbXVsdGktYXR0YWNoIHRyYWNpbmcuIFRoaXMgbWVhbnMgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiByZWFjaGFibGUuXG5cblRoZSBpbnN0cnVjdGlvbnMgZ3VpZGUgbWUgdG8gY29uc2lkZXIgaWYgdGhlIG1vZGlmaWNhdGlvbnMgZmFsbCBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMsIHNwZWNpZmljYWxseSBcIkNvcmUgU3Vic3lzdGVtc1wiIGFuZCBcIlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwcy5cIiBUaGlzIGNoYW5nZSBhZmZlY3RzIGNvZGUgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgKEJQRiB0cmFjaW5nLCBhIGNvcmUgc3Vic3lzdGVtKSBhbmQgZG9lcyBtb2RpZnkgc29ydGluZyBsb2dpYy4gU28sIGl0IGRlZmluaXRlbHkgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBmb2N1cyBzeW1ib2xzLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gVGhlIGtleSBoZXJlIGlzIG5vdCB0byBcImRpbHV0ZVwiIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBoYXZlOiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhcyB0aGUgQlBGIGVudHJ5IHBvaW50LCBgY2hlY2tfZHVwX2lkc2AgYXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCB1c2VzIGBzb3J0X3JgLiBgc29ydF9yYCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIHVzZWQuIEl0J3MgYSBrZXkgZXhwb3J0LiBUaGUgYHNvcnRgIGZ1bmN0aW9uICh3aGljaCBub3cgY2FsbHMgYHNvcnRfcmApIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZSByZWZhY3RvcmluZy4gKkJ1dCosIEkgc2hvdWxkIGNoZWNrIGlmIGBzb3J0YCBvciBgc29ydF9yYCBpcyB1YmlxdWl0b3VzLiBJZiBpdCBpcywgdGhlbiBJIG5lZWQgdG8gcmVmaW5lIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEhvdyBtYW55IHBsYWNlcyBpbiB0aGUga2VybmVsIGNhbGwgYHNvcnRgIG9yIGBzb3J0X3JgPyBJIG11c3QgY2hlY2sgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTI3NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzoxNS43ODYxNjExNzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDk5ODA1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ydF9yXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYz04NDY9Ym9vbCBpbnRlbF9kcF9saW5rX2NhcHNfdXBkYXRlKHN0cnVjdCBpbnRlbF9kcF9saW5rX2NhcHMgKmxpbmtfY2FwcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtODk0LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmM6ODk1OlxcdHNvcnRfcihsaW5rX2NhcHMtXFx1MDAzZWNvbmZpZ3MsIGxpbmtfY2Fwcy1cXHUwMDNlbnVtX2NvbmZpZ3MsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy04OTYtXFx0ICAgICAgIHNpemVvZihsaW5rX2NhcHMtXFx1MDAzZWNvbmZpZ3NbMF0pLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYy05MDQtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9saW5rX2NhcHMuYzo5MDU6XFx0c29ydF9yKGxpbmtfY2Fwcy1cXHUwMDNlcmF0ZV9sYW5lX21hcCwgbGlua19jYXBzLVxcdTAwM2VudW1fY29uZmlncyxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkwNi1cXHQgICAgICAgc2l6ZW9mKGxpbmtfY2Fwcy1cXHUwMDNlcmF0ZV9sYW5lX21hcFswXSksXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jLTkwOS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX2xpbmtfY2Fwcy5jOjkxMDpcXHRzb3J0X3IobGlua19jYXBzLVxcdTAwM2VsYW5lX3JhdGVfbWFwLCBsaW5rX2NhcHMtXFx1MDAzZW51bV9jb25maWdzLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbGlua19jYXBzLmMtOTExLVxcdCAgICAgICBzaXplb2YobGlua19jYXBzLVxcdTAwM2VsYW5lX3JhdGVfbWFwWzBdKSxcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jPTM5Mz12NGwyX2gyNjRfYnVpbGRfcF9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTM5Ny1cXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXFx1MDAzZXVub3JkZXJlZF9yZWZsaXN0WzBdKSAqIGJ1aWxkZXItXFx1MDAzZW51bV92YWxpZCk7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6Mzk4OlxcdHNvcnRfcihyZWZsaXN0LCBidWlsZGVyLVxcdTAwM2VudW1fdmFsaWQsIHNpemVvZigqcmVmbGlzdCksXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtMzk5LVxcdCAgICAgICB2NGwyX2gyNjRfcF9yZWZfbGlzdF9jbXAsIE5VTEwsIGJ1aWxkZXIpO1xcbi0tXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM9NDIzPXY0bDJfaDI2NF9idWlsZF9iX3JlZl9saXN0cyhjb25zdCBzdHJ1Y3QgdjRsMl9oMjY0X3JlZmxpc3RfYnVpbGRlciAqYnVpbGRlcixcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTQyOC1cXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXFx1MDAzZXVub3JkZXJlZF9yZWZsaXN0WzBdKSAqIGJ1aWxkZXItXFx1MDAzZW51bV92YWxpZCk7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6NDI5OlxcdHNvcnRfcihiMF9yZWZsaXN0LCBidWlsZGVyLVxcdTAwM2VudW1fdmFsaWQsIHNpemVvZigqYjBfcmVmbGlzdCksXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtNDMwLVxcdCAgICAgICB2NGwyX2gyNjRfYjBfcmVmX2xpc3RfY21wLCBOVUxMLCBidWlsZGVyKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaDI2NC5jLTQzMy1cXHQgICAgICAgc2l6ZW9mKGJ1aWxkZXItXFx1MDAzZXVub3JkZXJlZF9yZWZsaXN0WzBdKSAqIGJ1aWxkZXItXFx1MDAzZW51bV92YWxpZCk7XFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmM6NDM0OlxcdHNvcnRfcihiMV9yZWZsaXN0LCBidWlsZGVyLVxcdTAwM2VudW1fdmFsaWQsIHNpemVvZigqYjFfcmVmbGlzdCksXFxuZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1oMjY0LmMtNDM1LVxcdCAgICAgICB2NGwyX2gyNjRfYjFfcmVmX2xpc3RfY21wLCBOVUxMLCBidWlsZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ydC5oLTE2LVxcbmluY2x1ZGUvbGludXgvc29ydC5oOjE3OnZvaWQgc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbmluY2x1ZGUvbGludXgvc29ydC5oLTE4LVxcdCAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTQxNTA9c3RydWN0IGJ0Zl9yZWNvcmQgKmJ0Zl9wYXJzZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQyNzMtXFxua2VybmVsL2JwZi9idGYuYzo0Mjc0OlxcdHNvcnRfcihyZWMtXFx1MDAzZWZpZWxkcywgcmVjLVxcdTAwM2VjbnQsIHNpemVvZihzdHJ1Y3QgYnRmX2ZpZWxkKSwgYnRmX2ZpZWxkX2NtcCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTQyNzUtXFx0ICAgICAgIE5VTEwsIHJlYyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjc4MD1pbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4NjAtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI4NjE6XFx0XFx0c29ydF9yKHVzLnN5bXMsIGNudCwgc2l6ZW9mKCp1cy5zeW1zKSwgc3ltYm9sc19jbXBfcixcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjg2Mi1cXHRcXHQgICAgICAgc3ltYm9sc19zd2FwX3IsIFxcdTAwMjZkYXRhKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTA2LVxcdFxcdCAqL1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTA3OlxcdFxcdHNvcnRfcihhZGRycywgY250LCBzaXplb2YoKmFkZHJzKSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjkwOC1cXHRcXHQgICAgICAgYnBmX2twcm9iZV9tdWx0aV9jb29raWVfY21wLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4MTk9c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgyOC1cXHQgKi9cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzgyOTpcXHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODMwLVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmM9ODM2Nz1zdGF0aWMgdm9pZCBzZXR1cF90cmFjZV9zY3JhdGNoKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy04NDAzLVxcdG5yX2VudHJpZXMgPSB0c2NyYXRjaC1cXHUwMDNlbnJfZW50cmllcztcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo4NDA0OlxcdHNvcnRfcih0c2NyYXRjaC1cXHUwMDNlZW50cmllcywgbnJfZW50cmllcywgc2l6ZW9mKHN0cnVjdCB0cmFjZV9tb2RfZW50cnkpLFxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTg0MDUtXFx0ICAgICAgIG1vZF9hZGRyX2NvbXAsIE5VTEwsIE5VTEwpO1xcbi0tXFxubGliL3NvcnQuYz0xODI9c3RhdGljIHNpemVfdCBwYXJlbnQoc2l6ZV90IGksIHVuc2lnbmVkIGludCBsc2JpdCwgc2l6ZV90IHNpemUpXFxuLS1cXG5saWIvc29ydC5jLTIxNC0gKi9cXG5saWIvc29ydC5jOjIxNTp2b2lkIHNvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcXG5saWIvc29ydC5jLTIxNi1cXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxcbi0tXFxubGliL3NvcnQuYz0yOTg9dm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxcbi0tXFxubGliL3NvcnQuYy0zMDYtXFxubGliL3NvcnQuYzozMDc6XFx0cmV0dXJuIHNvcnRfcihiYXNlLCBudW0sIHNpemUsIF9DTVBfV1JBUFBFUiwgU1dBUF9XUkFQUEVSLCBcXHUwMDI2dyk7XFxubGliL3NvcnQuYy0zMDgtfVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmM9NTA3PXN0YXRpYyBpbnQgZHVtcF9idGZfa2Z1bmNzKHN0cnVjdCBidGZfZHVtcCAqZCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMtNTQ3LVxcdC8qIFNvcnQga2Z1bmNzIGJ5IG5hbWUgZm9yIGltcHJvdmVkIHZtbGludXguaCBzdGFiaWxpdHkgICovXFxudG9vbHMvYnBmL2JwZnRvb2wvYnRmLmM6NTQ4OlxcdHFzb3J0X3Ioa2Z1bmNzLmVsZW1zLCBrZnVuY3MuY250LCBzaXplb2YoKmtmdW5jcy5lbGVtcyksIGNtcF9rZnVuY3MsICh2b2lkICopYnRmKTtcXG50b29scy9icGYvYnBmdG9vbC9idGYuYy01NDktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtmdW5jcy5jbnQ7IGkrKykge1xcbi0tXFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYz0xNTM1PXN0YXRpYyBpbnQgc29ydF9idGZfYnlfbmFtZShzdHJ1Y3QgYnRmICpidGYpXFxuLS1cXG50b29scy9icGYvcmVzb2x2ZV9idGZpZHMvbWFpbi5jLTE1NTktXFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYzoxNTYwOlxcdHFzb3J0X3IocGVybXV0ZV9pZHMsIG5yX3R5cGVzLCBzaXplb2YoKnBlcm11dGVfaWRzKSwgY21wX3R5cGVfbmFtZXMsXFxudG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYy0xNTYxLVxcdFxcdGJ0Zik7XFxuLS1cXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jPTMxMT1zdGF0aWMgaW50IHNvcnRfcmVsKHN0cnVjdCByZWxfaW5mbyAqcmkpXFxuLS1cXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jLTMyMC1cXHRcXHRyaS1cXHUwMDNlc29ydGVkW2ldID0gaTtcXG50b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jOjMyMTpcXHRxc29ydF9yKHJpLVxcdTAwM2Vzb3J0ZWQsIHJpLVxcdTAwM2Vucl9lbnRyaWVzLCBzeiwgcmVsX2NtcCwgcmkpO1xcbnRvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMtMzIyLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzoxOC4yMzYxNDk1ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzODQzMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgRnVuY3Rpb24gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBgc29ydF9yYCBpc24ndCBzb21lIHdpZGVzcHJlYWQgdXRpbGl0eSBmdW5jdGlvbi4gR29vZCB0byBrbm93LiBNeSBpbml0aWFsIGh1bmNoIHRoYXQgaXQgd2FzIGRlZXBseSBpbmdyYWluZWQgZXZlcnl3aGVyZSBpcyB3cm9uZy4gSXQncyBhY3R1YWxseSBjYWxsZWQgaW4gdGhlc2UgcmVsYXRpdmVseSBjb250YWluZWQsIHNwZWNpYWxpemVkIGFyZWFzOiBgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBgYnRmX3BhcnNlX2ZpZWxkc2AsIGFuZCBhIGZldyBvdGhlcnMuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiB1YmlxdWl0b3VzIGlzIGltcG9ydGFudDsgaXQgbWVhbnMgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGVmZm9ydHMgd2lsbCBiZSBmb2N1c2VkLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYW5kIGBjaGVja19kdXBfaWRzYCBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFzIHdlbGwsIHNpbmNlIHRoZXkncmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBjaGVjayB3aGF0J3MgbmVlZGVkIGZvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBGcm9tIHRoZXJlLCBJJ2xsIHNlYXJjaCB0byBkZXRlcm1pbmUgd2hlcmUgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgYWN0dWFsbHkgY29tcGlsZWQsIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjIwLjc3NDU4NjI2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDI5NzA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03OTg9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo3OTk6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKTtcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTgwMC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04NTc9c3RhdGljIGlubGluZSBpbnRcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg1ODpicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg1OS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NzkzPXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg0My1cXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODQ0OlxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODQ1LVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODE5PXN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzktXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4NDA6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODQxLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTMwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjIyLjQ0NDg5MDg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNTA4NTEwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gQlBGIFRyYWNlIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIEJQRiB0cmFjaW5nIHNldHVwIHdvcmtzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgY2hlY2tfZHVwX2lkc2AgZnVuY3Rpb25zIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lcyAzODAwIHRvIDM5NDAsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGAjaWZkZWZgIGNvbmRpdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgdGVsbCBtZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgYmVnaW5uaW5nLCBsaW5lcyAxIHRvIDUwLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZSBpbmNsdWRlIHN0YXRlbWVudHMgYXJlIG1hbmFnZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZS4gR290dGEgYmUgZWZmaWNpZW50IGhlcmUsIGp1c3QgYSBxdWljayBzY2FuIHRvIG9yaWVudCBteXNlbGYsIHRoZW4gSSB3aWxsIGRpdmUgZGVlcGVyIGFzIG5lZWRlZC4gSSBob3BlIHRoaXMgZ2V0cyBtZSB1cCB0byBzcGVlZCwgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzoyNi43OTU3NDQyNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzgwOlxcdFxcdH1cXG4zNzgxOlxcdH1cXG4zNzgyOlxcdCNlbmRpZlxcbjM3ODM6XFx0XFxuMzc4NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XFxuMzc4NTpcXHRcXHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcXG4zNzg2OlxcdFxcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxcbjM3ODc6XFx0XFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG4zNzg4OlxcdCNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbjM3ODk6XFx0XFx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXFxuMzc5MDpcXHQjZW5kaWZcXG4zNzkxOlxcdH07XFxuMzc5MjpcXHRcXG4zNzkzOlxcdHN0YXRpYyBpbnQgaWRzX2NtcF9yKGNvbnN0IHZvaWQgKnBhLCBjb25zdCB2b2lkICpwYiwgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zNzk0OlxcdHtcXG4zNzk1OlxcdFxcdHUzMiBhID0gKih1MzIgKikgcGE7XFxuMzc5NjpcXHRcXHR1MzIgYiA9ICoodTMyICopIHBiO1xcbjM3OTc6XFx0XFxuMzc5ODpcXHRcXHRyZXR1cm4gKGEgXFx1MDAzZSBiKSAtIChhIFxcdTAwM2MgYik7XFxuMzc5OTpcXHR9XFxuMzgwMDpcXHRcXG4zODAxOlxcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXFxuMzgwMjpcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zODAzOlxcdHtcXG4zODA0OlxcdFxcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XFxuMzgwNTpcXHRcXHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XFxuMzgwNjpcXHRcXHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xcbjM4MDc6XFx0XFxuMzgwODpcXHRcXHRpZHMgICAgID0gZGF0YVswXTtcXG4zODA5OlxcdFxcdGNvb2tpZXMgPSBkYXRhWzFdO1xcbjM4MTA6XFx0XFxuMzgxMTpcXHRcXHRpZiAoY29va2llcykge1xcbjM4MTI6XFx0XFx0XFx0Y29va2llX2EgPSBjb29raWVzICsgKGlkX2EgLSBpZHMpO1xcbjM4MTM6XFx0XFx0XFx0Y29va2llX2IgPSBjb29raWVzICsgKGlkX2IgLSBpZHMpO1xcbjM4MTQ6XFx0XFx0XFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XFxuMzgxNTpcXHRcXHR9XFxuMzgxNjpcXHRcXHRzd2FwKCppZF9hLCAqaWRfYik7XFxuMzgxNzpcXHR9XFxuMzgxODpcXHRcXG4zODE5OlxcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbjM4MjA6XFx0e1xcbjM4MjE6XFx0XFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XFxuMzgyMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4zODIzOlxcdFxcbjM4MjQ6XFx0XFx0LypcXG4zODI1OlxcdFxcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcXG4zODI2OlxcdFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4zODI3OlxcdFxcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cXG4zODI4OlxcdFxcdCAqL1xcbjM4Mjk6XFx0XFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDU6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NjpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ3OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0ODpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDk6XFx0XFx0aW50IGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MjYuNzk1OTExNjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDAwMjE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfdHJhY2UuY2AgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBncmFiIHRoYXQgTWFrZWZpbGUgYW5kIHBva2UgYXJvdW5kIHRoZSBgI2lmZGVmYCBibG9ja3Mgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLCBlc3BlY2lhbGx5IGFzIHRoZXkgcmVsYXRlIHRvIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBmZXcgcmVhc29ucyBmb3IgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uOiBJdCBjb3VsZCBiZSBhYm91dCBrZXJuZWwgdmVyc2lvbiBzdXBwb3J0LCBwZXJoYXBzIHRoaXMgaXMgYSBuZXdlciBhZGRpdGlvbjsgbWF5YmUgdGhlcmUncyBhbiBvcHRpb24gZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZHVyaW5nIGNvbXBpbGF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHk7IHBvc3NpYmx5IHNvbWUgZGVwZW5kZW5jaWVzIG5lZWQgdG8gYmUgcHJlc2VudCBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyB1bml2ZXJzYWxseSBhdmFpbGFibGUgb3IgaWYgdGhlcmUncyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBlbmFibGUgaXQuIFRoaXMgd2lsbCBncmVhdGx5IGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGFiaWxpdHkgYW5kIHBvcnRhYmlsaXR5IG9mIGFueSBjb2RlIEkgd3JpdGUgbGV2ZXJhZ2luZyBpdC4gSSdtIGtlZW4gdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIGxvZ2ljIHNvIEkga25vdyB3aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgZm9yIHN1Y2Nlc3NmdWwgYnVpbGRzLiBTbywgSSBuZWVkIHRoZSBNYWtlZmlsZSBhbmQgdGhlIHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBicm9hZGVyIEJQRiB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MzAuMjM1OTM2NTM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk3OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjMwLjI4NzkyNDI1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODE4OTQzMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgYnBmX3RyYWNlLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaW4gdGhlIGtlcm5lbCB0cmFjaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgbGluZXMgMzc4MCBhbmQgMzkyMCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhlIGZhY3QgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGAjaWZkZWZgcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHksIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBtaWdodCBub3QgYWx3YXlzIGJlIGF2YWlsYWJsZS5cblxuS25vd2luZyB0aGUga2VybmVsLCBJIGNhbiBhbnRpY2lwYXRlIGEgZmV3IHBvc3NpYmlsaXRpZXMuIEl0IGNvdWxkIGJlIHRpZWQgdG8gYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbiwgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChsaWtlIG9uZSByZWxhdGluZyB0byBCUEYgb3IgdHJhY2luZyBmZWF0dXJlcyksIG9yIHBlcmhhcHMgZXZlbiBzb21lIGtpbmQgb2YgZXhwZXJpbWVudGFsIG9yIGludGVybmFsIGZsYWcuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnRhYmlsaXR5IGFuZCBmZWF0dXJlIHNldCBvZiBhbnkgQlBGLWJhc2VkIHRyYWNpbmcgYXBwbGljYXRpb25zIEknbSB3b3JraW5nIHdpdGggb3IgYW5hbHl6aW5nLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcyB0byBhdm9pZCBhbnkgdW5mb3Jlc2VlbiBydW50aW1lIGVycm9ycy4gU28sIGxldCdzIGdldCB0aG9zZSBsaW5lcyBvcGVuIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6MzYuMTA2ODcwMDY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc1MDpcXHRcXG4zNzUxOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjM3NTI6XFx0XFx0fVxcbjM3NTM6XFx0XFxuMzc1NDpcXHRcXHRyZXR1cm4gZXJyO1xcbjM3NTU6XFx0fVxcbjM3NTY6XFx0XFxuMzc1NzpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4zNzU4OlxcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4zNzU5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNlcV9maWxlICpzZXEpXFxuMzc2MDpcXHR7XFxuMzc2MTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XFxuMzc2MjpcXHRcXHRcXHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xcbjM3NjM6XFx0XFx0Ym9vbCBoYXNfY29va2llcyA9ICEhdHJfbGluay1cXHUwMDNlY29va2llcztcXG4zNzY0OlxcdFxcbjM3NjU6XFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCJhdHRhY2hfdHlwZTpcXFxcdCV1XFxcXG5cXFwiLCB0cl9saW5rLVxcdTAwM2VsaW5rLmF0dGFjaF90eXBlKTtcXG4zNzY2OlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiY250OlxcXFx0JXVcXFxcblxcXCIsIHRyX2xpbmstXFx1MDAzZW5vZGVzX2NudCk7XFxuMzc2NzpcXHRcXG4zNzY4OlxcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiJXNcXFxcdCAlc1xcXFx0ICVzXFxcXHQgJXNcXFxcblxcXCIsIFxcXCJvYmotaWRcXFwiLCBcXFwiYnRmLWlkXFxcIiwgXFxcImNvb2tpZVxcXCIsIFxcXCJmdW5jXFxcIik7XFxuMzc2OTpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRyX2xpbmstXFx1MDAzZW5vZGVzX2NudDsgaSsrKSB7XFxuMzc3MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcXHUwMDI2dHJfbGluay1cXHUwMDNlbm9kZXNbaV07XFxuMzc3MTpcXHRcXHRcXHR1MzIgYnRmX2lkLCBvYmpfaWQ7XFxuMzc3MjpcXHRcXG4zNzczOlxcdFxcdFxcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWtleSwgXFx1MDAyNm9ial9pZCwgXFx1MDAyNmJ0Zl9pZCk7XFxuMzc3NDpcXHRcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiV1XFxcXHQgJXVcXFxcdCAlbGx1XFxcXHQgJXBTXFxcXG5cXFwiLFxcbjM3NzU6XFx0XFx0XFx0XFx0ICAgb2JqX2lkLCBidGZfaWQsXFxuMzc3NjpcXHRcXHRcXHRcXHQgICBoYXNfY29va2llcyA/IHRyX2xpbmstXFx1MDAzZWNvb2tpZXNbaV0gOiAwLFxcbjM3Nzc6XFx0XFx0XFx0XFx0ICAgKHZvaWQgKikgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWlwKTtcXG4zNzc4OlxcdFxcbjM3Nzk6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMzc4MDpcXHRcXHR9XFxuMzc4MTpcXHR9XFxuMzc4MjpcXHQjZW5kaWZcXG4zNzgzOlxcdFxcbjM3ODQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbjM3ODU6XFx0XFx0LnJlbGVhc2UgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UsXFxuMzc4NjpcXHRcXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcXG4zNzg3OlxcdFxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxuMzc4ODpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4zNzg5OlxcdFxcdC5zaG93X2ZkaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzozNi4xMDcwNDc5NzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk4NzcxNjE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBUcmFjZSBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBrZXJuZWwgdHJhY2luZyBjb2RlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgdGhlcmUgd2VyZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgaGFuZGxlZCBhcm91bmQgbGluZSAzOTIwIHRvIDM5NDUsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGJsb2NrIG9mIGNvZGUsIHRvIHNlZSBob3cgaXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBkZWJ1Z2dpbmcuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzo0Mi4wOTQ3NjY1MjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTIwOlxcdGVycm9yOlxcbjM5MjE6XFx0XFx0a3ZmcmVlKGZleGl0cyk7XFxuMzkyMjpcXHRcXHRrdmZyZWUoY29va2llcyk7XFxuMzkyMzpcXHRcXHRrdmZyZWUoaWRzKTtcXG4zOTI0OlxcdFxcdGt2ZnJlZShsaW5rKTtcXG4zOTI1OlxcdFxcdHJldHVybiBlcnI7XFxuMzkyNjpcXHR9XFxuMzkyNzpcXHRcXG4zOTI4OlxcdCNlbHNlXFxuMzkyOTpcXHRcXG4zOTMwOlxcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4zOTMxOlxcdHtcXG4zOTMyOlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4zOTMzOlxcdH1cXG4zOTM0OlxcdFxcbjM5MzU6XFx0I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDIuMDk0OTI3MzU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODc5NTYyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBDb25kaXRpb25hbCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGJsb2NrIG9mIGNvZGUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBgI2Vsc2VgIHN0YXRlbWVudCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYCNpZmAuIEkgbmVlZCB0byB2aXN1YWxseSBwYXJzZSB0aGlzIHF1aWNrbHksIGFuZCBJIGtub3cgSSBjYW4ndCBqdXN0IHNjYW4gZnJvbSB0aGUgYCNlbHNlYCB1cC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZmluZCB0aGUgc3RhcnQgb2YgdGhlIGAjaWZgIGJsb2NrLiBJdCBjb3VsZCBiZSBuZXN0ZWQgcHJldHR5IGRlZXBseSwgb3IgZXZlbiBpbiBhIG1hY3JvLCBzbyBpdCdzIGJlc3QgdG8gdHJhY2sgaXQgZG93biBwcmVjaXNlbHkuIFRoZW4sIEkgY2FuIHN0YXJ0IHRvIGZvcm0gYSB3b3JraW5nIHRoZW9yeSBpbiBteSBoZWFkIGFib3V0IHRoZSBwb3NzaWJsZSBjb250cm9sIGZsb3cgdGhyb3VnaCB0aGlzIHNlY3Rpb24gYW5kIHdoZXJlIGVhY2ggYnJhbmNoIGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYxNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDQuMTgyODg2MDI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyMzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2ODA9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4MS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4MjojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4My0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzkzMD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzNTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTIFxcdTAwMjZcXHUwMDI2IENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzo0NC4yMzAxMTM5MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4NjY4Mzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIEJQRi4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmVkIGluIGEgd2F5IHRoYXQgaW1wYWN0cyB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gZXhwZWN0aW5nLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyBjYW4gYmUgY29tcGxleCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGdvaW5nIHRvIGltcGFjdCBCUEYncyBiZWhhdmlvdXIuIEkgd2lsbCBzdGFydCBieSBxdWVyeWluZyB0aGUga2VybmVsIGNvbmZpZyBhbmQgbG9va2luZyBmb3IgdGhvc2Ugc3BlY2lmaWMgc3ltYm9scy4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgb24gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDc1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDcuNzE2ODAwMDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjcxNjIyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9FVkVOVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9ODUxPWNvbmZpZyBFUFJPQkVfRVZFTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NjQtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODY1OmNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctODY2LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NDkuNDQzOTcxMDAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTQyMDQyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL3RyYWNlL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODY1LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhhdCBhcmVhIG9mIHRoZSBjb25maWd1cmF0aW9uIHRoYXQncyBkcmF3aW5nIG15IGF0dGVudGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgdHJhY2luZyBmZWF0dXJlIG9yIG9wdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0IG9uY2UgSSdtIHRoZXJlOyBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciBzeW1ib2wsIGRlcGVuZGVuY3ksIG9yIGEgY29uZGl0aW9uYWwgdGhhdCBJIGhhdmUgZXhwZXJpZW5jZSBpbiBtYW5hZ2luZy4gSSBhbSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiBhIHBhcnRpY3VsYXIgdHJhY2luZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDM6NTIuMzU4MTc3NDE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjA6XFx0XFx0ICBldmVudHMuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHdoYXQgZmllbGRzIGFyZSByZWNvcmRlZCBpblxcbiA4NjE6XFx0XFx0ICBhbiBldmVudCBvciBldmVuIGRlcmVmZXJlbmNlIGEgZmllbGQgb2YgYW4gZXZlbnQuIEl0IGNhblxcbiA4NjI6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NjM6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg2NDpcXHRcXG4gODY1OlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg2NjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg2NzpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg2ODpcXHRcXHRib29sXFxuIDg2OTpcXHRcXHRkZWZhdWx0IHlcXG4gODcwOlxcdFxcdGhlbHBcXG4gODcxOlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg3MjpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NzM6XFx0XFxuIDg3NDpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODc1OlxcdFxcdGRlZl9ib29sIG5cXG4gODc2OlxcdFxcbiA4Nzc6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4Nzg6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjUyLjM1ODI4ODQ4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc4ODU3NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0IGFuZCBJJ20gXCJ0aGlua2luZ1wiIGl0OlxuXG4qKkNoZWNraW5nIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoaXMgZmxhZyBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQga2VybmVsIGVudmlyb25tZW50LiBNeSBwcmltYXJ5IGZvY3VzIGlzIGxpa2VseSBvbiBwZXJmb3JtYW5jZSBpbXBhY3QgYW5kIHRoZSBpbnRyaWNhY2llcyBvZiBkaXJlY3QgY2FsbCBwYXRjaGluZywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBjb25zaWRlcmF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLiBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIGEgcGFydGljdWxhciBjb2RlIHBhdGg/IFdoYXQgYWJvdXQgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIHRyYWNpbmcgbWVjaGFuaXNtcyBvciBzZWN1cml0eSBmZWF0dXJlcz8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucywgdGhlbiBqdW1wIHRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBjb250cm9sIGZsb3cuIEFueSByZWNlbnQgcGF0Y2hlcyBvciBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBmZWF0dXJlIHRoYXQgbWlnaHQgcHJvdmlkZSBpbnNpZ2h0IGludG8gZWRnZSBjYXNlcz8gSSBob3BlIHRoZXJlIGFyZSB1c2VmdWwgY29tbWVudHMuIEl0J3MgdGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIHJ1bnRpbWUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODY4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowMzo1NC45MzcxNDg1OTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTk0OTkzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjAzOjU2LjYzNjY1MzczOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjg3NzM2NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFjZSBJbmZyYXN0cnVjdHVyZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBjYXBhYmlsaXRpZXMuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIGFuZCBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8ganVtcCB0byB0aGUgdmljaW5pdHkgb2YgbGluZSAzMjUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgc2VjdGlvbiBvZiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgcmVsZXZhbnQgZmVhdHVyZSBmbGFncywgcGVyaGFwcyBvcHRpb25zIHJlbGF0ZWQgdG8gc3BlY2lmaWMgdHJhY2Vwb2ludHMgb3IgZXZlbnQgdHlwZXMsIG9yIG1heWJlIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gaG9waW5nIHRoaXMgd2lsbCBqb2cgbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgcGFydGljdWxhciBwaWVjZXMuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MDAuMzI0MzkzMDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcbiAzMjE6XFx0XFx0ICBUaGlzIHdheSBhIENPTkZJR19GVU5DVElPTl9UUkFDRVIga2VybmVsIGlzIHNsaWdodGx5IGxhcmdlciwgYnV0XFxuIDMyMjpcXHRcXHQgIG90aGVyd2lzZSBoYXMgbmF0aXZlIHBlcmZvcm1hbmNlIGFzIGxvbmcgYXMgbm8gdHJhY2luZyBpcyBhY3RpdmUuXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4gMzI1OlxcdFxcdGRlZl9ib29sIHlcXG4gMzI2OlxcdFxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcXG4gMzI3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4gMzI4OlxcdFxcbiAzMjk6XFx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuIDMzMDpcXHRcXHRkZWZfYm9vbCB5XFxuIDMzMTpcXHRcXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUyB8fCBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG4gMzMyOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xcbiAzMzU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcXG4gMzM3OlxcdFxcbiAzMzg6XFx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xcbiAzMzk6XFx0XFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDowMC4zMjQ0OTQ0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjczNjIxNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBCUEYgRXZlbnRpbmcgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgQlBGX0VWRU5UUyBhcmUgc2V0IHVwLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBjbGVhciB0aGF0IGl0IGxldmVyYWdlcyBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLiBNYWtlcyBzZW5zZSDigJMgd2UncmUgaG9va2luZyBpbnRvIHN5c2NhbGxzLCBwcm9iaW5nIGtlcm5lbCBmdW5jdGlvbnMsIGFuZCB1c2luZyB0aGUgcGVyZiBpbmZyYXN0cnVjdHVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBEWU5BTUlDX0ZUUkFDRWAgd2lsbCBiZSByZXF1aXJlZCBmb3IgdGhhdCBkZWVwZXIgaW5zdHJ1bWVudGF0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IGNoZWNrIGlmIGBzb3J0Lm9gIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IGhlcmUuIExldCdzIHF1aWNrbHkgcGVlayBhdCB0aGUgYGxpYi9NYWtlZmlsZWAgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzUyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDowMi45OTgxMTg1OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjMwMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvcnQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL01ha2VmaWxlPTUzPUNPTlRFWFRfQU5BTFlTSVNfcmhhc2h0YWJsZS5vIDo9IHlcXG5saWIvTWFrZWZpbGUtNTQtXFxubGliL01ha2VmaWxlOjU1Om9iai15ICs9IGJjZC5vIHNvcnQubyBwYXJzZXIubyBkZWJ1Z19sb2Nrcy5vIHJhbmRvbTMyLm8gXFxcXFxcbmxpYi9NYWtlZmlsZS01Ni1cXHQgYnVzdF9zcGlubG9ja3MubyBrYXNwcmludGYubyBiaXRtYXAubyBzY2F0dGVybGlzdC5vIFxcXFxcXG5saWIvTWFrZWZpbGU6NTc6XFx0IGxpc3Rfc29ydC5vIHV1aWQubyBpb3ZfaXRlci5vIGNsel9jdHoubyBcXFxcXFxubGliL01ha2VmaWxlLTU4LVxcdCBic2VhcmNoLm8gZmluZF9iaXQubyBsbGlzdC5vIGx3cS5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXFxcXFxcbi0tXFxubGliL2dyb3VwX2NwdXMuYz00ODg9c3RydWN0IGNwdW1hc2sgKmdyb3VwX2NwdXNfZXZlbmx5KHVuc2lnbmVkIGludCBudW1ncnBzLCB1bnNpZ25lZCBpbnQgKm51bW1hc2tzKVxcbi0tXFxubGliL2dyb3VwX2NwdXMuYy01MjMtXFx0ICogQ1BVIGlzIGhhbmRsZWQgaW4gdGhlIDFzdCBvciAybmQgc3RhZ2UsIGFuZCBlaXRoZXIgd2F5IGlzIGNvcnJlY3RcXG5saWIvZ3JvdXBfY3B1cy5jOjUyNDpcXHQgKiBmcm9tIEFQSSB1c2VyIHZpZXdwb2ludCBzaW5jZSAyLXN0YWdlIHNwcmVhZCBpcyBzb3J0IG9mXFxubGliL2dyb3VwX2NwdXMuYy01MjUtXFx0ICogb3B0aW1pemF0aW9uLlxcbi0tXFxubGliL29iamFnZy5jPTYwNz1jb25zdCBzdHJ1Y3Qgb2JqYWdnX3N0YXRzICpvYmphZ2dfc3RhdHNfZ2V0KHN0cnVjdCBvYmphZ2cgKm9iamFnZylcXG4tLVxcbmxpYi9vYmphZ2cuYy02MzAtXFxubGliL29iamFnZy5jOjYzMTpcXHRzb3J0KG9iamFnZ19zdGF0cy1cXHUwMDNlc3RhdHNfaW5mbywgb2JqYWdnX3N0YXRzLVxcdTAwM2VzdGF0c19pbmZvX2NvdW50LFxcbmxpYi9vYmphZ2cuYy02MzItXFx0ICAgICBzaXplb2Yoc3RydWN0IG9iamFnZ19vYmpfc3RhdHNfaW5mbyksXFxuLS1cXG5saWIvb2JqYWdnLmM9MTAwNz1vYmphZ2dfaGludHNfc3RhdHNfZ2V0KHN0cnVjdCBvYmphZ2dfaGludHMgKm9iamFnZ19oaW50cylcXG4tLVxcbmxpYi9vYmphZ2cuYy0xMDI3LVxcbmxpYi9vYmphZ2cuYzoxMDI4OlxcdHNvcnQob2JqYWdnX3N0YXRzLVxcdTAwM2VzdGF0c19pbmZvLCBvYmphZ2dfc3RhdHMtXFx1MDAzZXN0YXRzX2luZm9fY291bnQsXFxubGliL29iamFnZy5jLTEwMjktXFx0ICAgICBzaXplb2Yoc3RydWN0IG9iamFnZ19vYmpfc3RhdHNfaW5mbyksXFxuLS1cXG5saWIvc29ydC5jPTE4Mj1zdGF0aWMgc2l6ZV90IHBhcmVudChzaXplX3QgaSwgdW5zaWduZWQgaW50IGxzYml0LCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmxpYi9zb3J0LmMtMTk3LSAqXFxubGliL3NvcnQuYzoxOTg6ICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgaGVhcHNvcnQgb24gdGhlIGdpdmVuIGFycmF5LiAgWW91IG1heSBwcm92aWRlXFxubGliL3NvcnQuYy0xOTktICogYSBzd2FwX2Z1bmMgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgdGhhbiBhIG1lbW9yeVxcbi0tXFxubGliL3Rlc3RfcGFybWFuLmM9MTEzPXN0YXRpYyB2b2lkIHRlc3RfcGFybWFuX21vdmUodm9pZCAqcHJpdiwgdW5zaWduZWQgbG9uZyBmcm9tX2luZGV4LFxcbi0tXFxubGliL3Rlc3RfcGFybWFuLmMtMTIzLVxcbmxpYi90ZXN0X3Bhcm1hbi5jOjEyNDpzdGF0aWMgY29uc3Qgc3RydWN0IHBhcm1hbl9vcHMgdGVzdF9wYXJtYW5fbHNvcnRfb3BzID0ge1xcbmxpYi90ZXN0X3Bhcm1hbi5jLTEyNS1cXHQuYmFzZV9jb3VudFxcdD0gVEVTVF9QQVJNQU5fQkFTRV9DT1VOVCxcXG4tLVxcbmxpYi90ZXN0X3Bhcm1hbi5jPTM2MD1zdGF0aWMgaW50IHRlc3RfcGFybWFuX2xzb3J0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9wYXJtYW4uYy0zNjQtXFxubGliL3Rlc3RfcGFybWFuLmM6MzY1OlxcdHRlc3RfcGFybWFuID0gdGVzdF9wYXJtYW5fY3JlYXRlKFxcdTAwMjZ0ZXN0X3Bhcm1hbl9sc29ydF9vcHMpO1xcbmxpYi90ZXN0X3Bhcm1hbi5jLTM2Ni1cXHRpZiAoSVNfRVJSKHRlc3RfcGFybWFuKSlcXG4tLVxcbmxpYi90ZXN0cy9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfS0ZJRk9fS1VOSVRfVEVTVCkgKz0ga2ZpZm9fa3VuaXQub1xcbmxpYi90ZXN0cy9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfVEVTVF9MSVNUX1NPUlQpICs9IHRlc3RfbGlzdF9zb3J0Lm9cXG5saWIvdGVzdHMvTWFrZWZpbGUtMzQtb2JqLSQoQ09ORklHX0xJTkVBUl9SQU5HRVNfVEVTVCkgKz0gdGVzdF9saW5lYXJfcmFuZ2VzLm9cXG4tLVxcbmxpYi90ZXN0cy9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfU0xVQl9LVU5JVF9URVNUKSArPSBzbHViX2t1bml0Lm9cXG5saWIvdGVzdHMvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RFU1RfU09SVCkgKz0gdGVzdF9zb3J0Lm9cXG5saWIvdGVzdHMvTWFrZWZpbGUtNTItQ0ZMQUdTX3N0YWNraW5pdF9rdW5pdC5vICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIHN3aXRjaC11bnJlYWNoYWJsZSlcXG4tLVxcbmxpYi92c3ByaW50Zi5jPTM0NjI9aW50IHZzc2NhbmYoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncylcXG4tLVxcbmxpYi92c3ByaW50Zi5jLTM2NTktXFxubGliL3ZzcHJpbnRmLmM6MzY2MDpcXHRcXHQvKiBoYXZlIHNvbWUgc29ydCBvZiBpbnRlZ2VyIGNvbnZlcnNpb24uXFxubGliL3ZzcHJpbnRmLmMtMzY2MS1cXHRcXHQgKiBmaXJzdCwgc2tpcCB3aGl0ZSBzcGFjZSBpbiBidWZmZXIuXFxuLS1cXG5saWIvenN0ZC9jb21wcmVzcy9odWZfY29tcHJlc3MuYz01ODk9c3RhdGljIHZvaWQgSFVGX3NpbXBsZVF1aWNrU29ydChub2RlRWx0IGFycltdLCBpbnQgbG93LCBpbnQgaGlnaCkge1xcbi0tXFxubGliL3pzdGQvY29tcHJlc3MvaHVmX2NvbXByZXNzLmMtNjA5LSAqIFNvcnRzIHRoZSBzeW1ib2xzIFswLCBtYXhTeW1ib2xWYWx1ZV0gYnkgY291bnRbc3ltYm9sXSBpbiBkZWNyZWFzaW5nIG9yZGVyLlxcbmxpYi96c3RkL2NvbXByZXNzL2h1Zl9jb21wcmVzcy5jOjYxMDogKiBUaGlzIGlzIGEgdHlwaWNhbCBidWNrZXQgc29ydGluZyBzdHJhdGVneSB0aGF0IHVzZXMgZWl0aGVyIHF1aWNrc29ydCBvciBpbnNlcnRpb24gc29ydCB0byBzb3J0IGVhY2ggYnVja2V0LlxcbmxpYi96c3RkL2NvbXByZXNzL2h1Zl9jb21wcmVzcy5jLTYxMS0gKlxcbi0tXFxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmM9MzA9dm9pZCBaU1REX3VwZGF0ZURVQlQoWlNURF9NYXRjaFN0YXRlX3QqIG1zLFxcbi0tXFxubGliL3pzdGQvY29tcHJlc3MvenN0ZF9sYXp5LmMtNjktLyogWlNURF9pbnNlcnREVUJUMSgpIDpcXG5saWIvenN0ZC9jb21wcmVzcy96c3RkX2xhenkuYzo3MDogKiAgc29ydCBvbmUgYWxyZWFkeSBpbnNlcnRlZCBidXQgdW5zb3J0ZWQgcG9zaXRpb25cXG5saWIvenN0ZC9jb21wcmVzcy96c3RkX2xhenkuYy03MS0gKiAgYXNzdW1wdGlvbiA6IGN1cnIgXFx1MDAzZT0gYnRsb3cgPT0gKGN1cnIgLSBidG1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjA0OjAzLjA1NDc1NjkwN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTIyNDI0MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gSSBzZWUgdGhhdCBgbGliL3NvcnQub2AgaXMgYmVpbmcgYnVpbHQgaW50byB0aGUga2VybmVsIHVuY29uZGl0aW9uYWxseSDigJMgaXQncyBhbiBgb2JqLXlgIGluIHRoZSBgbGliL01ha2VmaWxlYC4gVGhlIEJQRiB0cmFjaW5nIGZ1bmN0aW9uYWxpdHksIGFzIGV4cGVjdGVkLCByZWxpZXMgb24gc2V2ZXJhbCBjb25maWd1cmF0aW9ucyBiZWluZyBlbmFibGVkOiBgQ09ORklHX0JQRl9FVkVOVFNgLCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgQ09ORklHX0tQUk9CRV9FVkVOVFNgLCBhbW9uZyBvdGhlcnMuIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aG9zZS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBjb25maWdzIHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbi4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgc29ydF9yYCB3aXRoaW4gYGxpYi9zb3J0LmNgLCBhbmQgYm90aCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbmQgYGNoZWNrX2R1cF9pZHNgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgS1BST0JFX0VWRU5UU2AsIGFzIEkgYWxyZWFkeSBzdXNwZWN0ZWQuXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyB0YWtpbmcgb3V0IGBzb3J0X25vbmF0b21pY2AgYW5kIGBzb3J0X3Jfbm9uYXRvbWljYCwgc2ltcGxpZnlpbmcgYGxpYi9zb3J0LmNgIGJ5IGltcGxlbWVudGluZyBgc29ydF9yYCBkaXJlY3RseSwgYW5kIHJlbW92aW5nIHRob3NlIHNjaGVkdWxpbmcgcG9pbnQgY2hlY2tzLiBJdCB0aGVuIHVwZGF0ZXMgdGhlIGBjaGVja19kdXBfaWRzKClgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCwgd2hpY2ggaXMgdGhlIG9ubHkgY2FsbGVyLCB0byB1c2UgdGhlIHNpbXBsaWZpZWQgYHNvcnRfcigpYCBmdW5jdGlvbi4gVGhpcyBpcyB0b3VjaGluZyBib3RoIGNvcmUgbGlicmFyeSBzb3J0aW5nIGxvZ2ljIGFuZCB0aGUgQlBGIHRyYWNlIG11bHRpLWF0dGFjaCBoYW5kbGluZywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JJ3ZlIHJldmlld2VkIGV2ZXJ5dGhpbmcgbWV0aWN1bG91c2x5LCBhbmQgSSdtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM3OSwiT3V0cHV0VG9rZW5zIjoyMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MTAuOTc3MTg0NjEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2ODExNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvcnRfclwiLFxuICAgIFwiY2hlY2tfZHVwX2lkc1wiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwncyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvcnRfclwiLFxuICAgIFwiY2hlY2tfZHVwX2lkc1wiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBrZXJuZWwncyBzb3J0IGxpYnJhcnkgYnkgZWxpbWluYXRpbmcgc29ydF9ub25hdG9taWMgYW5kIHNvcnRfcl9ub25hdG9taWMgKGFuZCB0aGUgdW5kZXJseWluZyBjb25kX3Jlc2NoZWQgbG9vcCBsb2dpYyksIHJlaW1wbGVtZW50aW5nIHNvcnRfciBkaXJlY3RseS4gSXQgYWxzbyBtb2RpZmllcyBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgKGNoZWNrX2R1cF9pZHMpIHRvIGludm9rZSBzb3J0X3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBzb3J0X3Jfbm9uYXRvbWljLiBUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHJlYWNoYWJsZSBjb3JlIGxpYnJhcnkgYW5kIEJQRiB0cmFjaW5nIHN1YnN5c3RlbXMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3lzY2FsbCBpbnRlcmZhY2VzIChlLmcuLCBCUEZfTElOS19DUkVBVEUgZm9yIG11bHRpLXRyYWNpbmcpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDoxMS4wNTY4NzQ0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODk5Mzk4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDoxMS4wNTc0NzkxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1NDg5MzMwMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjbGVhbnMgdXAgdGhlIGtlcm5lbCBzb3J0aW5nIGxpYnJhcnkgKGxpYi9zb3J0LmMgYW5kIGluY2x1ZGUvbGludXgvc29ydC5oKSBieSByZW1vdmluZyBjb25kX3Jlc2NoZWQoKSBsb2dpYyBhbmQgdGhlIHNvcnRfbm9uYXRvbWljL3NvcnRfcl9ub25hdG9taWMgd3JhcHBlciBmdW5jdGlvbnMsIHVwZGF0aW5nIGJwZl90cmFjZS5jIHRvIGNhbGwgc29ydF9yKCkgZGlyZWN0bHkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgcGFkZGluZywgdXNlciBjb3BpZXMgKGNvcHlfdG9fdXNlci9wdXRfdXNlciksIG9yIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIGJ1Z3MgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZjA2MjlkY2E2YjVlZTg5OWM2MTY5YTNjMjFiNThlOGQxYzEyYzc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTk6MDI6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvcnQuaCBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5pbmRleCBjMDFlZjgwNGEwZWIyLi44NzE3NzU5NzhhZjBhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb3J0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc29ydC5oXG5AQCAtMjMsMTUgKzIzLDQgQEAgdm9pZCBzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0ICBjbXBfZnVuY190IGNtcF9mdW5jLFxuIFx0ICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpO1xuIFxuLS8qIFZlcnNpb25zIHRoYXQgcGVyaW9kaWNhbGx5IGNhbGwgY29uZF9yZXNjaGVkKCk6ICovXG4tXG4tdm9pZCBzb3J0X3Jfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgICBjbXBfcl9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0XHQgICAgICBjb25zdCB2b2lkICpwcml2KTtcbi1cbi12b2lkIHNvcnRfbm9uYXRvbWljKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuLVx0XHQgICAgY21wX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgIHN3YXBfZnVuY190IHN3YXBfZnVuYyk7XG4tXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCAyOTI2MDk1MWFhODcxLi4xZDdlNzNkZGJhZmJlIDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0zODI2LDcgKzM4MjYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbiBcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcbiBcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cbiBcdCAqL1xuLVx0c29ydF9yX25vbmF0b21pYyhpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4rXHRzb3J0X3IoaWRzLCBjbnQsIHNpemVvZihpZHNbMF0pLCBpZHNfY21wX3IsIGlkc19zd2FwX3IsIGRhdGEpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4gXHRcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xuZGlmZiAtLWdpdCBhL2xpYi9zb3J0LmMgYi9saWIvc29ydC5jXG5pbmRleCA1MjM2Mzk5NWNjYzVjLi44ZTczZGM1NTQ3NmJiIDEwMDY0NFxuLS0tIGEvbGliL3NvcnQuY1xuKysrIGIvbGliL3NvcnQuY1xuQEAgLTE4NiwxMyArMTg2LDM2IEBAIHN0YXRpYyBzaXplX3QgcGFyZW50KHNpemVfdCBpLCB1bnNpZ25lZCBpbnQgbHNiaXQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIGkgLyAyO1xuIH1cbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgX19zb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0XHQgICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnByaXYsXG4tXHRcdCAgICAgYm9vbCBtYXlfc2NoZWR1bGUpXG4rLyoqXG4rICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xuKyAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuKyAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuKyAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuKyAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4rICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbisgKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxuKyAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcbisgKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuKyAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cbisgKlxuKyAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuKyAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxuKyAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxuKyAqIGNtcF9mdW5jKGIsIGEpLlxuKyAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFx1MDAzYz0gMCwgdGhlblxuKyAqIGNtcF9mdW5jKGEsIGMpIFx1MDAzYz0gMC5cbisgKlxuKyAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcbisgKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxuKyAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuKyAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXG4rICovXG4rdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4rXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuK1x0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuK1x0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4ge1xuIFx0LyogcHJlLXNjYWxlIGNvdW50ZXJzIGZvciBwZXJmb3JtYW5jZSAqL1xuIFx0c2l6ZV90IG4gPSBudW0gKiBzaXplLCBhID0gKG51bS8yKSAqIHNpemU7XG5AQCAtMjYzLDkgKzI4Niw2IEBAIHN0YXRpYyB2b2lkIF9fc29ydF9yKHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLFxuIFx0XHRcdGIgPSBwYXJlbnQoYiwgbHNiaXQsIHNpemUpO1xuIFx0XHRcdGRvX3N3YXAoYmFzZSArIGIsIGJhc2UgKyBjLCBzaXplLCBzd2FwX2Z1bmMsIHByaXYpO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChtYXlfc2NoZWR1bGUpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRuIC09IHNpemU7XG5AQCAtMjczLDYzICsyOTMsOCBAQCBzdGF0aWMgdm9pZCBfX3NvcnRfcih2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdGlmIChuID09IHNpemUgKiAyIFx1MDAyNlx1MDAyNiBkb19jbXAoYmFzZSwgYmFzZSArIHNpemUsIGNtcF9mdW5jLCBwcml2KSBcdTAwM2UgMClcbiBcdFx0ZG9fc3dhcChiYXNlLCBiYXNlICsgc2l6ZSwgc2l6ZSwgc3dhcF9mdW5jLCBwcml2KTtcbiB9XG4tXG4tLyoqXG4tICogc29ydF9yIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50c1xuLSAqIEBiYXNlOiBwb2ludGVyIHRvIGRhdGEgdG8gc29ydFxuLSAqIEBudW06IG51bWJlciBvZiBlbGVtZW50c1xuLSAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudFxuLSAqIEBjbXBfZnVuYzogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICogQHN3YXBfZnVuYzogcG9pbnRlciB0byBzd2FwIGZ1bmN0aW9uIG9yIE5VTExcbi0gKiBAcHJpdjogdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIGNvbXBhcmlzb24gZnVuY3Rpb25cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGhlYXBzb3J0IG9uIHRoZSBnaXZlbiBhcnJheS4gIFlvdSBtYXkgcHJvdmlkZVxuLSAqIGEgc3dhcF9mdW5jIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZW1vcnlcbi0gKiBjb3B5IChlLmcuIGZpeCB1cCBwb2ludGVycyBvciBhdXhpbGlhcnkgZGF0YSksIGJ1dCB0aGUgYnVpbHQtaW4gc3dhcFxuLSAqIGF2b2lkcyBhIHNsb3cgcmV0cG9saW5lIGFuZCBzbyBpcyBzaWduaWZpY2FudGx5IGZhc3Rlci5cbi0gKlxuLSAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgYWRoZXJlIHRvIHNwZWNpZmljIG1hdGhlbWF0aWNhbFxuLSAqIHByb3BlcnRpZXMgdG8gZW5zdXJlIGNvcnJlY3QgYW5kIHN0YWJsZSBzb3J0aW5nOlxuLSAqIC0gQW50aXN5bW1ldHJ5OiBjbXBfZnVuYyhhLCBiKSBtdXN0IHJldHVybiB0aGUgb3Bwb3NpdGUgc2lnbiBvZlxuLSAqIGNtcF9mdW5jKGIsIGEpLlxuLSAqIC0gVHJhbnNpdGl2aXR5OiBpZiBjbXBfZnVuYyhhLCBiKSBcdTAwM2M9IDAgYW5kIGNtcF9mdW5jKGIsIGMpIFx1MDAzYz0gMCwgdGhlblxuLSAqIGNtcF9mdW5jKGEsIGMpIFx1MDAzYz0gMC5cbi0gKlxuLSAqIFNvcnRpbmcgdGltZSBpcyBPKG4gbG9nIG4pIGJvdGggb24gYXZlcmFnZSBhbmQgd29yc3QtY2FzZS4gV2hpbGVcbi0gKiBxdWlja3NvcnQgaXMgc2xpZ2h0bHkgZmFzdGVyIG9uIGF2ZXJhZ2UsIGl0IHN1ZmZlcnMgZnJvbSBleHBsb2l0YWJsZVxuLSAqIE8obipuKSB3b3JzdC1jYXNlIGJlaGF2aW9yIGFuZCBleHRyYSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRoYXQgbWFrZVxuLSAqIGl0IGxlc3Mgc3VpdGFibGUgZm9yIGtlcm5lbCB1c2UuXG4tICovXG4tdm9pZCBzb3J0X3Iodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHQgICAgY21wX3JfZnVuY190IGNtcF9mdW5jLFxuLVx0ICAgIHN3YXBfcl9mdW5jX3Qgc3dhcF9mdW5jLFxuLVx0ICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCBmYWxzZSk7XG4tfVxuIEVYUE9SVF9TWU1CT0woc29ydF9yKTtcbiBcbi0vKipcbi0gKiBzb3J0X3Jfbm9uYXRvbWljIC0gc29ydCBhbiBhcnJheSBvZiBlbGVtZW50cywgd2l0aCBjb25kX3Jlc2NoZWRcbi0gKiBAYmFzZTogcG9pbnRlciB0byBkYXRhIHRvIHNvcnRcbi0gKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHNcbi0gKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnRcbi0gKiBAY21wX2Z1bmM6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvblxuLSAqIEBzd2FwX2Z1bmM6IHBvaW50ZXIgdG8gc3dhcCBmdW5jdGlvbiBvciBOVUxMXG4tICogQHByaXY6IHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBjb21wYXJpc29uIGZ1bmN0aW9uXG4tICpcbi0gKiBTYW1lIGFzIHNvcnRfciwgYnV0IHByZWZlcnJlZCBmb3IgbGFyZ2VyIGFycmF5cyBhcyBpdCBkb2VzIGEgcGVyaW9kaWNcbi0gKiBjb25kX3Jlc2NoZWQoKS5cbi0gKi9cbi12b2lkIHNvcnRfcl9ub25hdG9taWModm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4tXHRcdCAgICAgIGNtcF9yX2Z1bmNfdCBjbXBfZnVuYyxcbi1cdFx0ICAgICAgc3dhcF9yX2Z1bmNfdCBzd2FwX2Z1bmMsXG4tXHRcdCAgICAgIGNvbnN0IHZvaWQgKnByaXYpXG4te1xuLVx0X19zb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBjbXBfZnVuYywgc3dhcF9mdW5jLCBwcml2LCB0cnVlKTtcbi19XG4tRVhQT1JUX1NZTUJPTChzb3J0X3Jfbm9uYXRvbWljKTtcbi1cbiB2b2lkIHNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsXG4gXHQgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4gXHQgIHN3YXBfZnVuY190IHN3YXBfZnVuYylcbkBAIC0zMzksMTkgKzMwNCw2IEBAIHZvaWQgc29ydCh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbiBcdFx0LnN3YXAgPSBzd2FwX2Z1bmMsXG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFx1MDAyNncsIGZhbHNlKTtcbitcdHJldHVybiBzb3J0X3IoYmFzZSwgbnVtLCBzaXplLCBfQ01QX1dSQVBQRVIsIFNXQVBfV1JBUFBFUiwgXHUwMDI2dyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woc29ydCk7XG4tXG4tdm9pZCBzb3J0X25vbmF0b21pYyh2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSxcbi1cdFx0ICAgIGNtcF9mdW5jX3QgY21wX2Z1bmMsXG4tXHRcdCAgICBzd2FwX2Z1bmNfdCBzd2FwX2Z1bmMpXG4te1xuLVx0c3RydWN0IHdyYXBwZXIgdyA9IHtcbi1cdFx0LmNtcCAgPSBjbXBfZnVuYyxcbi1cdFx0LnN3YXAgPSBzd2FwX2Z1bmMsXG4tXHR9O1xuLVxuLVx0cmV0dXJuIF9fc29ydF9yKGJhc2UsIG51bSwgc2l6ZSwgX0NNUF9XUkFQUEVSLCBTV0FQX1dSQVBQRVIsIFx1MDAyNncsIHRydWUpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHNvcnRfbm9uYXRvbWljKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjA0OjExLjA1NzQ4MDA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyMjE0ODk3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgTGludXggS2VybmVsIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9zb3J0LmhgLCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCwgYW5kIGBsaWIvc29ydC5jYC4gUmlnaHQgYXdheSwgSSBrbm93IHRoaXMgaGFzIHRvIGRvIHdpdGggc29ydGluZyBhbGdvcml0aG1zIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgc3BlY2lmaWMgY2hhbmdlcyBhcmUgdGhlIHJlbW92YWwgb2YgYHNvcnRfcl9ub25hdG9taWNgIGFuZCBgc29ydF9ub25hdG9taWNgLCBhbmQgdGhlIHJlcGxhY2VtZW50IG9mIGBzb3J0X3Jfbm9uYXRvbWljYCB3aXRoIGBzb3J0X3JgIGluIHRoZSBCUEYgdHJhY2UgY29kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGBzb3J0X3JgIGluIHRoZSBsaWJyYXJ5IGlzIHNpbXBsaWZpZWQgYnkgZ2V0dGluZyByaWQgb2YgdGhlIGBtYXlfc2NoZWR1bGVgIGFuZCBgY29uZF9yZXNjaGVkKClgIGxvZ2ljLCB3aGljaCBhbHNvIGludm9sdmVkIHJlbW92aW5nIHRoZSBgX25vbmF0b21pY2AgdmVyc2lvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGVmZm9ydCBmb2N1c2VkIG9uIHJlbW92aW5nIHByZWVtcHRpb24gcG9pbnRzIHdpdGhpbiB0aGUgc29ydGluZyByb3V0aW5lcy4gVGhlIHBhdGNoIGlzIGdldHRpbmcgcmlkIG9mIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIGluIHRoZSBjb3JlIHNvcnQgZnVuY3Rpb25zLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IEl0J3MgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCwgaWYgYW55IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIG9yIHBvdGVudGlhbCBwYWRkaW5nIGxlYWtzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBhbmQgYmFzZWQgb24gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgaW50ZXJuYWxzLCBJIGRvbid0IHNlZSBhbnkgb2YgdGhvc2UgcmVkIGZsYWdzLiBUaGlzIHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIGZvY3VzZWQgb24gcmVtb3Zpbmcgc2NoZWR1bGluZyBwb2ludHMuXG5cbkhvd2V2ZXIsIEknbSBub3QgZ29pbmcgdG8gYmUgKnRvbyogaGFzdHkuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGJwZl90cmFjZS5jYCBhbmQgYGxpYi9zb3J0LmNgIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgbGluZSAzODI2IGluIGBicGZfdHJhY2UuY2AgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBqdXN0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBtaXNzZWQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhhdCBzcGVjaWZpYyBgc29ydF9yYCBjYWxsIGluIHRoZSBCUEYgdHJhY2UgZnVuY3Rpb25hbGl0eS4gV2l0aCBteSBleHBlcmllbmNlLCBJIGNhbiBzY2FuIHRoaXMgY29kZSBhbmQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvZGQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvciBhbnkgc2l0dWF0aW9ucyB3aGVyZSB0aGlzIGNoYW5nZSBjb3VsZCBpbmFkdmVydGVudGx5IGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MjAuMjc4OTc0MjE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk2ODQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19kdXBfaWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgwMT1zdGF0aWMgdm9pZCBpZHNfc3dhcF9yKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplIF9fbWF5YmVfdW51c2VkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MTgtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4MTk6c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MjAte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4NDA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODItXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4ODM6XFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4ODQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MjAuMzI4OTQ3ODQzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwODExODk4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBUcmFjZSBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmlsZSByZWFkaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwncyB0cmFjaW5nIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgQlBGIHRyYWNpbmcuIExldCBtZSBwdWxsIHVwIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBsaW5lcyAzODAwIHRvIDM4NDAuIFRoYXQgcmVnaW9uIHNob3VsZCBob2xkIHRoZSBrZXksIG9yIGF0IGxlYXN0IGEgc2lnbmlmaWNhbnQgcGllY2UsIHJlbGF0ZWQgdG8gaG93IGZpbGUgcmVhZHMgYXJlIGhhbmRsZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHRyYWNpbmcuIEhvcGVmdWxseSwgSSBjYW4gcGlucG9pbnQgd2hlcmUgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcgZGl2ZXJnZXMuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6MDQ6MjQuNDEwMTQxMzU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5Mjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwMDpcXHRcXG4zODAxOlxcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXFxuMzgwMjpcXHRcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqcHJpdiBfX21heWJlX3VudXNlZClcXG4zODAzOlxcdHtcXG4zODA0OlxcdFxcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XFxuMzgwNTpcXHRcXHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XFxuMzgwNjpcXHRcXHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xcbjM4MDc6XFx0XFxuMzgwODpcXHRcXHRpZHMgICAgID0gZGF0YVswXTtcXG4zODA5OlxcdFxcdGNvb2tpZXMgPSBkYXRhWzFdO1xcbjM4MTA6XFx0XFxuMzgxMTpcXHRcXHRpZiAoY29va2llcykge1xcbjM4MTI6XFx0XFx0XFx0Y29va2llX2EgPSBjb29raWVzICsgKGlkX2EgLSBpZHMpO1xcbjM4MTM6XFx0XFx0XFx0Y29va2llX2IgPSBjb29raWVzICsgKGlkX2IgLSBpZHMpO1xcbjM4MTQ6XFx0XFx0XFx0c3dhcCgqY29va2llX2EsICpjb29raWVfYik7XFxuMzgxNTpcXHRcXHR9XFxuMzgxNjpcXHRcXHRzd2FwKCppZF9hLCAqaWRfYik7XFxuMzgxNzpcXHR9XFxuMzgxODpcXHRcXG4zODE5OlxcdHN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxcbjM4MjA6XFx0e1xcbjM4MjE6XFx0XFx0dm9pZCAqZGF0YVsyXSA9IHsgaWRzLCBjb29raWVzIH07XFxuMzgyMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4zODIzOlxcdFxcbjM4MjQ6XFx0XFx0LypcXG4zODI1OlxcdFxcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcXG4zODI2OlxcdFxcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcXG4zODI3OlxcdFxcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cXG4zODI4OlxcdFxcdCAqL1xcbjM4Mjk6XFx0XFx0c29ydF9yKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTowNDoyNC40MTA4MzkxNjlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIxMzU5NDgxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ29uc2lkZXJhdGlvbnMgZm9yIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIHBhdGNoIGlzIHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBjbGVhbjsgYmFzaWNhbGx5LCBpdCdzIHJlbW92aW5nIHRoZSBgc29ydF9ub25hdG9taWNgIGFuZCBgc29ydF9yX25vbmF0b21pY2AgdmFyaWFudHMgYW5kIGRpdGNoaW5nIHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGxzIHdpdGhpbiB0aG9zZSBzb3J0aW5nIGxvb3BzLiBJdCdzIGFsc28gbWFraW5nIGEgZGlyZWN0IGNhbGwgdG8gYHNvcnRfcmAgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgcG90ZW50aWFsIEtNU0FOIGltcGxpY2F0aW9ucy5cblxuRmlyc3QsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSByaXNrcz8gTm8sIGRlZmluaXRlbHkgbm90LiBJIGNhbiBxdWlja2x5IHJ1bGUgdGhhdCBvdXQ6IG5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBub3RoaW5nJ3MgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG5ldyBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgcHJlc2VudC4gSXQncyBub3QgY2hhbmdpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGFueSB3YXkgdGhhdCBJIGNhbiBzZWUsIGFuZCB0aGVyZSdzIG5vIHdheSBpdCBjb3VsZCBpbnRyb2R1Y2UgYW4gaW5mby1sZWFrLiBTbywgbm8sIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlYXNvbmluZyBhIGJpdCBtb3JlLCBkcmF3aW5nIHRoZSBjb250cmFzdCB3aXRoIEtBU0FOLiBXZSdyZSB0YWxraW5nIEtNU0FOIGhlcmUsIHNvIGxldCdzIHJlY2FsbCB3aGF0IGl0IGRvZXMuIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSwgc2ltcGx5IHJlbW92ZXMgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbHMgaW4gdGhlIHNvcnRpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBkcm9wcyB0aGUgYHNvcnRfbm9uYXRvbWljYCBhbmQgYHNvcnRfcl9ub25hdG9taWNgIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyB0aGUgc2luZ2xlIGNhbGxzaXRlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIHRvIHVzZSBgc29ydF9yYC4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3VlcywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGNoYW5nZWQuIFRoZSB1bmRlcmx5aW5nIGBzb3J0YCBhbmQgYHNvcnRfcmAgcm91dGluZXMgYXJlIGFscmVhZHkgd2VsbC10ZXN0ZWQuIEFueSBwb3RlbnRpYWwgc29ydGluZyBidWdzLCBsaWtlIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nLCBub3QgS01TQU4uIEtNU0FOJ3MgcHJvdmlkaW5nIG5vIGFkZGl0aW9uYWwgdmFsdWUgaGVyZS5cblxuUmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjIzLCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjA0OjM2LjU0Njc5MTE2NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xlYW5zIHVwIHRoZSBrZXJuZWwgc29ydGluZyBsaWJyYXJ5IChsaWIvc29ydC5jIGFuZCBpbmNsdWRlL2xpbnV4L3NvcnQuaCkgYnkgcmVtb3ZpbmcgY29uZF9yZXNjaGVkKCkgbG9naWMgYW5kIHRoZSBzb3J0X25vbmF0b21pYy9zb3J0X3Jfbm9uYXRvbWljIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyBicGZfdHJhY2UuYyB0byBjYWxsIHNvcnRfcigpIGRpcmVjdGx5LiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIHBhZGRpbmcsIHVzZXIgY29waWVzIChjb3B5X3RvX3VzZXIvcHV0X3VzZXIpLCBvciBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2xlYW5zIHVwIHRoZSBrZXJuZWwgc29ydGluZyBsaWJyYXJ5IChsaWIvc29ydC5jIGFuZCBpbmNsdWRlL2xpbnV4L3NvcnQuaCkgYnkgcmVtb3ZpbmcgY29uZF9yZXNjaGVkKCkgbG9naWMgYW5kIHRoZSBzb3J0X25vbmF0b21pYy9zb3J0X3Jfbm9uYXRvbWljIHdyYXBwZXIgZnVuY3Rpb25zLCB1cGRhdGluZyBicGZfdHJhY2UuYyB0byBjYWxsIHNvcnRfcigpIGRpcmVjdGx5LiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIHBhZGRpbmcsIHVzZXIgY29waWVzIChjb3B5X3RvX3VzZXIvcHV0X3VzZXIpLCBvciBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGFjY2VzcyBidWdzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[1] Phase: Succeeded StartedAt: 2026-09-10 19:04:48 +0000 UTC FinishedAt: 2026-09-10 19:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 19:04:48 +0000 UTC FinishedAt: 2026-09-10 19:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2] Phase: Succeeded StartedAt: 2026-09-10 19:04:48 +0000 UTC FinishedAt: 2026-09-10 22:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 19:04:48 +0000 UTC FinishedAt: 2026-09-10 22:49:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","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-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 19:04:48 +0000 UTC FinishedAt: 2026-09-10 19:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 19:04:48 +0000 UTC FinishedAt: 2026-09-10 19:04:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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-workflow8szn7/series-workflow8szn7-convert-artifact-2241166832/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 19:04:58 +0000 UTC FinishedAt: 2026-09-10 19:21:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 19:04:58 +0000 UTC FinishedAt: 2026-09-10 19:21:43 +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:*a3ecc8bc-e160-40b7-a30b-e8490efcf37c,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-workflow8szn7/series-workflow8szn7-convert-artifact-2241166832/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": "952eeacd-6cf7-4942-b9c2-7d0e674930f0", "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-workflow8szn7/series-workflow8szn7-build-action-539920630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 19:04:58 +0000 UTC FinishedAt: 2026-09-10 19:21:33 +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:*a3ecc8bc-e160-40b7-a30b-e8490efcf37c,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-workflow8szn7/series-workflow8szn7-convert-artifact-2241166832/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": "952eeacd-6cf7-4942-b9c2-7d0e674930f0", "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-workflow8szn7/series-workflow8szn7-build-action-539920630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 19:21:43 +0000 UTC FinishedAt: 2026-09-10 19:21:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 19:21:43 +0000 UTC FinishedAt: 2026-09-10 19:21:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 19:21:43 +0000 UTC FinishedAt: 2026-09-10 19:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 19:21:43 +0000 UTC FinishedAt: 2026-09-10 19:21:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","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-workflow8szn7/series-workflow8szn7-convert-artifact-48486359/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 19:21:53 +0000 UTC FinishedAt: 2026-09-10 19:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 19:21:53 +0000 UTC FinishedAt: 2026-09-10 19:23:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*952eeacd-6cf7-4942-b9c2-7d0e674930f0,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-workflow8szn7/series-workflow8szn7-build-action-539920630/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-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 19:23:47 +0000 UTC FinishedAt: 2026-09-10 19:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 19:23:47 +0000 UTC FinishedAt: 2026-09-10 19:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 19:23:47 +0000 UTC FinishedAt: 2026-09-10 19:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 19:23:47 +0000 UTC FinishedAt: 2026-09-10 19:43:26 +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:*a3ecc8bc-e160-40b7-a30b-e8490efcf37c,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-workflow8szn7/series-workflow8szn7-convert-artifact-48486359/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": "487f5079-d4e8-48a4-8055-a5b4457bc9b4", "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-workflow8szn7/series-workflow8szn7-build-action-3284553499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 19:23:47 +0000 UTC FinishedAt: 2026-09-10 19:43:16 +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:*a3ecc8bc-e160-40b7-a30b-e8490efcf37c,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-workflow8szn7/series-workflow8szn7-convert-artifact-48486359/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": "487f5079-d4e8-48a4-8055-a5b4457bc9b4", "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-workflow8szn7/series-workflow8szn7-build-action-3284553499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 19:43:26 +0000 UTC FinishedAt: 2026-09-10 19:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 19:43:26 +0000 UTC FinishedAt: 2026-09-10 19:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 19:43:26 +0000 UTC FinishedAt: 2026-09-10 19:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 19:43:26 +0000 UTC FinishedAt: 2026-09-10 19:45:03 +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:*487f5079-d4e8-48a4-8055-a5b4457bc9b4,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-workflow8szn7/series-workflow8szn7-build-action-3284553499/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-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 19:45:13 +0000 UTC FinishedAt: 2026-09-10 22:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 19:45:13 +0000 UTC FinishedAt: 2026-09-10 22:49:10 +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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"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:*952eeacd-6cf7-4942-b9c2-7d0e674930f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*487f5079-d4e8-48a4-8055-a5b4457bc9b4,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-workflow8szn7/series-workflow8szn7-build-action-539920630/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-workflow8szn7/series-workflow8szn7-build-action-3284553499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 19:45:13 +0000 UTC FinishedAt: 2026-09-10 19:45:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 19:45:13 +0000 UTC FinishedAt: 2026-09-10 19:45:18 +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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"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-workflow8szn7/series-workflow8szn7-convert-artifact-1645604752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 19:45:13 +0000 UTC FinishedAt: 2026-09-10 19:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 19:45:13 +0000 UTC FinishedAt: 2026-09-10 19:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 19:45:13 +0000 UTC FinishedAt: 2026-09-10 19:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 19:45:23 +0000 UTC FinishedAt: 2026-09-10 22:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8szn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"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":["sort_r","check_dup_ids","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","KPROBE_EVENTS"],"series_id":"65413d4b-ab1a-4116-a09f-05929a4451ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 19:45:23 +0000 UTC FinishedAt: 2026-09-10 22:49:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*952eeacd-6cf7-4942-b9c2-7d0e674930f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*487f5079-d4e8-48a4-8055-a5b4457bc9b4,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-workflow8szn7/series-workflow8szn7-build-action-539920630/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-workflow8szn7/series-workflow8szn7-build-action-3284553499/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-workflow8szn7/series-workflow8szn7-convert-artifact-1645604752/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,}