Name: series-workflows9g24 Phase: Succeeded StartedAt: 2026-09-06 23:19:36 +0000 UTC FinishedAt: 2026-09-07 03:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[0] Phase: Succeeded StartedAt: 2026-09-06 23:19:36 +0000 UTC FinishedAt: 2026-09-06 23:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 23:19:36 +0000 UTC FinishedAt: 2026-09-06 23:43:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9e52420889a26d87ac7a92eb579cf18d7b516397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9e52420889a26d87ac7a92eb579cf18d7b516397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "b5895d91-4540-4bba-8d73-9bf77b8fd8ef" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_pool_create", "zswap_setup", "zswap_never_enabled", "zswap_compressor_param_set", "zswap_enabled_param_set", "zswap_load" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zZXR1cCYjMzQ7LAogICAgJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2VuYWJsZWRfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpIGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCksIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpYyBicmFuY2ggdHJhY2tpbmcgd2hldGhlciB6c3dhcCB3YXMgZXZlciBlbmFibGVkIGlzIGFjdGl2YXRlZCB3aGVuZXZlciBhIHpzd2FwIHBvb2wgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGUuZy4sIHdoZW4gZHluYW1pY2FsbHkgY29uZmlndXJlZCB2aWEgc3lzZnMvcGFyYW1ldGVycykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIG1vdmluZyB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgenN3YXBfZXZlcl9lbmFibGVkIHN0YXRpYyBrZXkgZnJvbSB6c3dhcF9zZXR1cCgpIGludG8genN3YXBfcG9vbF9jcmVhdGUoKS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6c3dhcF9uZXZlcl9lbmFibGVkKCkgYW5kIGFmZmVjdHMgcnVudGltZSBjaGVja3MgZHVyaW5nIHN3YXAgb3BlcmF0aW9ucyBhbmQgc3lzZnMgcGFyYW1ldGVyIHJlY29uZmlndXJhdGlvbi4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjQyOjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi4zYWJjZDg0MzM0MjViIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuY1xuQEAgLTMyNCw2ICYjNDM7MzI0LDggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDtjcmVhdGVkXCYjMzQ7LCBwb29sKTtcbiBcbiYjNDM7XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuJiM0MztcbiBcdHJldHVybiBwb29sO1xuIFxuIHJlZl9mYWlsOlxuQEAgLTE4MDUsNyAmIzQzOzE4MDcsNiBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4gXHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cJiMzNDssIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuLVx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfZXJyKFwmIzM0O3Bvb2wgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiBcdFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zZXR1cCYjMzQ7LAogICAgJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2VuYWJsZWRfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDc5NWFkYzk1ZjIxYWJjMGMzNjE0ZjFkN2UzN2MzOWI3ODMxOGVlYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMjM6NDI6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi4zYWJjZDg0MzM0MjViIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTMyNCw2ICYjNDM7MzI0LDggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCiAJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O2NyZWF0ZWQmIzM0OywgcG9vbCk7CiAKJiM0MzsJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDt6c3dhcF9ldmVyX2VuYWJsZWQpOwomIzQzOwogCXJldHVybiBwb29sOwogCiByZWZfZmFpbDoKQEAgLTE4MDUsNyAmIzQzOzE4MDcsNiBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpCiAJCXByX2luZm8oJiMzNDtsb2FkZWQgdXNpbmcgcG9vbCAlc1xuJiMzNDssIHBvb2wtJmd0O3RmbV9uYW1lKTsKIAkJbGlzdF9hZGQoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKIAkJenN3YXBfaGFzX3Bvb2wgPSB0cnVlOwotCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7CiAJfSBlbHNlIHsKIAkJcHJfZXJyKCYjMzQ7cG9vbCBjcmVhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKIAkJenN3YXBfZW5hYmxlZCA9IGZhbHNlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcGF0Y2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBtbS96c3dhcC5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgY2VudGVyZWQgYXJvdW5kIGB6c3dhcF9ldmVyX2VuYWJsZWRgLgoKTG9va2luZyBhdCB0aGUgZGV0YWlscywgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTtgIHdpdGhpbiB0aGUgYHpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhpcyBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgWnN3YXAmIzM5O3MgaW5pdGlhbGl6YXRpb24gaW50ZXJhY3RzIHdpdGggc3RhdGljIGJyYW5jaGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7YCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGB6c3dhcF9zZXR1cCh2b2lkKWAgZnVuY3Rpb24uIFRoaXMgcG9pbnRzIHRvd2FyZCBhIGNoYW5nZSBpbiAqd2hlbiogdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBgbW0venN3YXAuY2AgaXRzZWxmLiBJJiMzOTtsbCBwcm9iYWJseSByZWFjaCBmb3IgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY2FsbCB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGUsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBzZWUgd2hhdCB0aGUgaW50ZW50aW9ucyBvZiB0aGVzZSBzZWVtaW5nbHkgY29udHJhcnkgYWx0ZXJhdGlvbnMgYXJlLiBBcmUgdGhleSBpbnRlbmRlZCB0byBkZWxheSBmZWF0dXJlIGVuYWJsZW1lbnQgdW50aWwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IsIHBlcmhhcHMsIGVuc3VyZSB0aGF0IGEgdXNlciBjYW4gdHVybiB0aGUgZmVhdHVyZSBvZmYgc2FmZWx5IGFmdGVyIGJvb3RpbmcsIG9yIGlzIHRoZXJlIGEgYmlnZ2VyIGNoYW5nZSBoYXBwZW5pbmcgdG8gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlPyBJIGV4cGVjdCBhIGZ1bGxlciBwaWN0dXJlIHdpbGwgYXBwZWFyIG9uY2UgSSBnZXQgbW9yZSBjb250ZXh0IGZyb20gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX2V2ZXJfZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYy05MC1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG4tLVxubW0venN3YXAuYz0xMzA9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG5tbS96c3dhcC5jOjEzMjpcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmMtMTMzLX1cbi0tXG5tbS96c3dhcC5jPTI3Mz1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4tLVxubW0venN3YXAuYy0zMjYtXG5tbS96c3dhcC5jOjMyNzpcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTMyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFpzd2FwIFBvb2wgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hvKiBjYWxscyBgenN3YXBfcG9vbF9jcmVhdGVgLCAqd2hlbiogaXQmIzM5O3MgY2FsbGVkLCBhbmQgKndoeSouIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVsYXRlZCBmbGFncyBhbmQgdmFyaWFibGVzOiBgenN3YXBfZXZlcl9lbmFibGVkYCwgYW5kIGB6c3dhcF9uZXZlcl9lbmFibGVkYC4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGVzZSBmbGFncyB3aWxsIGNvbnRyb2wgdGhlIHN0YXRlIG9mIHRoZSBmZWF0dXJlOiB3aGVuIGl0IGNhbiBiZSBjcmVhdGVkIGFuZCBpZiBpdCBoYXMgYmVlbi4gSG93IGRvZXMgdGhlIGtlcm5lbCBkZWNpZGUgd2hldGhlciB0byBpbml0aWFsaXplIGEgWnN3YXAgcG9vbCBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCBkb2VzIHRoaXMgZGVjaXNpb24gZGVwZW5kIG9uIGJvb3QgcGFyYW1ldGVycywgc3lzZnMgc2V0dGluZ3MsIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93LiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludHMgd2lsbCBwcm92aWRlIGEgd2F5IHRvIGV4YW1pbmUgdGhlIGJlaGF2aW9yIHdoZW4gdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIG9mIHRoZXNlIGZsYWdzIHRocm91Z2ggdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIHN0YXRlIGFmZmVjdHMgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIHpzd2FwLmMgLSB6c3dhcCBkcml2ZXIgZmlsZVxuICAgNDpcdCAqXG4gICA1Olx0ICogenN3YXAgaXMgYSBjYWNoZSB0aGF0IHRha2VzIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzXG4gICA2Olx0ICogb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvIGNvbXByZXNzIGFuZCBzdG9yZSB0aGVtIGluIGFcbiAgIDc6XHQgKiBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uXG4gICA4Olx0ICogdGhlIHN3YXAgZGV2aWNlIGFuZCwgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXJcbiAgIDk6XHQgKiB0aGFuIHJlYWRpbmcgZnJvbSB0aGUgc3dhcCBkZXZpY2UsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDEwOlx0ICpcbiAgMTE6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTIgIFNldGggSmVubmluZ3MgXHUwMDNjc2plbm5pbmdAbGludXgudm5ldC5pYm0uY29tXHUwMDNlXG4gIDEyOlx0Ki9cbiAgMTM6XHRcbiAgMTQ6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAxNTpcdFxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcF9vcHMuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyeXB0by5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcG9vbC5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2Fjb21wcmVzcy5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjY3J5cHRvL3NjYXR0ZXJ3YWxrLmhcdTAwM2VcbiAgMzA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuICAzMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZVxuICAzMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBvcHMuaFx1MDAzZVxuICAzNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gIDM1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gIDM2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAgMzc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gIDM4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuICAzOTpcdFxuICA0MDpcdCNpbmNsdWRlIFwmIzM0O3N3YXAuaFwmIzM0O1xuICA0MTpcdCNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAgNDI6XHRcbiAgNDM6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIDQ0Olx0KiBzdGF0aXN0aWNzXG4gIDQ1Olx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgNDY6XHQvKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cbiAgNDc6XHRhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gIDQ4Olx0LyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG4gIDQ5Olx0c3RhdGljIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbiAgNTA6XHRcbiAgNTE6XHQvKlxuICA1MjpcdCAqIFRoZSBzdGF0aXN0aWNzIGJlbG93IGFyZSBub3QgcHJvdGVjdGVkIGZyb20gY29uY3VycmVudCBhY2Nlc3MgZm9yXG4gIDUzOlx0ICogcGVyZm9ybWFuY2UgcmVhc29ucyBzbyB0aGV5IG1heSBub3QgYmUgYSAxMDAlIGFjY3VyYXRlLiAgSG93ZXZlcixcbiAgNTQ6XHQgKiB0aGV5IGRvIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHJvdWdobHkgaG93IG1hbnkgdGltZXMgYVxuICA1NTpcdCAqIGNlcnRhaW4gZXZlbnQgaXMgb2NjdXJyaW5nLlxuICA1NjpcdCovXG4gIDU3Olx0XG4gIDU4Olx0LyogUG9vbCBsaW1pdCB3YXMgaGl0IChzZWUgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCkgKi9cbiAgNTk6XHRzdGF0aWMgdTY0IHpzd2FwX3Bvb2xfbGltaXRfaGl0O1xuICA2MDpcdC8qIFBhZ2VzIHdyaXR0ZW4gYmFjayB3aGVuIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cbiAgNjE6XHRzdGF0aWMgdTY0IHpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcztcbiAgNjI6XHQvKiBTdG9yZSBmYWlsZWQgZHVlIHRvIGEgcmVjbGFpbSBmYWlsdXJlIGFmdGVyIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cbiAgNjM6XHRzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWw7XG4gIDY0Olx0LyogU3RvcmUgZmFpbGVkIGR1ZSB0byBjb21wcmVzc2lvbiBhbGdvcml0aG0gZmFpbHVyZSAqL1xuICA2NTpcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX2ZhaWw7XG4gIDY2Olx0LyogQ29tcHJlc3NlZCBwYWdlIHdhcyB0b28gYmlnIGZvciB0aGUgYWxsb2NhdG9yIHRvIChvcHRpbWFsbHkpIHN0b3JlICovXG4gIDY3Olx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfcG9vcjtcbiAgNjg6XHQvKiBMb2FkIG9yIHdyaXRlYmFjayBmYWlsZWQgZHVlIHRvIGRlY29tcHJlc3Npb24gZmFpbHVyZSAqL1xuICA2OTpcdHN0YXRpYyB1NjQgenN3YXBfZGVjb21wcmVzc19mYWlsO1xuICA3MDpcdC8qIFN0b3JlIGZhaWxlZCBiZWNhdXNlIHVuZGVybHlpbmcgYWxsb2NhdG9yIGNvdWxkIG5vdCBnZXQgbWVtb3J5ICovXG4gIDcxOlx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfYWxsb2NfZmFpbDtcbiAgNzI6XHQvKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB0aGUgZW50cnkgbWV0YWRhdGEgY291bGQgbm90IGJlIGFsbG9jYXRlZCAocmFyZSkgKi9cbiAgNzM6XHRzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbDtcbiAgNzQ6XHRcbiAgNzU6XHQvKiBTaHJpbmtlciB3b3JrIHF1ZXVlICovXG4gIDc2Olx0c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzaHJpbmtfd3E7XG4gIDc3Olx0LyogUG9vbCBsaW1pdCB3YXMgaGl0LCB3ZSBuZWVkIHRvIGNhbG0gZG93biAqL1xuICA3ODpcdHN0YXRpYyBib29sIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xuICA3OTpcdFxuICA4MDpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgODE6XHQqIHR1bmFibGVzXG4gIDgyOlx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgODM6XHRcbiAgODQ6XHQjZGVmaW5lIFpTV0FQX1BBUkFNX1VOU0VUIFwmIzM0O1wmIzM0O1xuICA4NTpcdFxuICA4NjpcdHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCk7XG4gIDg3Olx0XG4gIDg4Olx0LyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbiAgODk6XHRzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIHpzd2FwX2V2ZXJfZW5hYmxlZCk7XG4gIDkwOlx0c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xuICA5MTpcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxuICA5MjpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbiAgOTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfZW5hYmxlZF9wYXJhbV9vcHMgPSB7XG4gIDk0Olx0XHQuc2V0ID1cdFx0enN3YXBfZW5hYmxlZF9wYXJhbV9zZXQsXG4gIDk1Olx0XHQuZ2V0ID1cdFx0cGFyYW1fZ2V0X2Jvb2wsXG4gIDk2Olx0fTtcbiAgOTc6XHRtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFx1MDAyNnpzd2FwX2VuYWJsZWQsIDA2NDQpO1xuICA5ODpcdFxuICA5OTpcdC8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xuIDEwMDpcdHN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbW0venN3YXAuY2AgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgYXJlYXMgdGhhdCBkcml2ZSB6c3dhcCYjMzk7cyBiZWhhdmlvciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93cy4KCioqWnN3YXAgRGVlcCBEaXZlOiBJbml0aWFsaXphdGlvbiBhbmQgQ29udHJvbCoqCgpSaWdodCwgc28gSSB3YW50IHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHpzd2FwIHBvb2wgaXMgY3JlYXRlZCBhbmQgbWFuYWdlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgYHpzd2FwX3Bvb2xfY3JlYXRlYCBjYWxscyDigJMgd2hvJiMzOTtzIHJlc3BvbnNpYmxlIGZvciBicmluZ2luZyB0aGlzIHRoaW5nIHRvIGxpZmU/IFdoYXQgYXJlIHRoZSBwYXJhbWV0ZXJzIGludm9sdmVkLCBhbmQgaG93IGRvIHRoZXkgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcz8gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBjb250ZW50aW9uIHBvaW50cyB3aXRoaW4gdGhlIHBvb2wmIzM5O3MgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMuCgpOZXh0LCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZW5hYmxpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCB0byBwaW5wb2ludCBob3cgenN3YXAmIzM5O3MgYmVoYXZpb3IgaXMgY29uZmlndXJlZCBhdCBydW50aW1lLiBBcmUgdGhlcmUgdHVuYWJsZSBwYXJhbWV0ZXJzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBzZXR0aW5ncyBvbiBzd2FwIGJlaGF2aW9yIGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZT8gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGNvbnNpZGVyYXRpb25zIGhlcmU/CgpGaW5hbGx5LCB0aGUgYHpzd2FwX3NldHVwYCBmdW5jdGlvbiBuZWVkcyBjYXJlZnVsIGV4YW1pbmF0aW9uLiBUaGlzIGlzIHByb2JhYmx5IHRoZSBtYXN0ZXIgc3dpdGNoLCB0aGUgcHJpbWFyeSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIHpzd2FwIHN5c3RlbS4gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIHBpY3R1cmUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBpbmNsdWRpbmcgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZS4gV2hlcmUgaXMgaXQgY2FsbGVkPyBXaGF0IHByZXJlcXVpc2l0ZXMgbXVzdCBiZSBzYXRpc2ZpZWQgYmVmb3JlIGl0IGNhbiBydW4/IFdoYXQgZG9lcyBpdCBzZXQgdXA/IEFueSBub24tb2J2aW91cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBNTSBzdWJzeXN0ZW1zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcG90ZW50aWFsIHByb2JsZW1zIHJlZ2FyZGluZyBOVU1BLCBhbmQgaG93IHpzd2FwIGludGVyZmFjZXMgd2l0aCB0aGF0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRhY29tcF9jdHgtXHUwMDNlYnVmZmVyID0gTlVMTDtcbiAyNzE6XHR9XG4gMjcyOlx0XG4gMjczOlx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIDI3NDpcdHtcbiAyNzU6XHRcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIDI3NjpcdFx0Y2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFxcMCAqL1xuIDI3NzpcdFx0aW50IHJldCwgY3B1O1xuIDI3ODpcdFxuIDI3OTpcdFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gMjgwOlx0XHRcdHJldHVybiBOVUxMO1xuIDI4MTpcdFxuIDI4MjpcdFx0cG9vbCA9IGt6YWxsb2Nfb2JqKCpwb29sKTtcbiAyODM6XHRcdGlmICghcG9vbClcbiAyODQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjg1Olx0XG4gMjg2Olx0XHQvKiB1bmlxdWUgbmFtZSBmb3IgZWFjaCBwb29sIHNwZWNpZmljYWxseSByZXF1aXJlZCBieSB6c21hbGxvYyAqL1xuIDI4NzpcdFx0c25wcmludGYobmFtZSwgMzgsIFwmIzM0O3pzd2FwJXhcJiMzNDssIGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnpzd2FwX3Bvb2xzX2NvdW50KSk7XG4gMjg4Olx0XHRwb29sLVx1MDAzZXpzX3Bvb2wgPSB6c19jcmVhdGVfcG9vbChuYW1lKTtcbiAyODk6XHRcdGlmICghcG9vbC1cdTAwM2V6c19wb29sKVxuIDI5MDpcdFx0XHRnb3RvIGVycm9yO1xuIDI5MTpcdFxuIDI5MjpcdFx0c3Ryc2NweShwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yLCBzaXplb2YocG9vbC1cdTAwM2V0Zm1fbmFtZSkpO1xuIDI5MzpcdFxuIDI5NDpcdFx0LyogTWFueSB0aGluZ3MgcmVseSBvbiB0aGUgemVyby1pbml0aWFsaXphdGlvbi4gKi9cbiAyOTU6XHRcdHBvb2wtXHUwMDNlYWNvbXBfY3R4ID0gYWxsb2NfcGVyY3B1X2dmcCgqcG9vbC1cdTAwM2VhY29tcF9jdHgsXG4gMjk2Olx0XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiAyOTc6XHRcdGlmICghcG9vbC1cdTAwM2VhY29tcF9jdHgpIHtcbiAyOTg6XHRcdFx0cHJfZXJyKFwmIzM0O3BlcmNwdSBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuIDI5OTpcdFx0XHRnb3RvIGVycm9yO1xuIDMwMDpcdFx0fVxuIDMwMTpcdFxuIDMwMjpcdFx0LypcbiAzMDM6XHRcdCAqIFRoaXMgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEhlbmNlLCBjb3Jlc1xuIDMwNDpcdFx0ICogY2Fubm90IGJlIG9mZmxpbmVkIHVudGlsIHRoaXMgZmluaXNoZXMuXG4gMzA1Olx0XHQgKi9cbiAzMDY6XHRcdHJldCA9IGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSxcbiAzMDc6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwb29sLVx1MDAzZW5vZGUpO1xuIDMwODpcdFxuIDMwOTpcdFx0LypcbiAzMTA6XHRcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxuIDMxMTpcdFx0ICogd2UgZG9uJiMzOTt0IHJlZ2lzdGVyIGEgaG90dW5wbHVnIGNhbGxiYWNrLlxuIDMxMjpcdFx0ICovXG4gMzEzOlx0XHRpZiAocmV0KVxuIDMxNDpcdFx0XHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xuIDMxNTpcdFxuIDMxNjpcdFx0LyogYmVpbmcgdGhlIGN1cnJlbnQgcG9vbCB0YWtlcyAxIHJlZjsgdGhpcyBmdW5jIGV4cGVjdHMgdGhlXG4gMzE3Olx0XHQgKiBjYWxsZXIgdG8gYWx3YXlzIGFkZCB0aGUgbmV3IHBvb2wgYXMgdGhlIGN1cnJlbnQgcG9vbFxuIDMxODpcdFx0ICovXG4gMzE5Olx0XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYsIF9fenN3YXBfcG9vbF9lbXB0eSxcbiAzMjA6XHRcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gMzIxOlx0XHRpZiAocmV0KVxuIDMyMjpcdFx0XHRnb3RvIHJlZl9mYWlsO1xuIDMyMzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiAzMjQ6XHRcbiAzMjU6XHRcdHpzd2FwX3Bvb2xfZGVidWcoXCYjMzQ7Y3JlYXRlZFwmIzM0OywgcG9vbCk7XG4gMzI2Olx0XG4gMzI3Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIDMyODpcdFxuIDMyOTpcdFx0cmV0dXJuIHBvb2w7XG4gMzMwOlx0XG4gMzMxOlx0cmVmX2ZhaWw6XG4gMzMyOlx0XHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gMzMzOlx0XG4gMzM0Olx0Y3B1aHBfYWRkX2ZhaWw6XG4gMzM1Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuIDMzNjpcdFx0XHRhY29tcF9jdHhfZnJlZShwZXJfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCwgY3B1KSk7XG4gMzM3Olx0ZXJyb3I6XG4gMzM4Olx0XHRpZiAocG9vbC1cdTAwM2VhY29tcF9jdHgpXG4gMzM5Olx0XHRcdGZyZWVfcGVyY3B1KHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiAzNDA6XHRcdGlmIChwb29sLVx1MDAzZXpzX3Bvb2wpXG4gMzQxOlx0XHRcdHpzX2Rlc3Ryb3lfcG9vbChwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIDM0MjpcdFx0a2ZyZWUocG9vbCk7XG4gMzQzOlx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0aWYgKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApIFx1MDAyNlx1MDAyNlxuIDM0OTpcdFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIGRpc2FibGluZyB6c3dhcCBhdCBib290IGFuZCB0aGVuIGVuYWJsaW5nIGl0IGxhdGVyIGR5bmFtaWNhbGx5LCB0aGlua2luZyBsaWtlIHRoZSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyIEkgYW06CgoqKkFuYWx5emluZyB6c3dhcCBJbml0aWFsaXphdGlvbiBhbmQgRHluYW1pYyBDb250cm9sKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXIuIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaG93IHRoZSB6c3dhcCBtZWNoYW5pc20gYmVoYXZlcyB3aGVuIGl0cyBpbml0aWFsIHN0YXRlIGlzIHNldCBkdXJpbmcgYm9vdCwgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIGVuYWJsaW5nIGl0IG9uLXRoZS1mbHksIHR5cGljYWxseSB0aHJvdWdoIHN5c2ZzIG9yIGEgbW9kdWxlIHBhcmFtZXRlciBjaGFuZ2UuIEZpcnN0IHVwLCBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSByZWFkIHRocm91Z2ggdGhlIGB6c3dhcF9zZXR1cGAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgZm91bmRhdGlvbiBvZiBob3cgenN3YXAgZ2V0cyBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBpdCB0YWtlcywgdGhlIHJlc291cmNlcyBpdCBhbGxvY2F0ZXMsIGFuZCBhbnkgZWFybHkgY2hlY2tzIGZvciBlbmFibGVkL2Rpc2FibGVkIHN0YXRlcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZG9uZSB3aGVuIHpzd2FwIGlzICpzdXBwb3NlZCogdG8gYmUgYWN0aXZlIGZyb20gdGhlIGJlZ2lubmluZywgYW5kIGlmIHRob3NlIGFjdGlvbnMgYXJlIHNraXBwZWQgb3IgZGVmZXJyZWQgd2hlbiBkaXNhYmxlZC4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgZHluYW1pYyBjb250cm9sLiBUaGlzIGZ1bmN0aW9uICptdXN0KiBoYW5kbGUgdGhlIHRyYW5zaXRpb24gZnJvbSBkaXNhYmxlZCB0byBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGxvZ2ljOiBEb2VzIGl0IHNpbXBseSByZS1leGVjdXRlIHBhcnRzIG9mIHRoZSBzZXR1cD8gRG9lcyBpdCBjYWxsIGEgc2VwYXJhdGUgZW5hYmxlIGZ1bmN0aW9uPyBEb2VzIGl0IHNhZmVseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGlmIHRob3NlIHRoaW5ncyBhcmUgbm90IHBlcmZvcm1lZCBkdXJpbmcgdGhlIGluaXRpYWwgYm9vdD8gSSB3aWxsIHdhbnQgdG8gY2hlY2sgaG93IGl0IGVuc3VyZXMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBvciB1bmluaXRpYWxpemVkLCBhcyB3ZWxsIGFzIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24uIEkgd2lsbCBwYXkgdmVyeSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgY29uY3VycmVuY3kgaXMgaGFuZGxlZCBzYWZlbHkuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW5hYmxpbmcgcGF0aC4gRG9lcyBpdCBwZXJmb3JtIGEgZnVsbCBzZXR1cCBlcXVpdmFsZW50IHRvIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiwgb3IgZG9lcyBpdCBjbGV2ZXJseSBza2lwIG9yIHJlLXVzZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZT8gV2hhdCByZXNvdXJjZXMgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5hZ2UsIGFuZCBob3cgaXMgaXQgZG9uZSBpbiBhIHRocmVhZC1zYWZlIG1hbm5lcj8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3Igb3IgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBhcmlzZSBmcm9tIHRoaXMgZHluYW1pYyBhcHByb2FjaD8gRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGRvY3VtZW50YXRpb24gY29tbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc4MDpcdFx0XHRwcl9lcnIoXCYjMzQ7ZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbjE3ODE6XHRcdFx0Z290byBjYWNoZV9mYWlsO1xuMTc4MjpcdFx0fVxuMTc4MzpcdFxuMTc4NDpcdFx0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsXG4xNzg1Olx0XHRcdFx0XHQgICAgICBcJiMzNDttbS96c3dhcF9wb29sOnByZXBhcmVcJiMzNDssXG4xNzg2Olx0XHRcdFx0XHQgICAgICB6c3dhcF9jcHVfY29tcF9wcmVwYXJlLFxuMTc4NzpcdFx0XHRcdFx0ICAgICAgTlVMTCk7XG4xNzg4Olx0XHRpZiAocmV0KVxuMTc4OTpcdFx0XHRnb3RvIGhwX2ZhaWw7XG4xNzkwOlx0XG4xNzkxOlx0XHRzaHJpbmtfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7enN3YXAtc2hyaW5rXCYjMzQ7LFxuMTc5MjpcdFx0XHRcdFdRX1VOQk9VTkR8V1FfTUVNX1JFQ0xBSU0sIDEpO1xuMTc5MzpcdFx0aWYgKCFzaHJpbmtfd3EpXG4xNzk0Olx0XHRcdGdvdG8gc2hyaW5rX3dxX2ZhaWw7XG4xNzk1Olx0XG4xNzk2Olx0XHR6c3dhcF9zaHJpbmtlciA9IHpzd2FwX2FsbG9jX3Nocmlua2VyKCk7XG4xNzk3Olx0XHRpZiAoIXpzd2FwX3Nocmlua2VyKVxuMTc5ODpcdFx0XHRnb3RvIHNocmlua2VyX2ZhaWw7XG4xNzk5Olx0XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZ6c3dhcF9saXN0X2xydSwgenN3YXBfc2hyaW5rZXIpKVxuMTgwMDpcdFx0XHRnb3RvIGxydV9mYWlsO1xuMTgwMTpcdFx0c2hyaW5rZXJfcmVnaXN0ZXIoenN3YXBfc2hyaW5rZXIpO1xuMTgwMjpcdFxuMTgwMzpcdFx0SU5JVF9XT1JLKFx1MDAyNnpzd2FwX3Nocmlua193b3JrLCBzaHJpbmtfd29ya2VyKTtcbjE4MDQ6XHRcbjE4MDU6XHRcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XG4xODA2Olx0XHRpZiAocG9vbCkge1xuMTgwNzpcdFx0XHRwcl9pbmZvKFwmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXFxuXCYjMzQ7LCBwb29sLVx1MDAzZXRmbV9uYW1lKTtcbjE4MDg6XHRcdFx0bGlzdF9hZGQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4xODA5Olx0XHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbjE4MTA6XHRcdH0gZWxzZSB7XG4xODExOlx0XHRcdHByX2VycihcJiMzNDtwb29sIGNyZWF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4xODEyOlx0XHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbjE4MTM6XHRcdH1cbjE4MTQ6XHRcbjE4MTU6XHRcdGlmICh6c3dhcF9kZWJ1Z2ZzX2luaXQoKSlcbjE4MTY6XHRcdFx0cHJfd2FybihcJiMzNDtkZWJ1Z2ZzIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4xODE3Olx0XHR6c3dhcF9pbml0X3N0YXRlID0gWlNXQVBfSU5JVF9TVUNDRUVEO1xuMTgxODpcdFx0cmV0dXJuIDA7XG4xODE5Olx0XG4xODIwOlx0bHJ1X2ZhaWw6XG4xODIxOlx0XHRzaHJpbmtlcl9mcmVlKHpzd2FwX3Nocmlua2VyKTtcbjE4MjI6XHRzaHJpbmtlcl9mYWlsOlxuMTgyMzpcdFx0ZGVzdHJveV93b3JrcXVldWUoc2hyaW5rX3dxKTtcbjE4MjQ6XHRzaHJpbmtfd3FfZmFpbDpcbjE4MjU6XHRcdGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSk7XG4xODI2Olx0aHBfZmFpbDpcbjE4Mjc6XHRcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XG4xODI4Olx0Y2FjaGVfZmFpbDpcbjE4Mjk6XHRcdC8qIGlmIGJ1aWx0LWluLCB3ZSBhcmVuJiMzOTt0IHVubG9hZGVkIG9uIGZhaWx1cmU7IGRvbiYjMzk7dCBhbGxvdyB1c2UgKi9cbjE4MzA6XHRcdHpzd2FwX2luaXRfc3RhdGUgPSBaU1dBUF9JTklUX0ZBSUxFRDtcbjE4MzE6XHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbjE4MzI6XHRcdHJldHVybiAtRU5PTUVNO1xuMTgzMzpcdH1cbjE4MzQ6XHRcbjE4MzU6XHRzdGF0aWMgaW50IF9faW5pdCB6c3dhcF9pbml0KHZvaWQpXG4xODM2Olx0e1xuMTgzNzpcdFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuMTgzODpcdFx0XHRyZXR1cm4gMDtcbjE4Mzk6XHRcdHJldHVybiB6c3dhcF9zZXR1cCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjkwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB6c3dhcF9lbmFibGVkX3BhcmFtX3NldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YC4gV2hlbmV2ZXIgSSBlbmNvdW50ZXIgYSBwYXJhbWV0ZXIgd2l0aCBhIG5hbWUgbGlrZSB0aGF0LCBteSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwYXJzaW5nIGl0LiBJIHNlZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBhc3N1bWUgdGhpcyByZWxhdGVzIHRvIHRoZSBgenN3YXBgIGtlcm5lbCBtb2R1bGUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGEgYm9vbGVhbiB2YWx1ZSwgYSBmbGFnLiAmIzM0O0VuYWJsZWQmIzM0OyBpbiB0aGUgbmFtZSBpbXBsaWVzIHRoYXQgc2V0dGluZyBpdCB3aWxsIHRvZ2dsZSBzb21lIHNvcnQgb2YgZnVuY3Rpb25hbGl0eSBvbiBvciBvZmYgd2l0aGluIHRoZSB6c3dhcCBzdWJzeXN0ZW0uIFRoZSB1c2Ugb2YgJiMzNDtwYXJhbV9zZXQmIzM0OyBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGEgcnVudGltZSBjb25maWd1cmFibGUgcGFyYW1ldGVyLgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gSXMgdGhpcyBwYXJhbWV0ZXIgYSBzaW1wbGUgb24vb2ZmIHN3aXRjaCBmb3IgdGhlIGVudGlyZSB6c3dhcCBmdW5jdGlvbmFsaXR5LCBvciBkb2VzIGl0IGNvbnRyb2wgYSBzcGVjaWZpYyBhc3BlY3QsIHBlcmhhcHMgYSB0aHJlc2hvbGQsIG9yIGJlaGF2aW9yIHdpdGhpbiB0aGUgY29tcHJlc3NlZCBzd2FwIGNhY2hlPyBJZiBJIHdhbnRlZCB0byBpbnZlc3RpZ2F0ZSwgSSYjMzk7ZCBwcm9iYWJseSBsb29rIGF0IHRoZSBjb250ZXh0IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaXMgdXNlZC4gSSYjMzk7ZCBjaGVjayBob3cgaXQmIzM5O3MgZGVmaW5lZCAoZGF0YSB0eXBlLCBzY29wZSkgYW5kIGhvdyBpdCYjMzk7cyBhY3R1YWxseSAqdXNlZCogdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGFjdHVhbGx5IGNvbnRyb2xzLgoKTm93LCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIEnigJltIG1lbnRhbGx5IG1hcHBpbmcgb3V0IG15IGdvLXRvIGFyZWFzIGZvciB0aGlzLiBJJiMzOTttIHRoaW5raW5nIG9mIGNoZWNraW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZXMsIG9yIHVzaW5nIGBncmVwYCBvciBgZ2l0IGdyZXBgIHRvIGZpbmQgYWxsIHVzYWdlcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGEgY29tcGlsZS10aW1lIG9wdGlvbiAoZG91YnRmdWwsIGdpdmVuIHRoZSBuYW1lKSwgb3IgaWYgaXQmIzM5O3MgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzIG9yIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBgc3lzY3RsYC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCwgYXMgaXQgY2hhbmdlcyBob3cgSSYjMzk7ZCBhcHByb2FjaCBtb2RpZnlpbmcgb3IgZGVidWdnaW5nIHRoZSBzeXN0ZW0uCkkmIzM5O20gZ3Vlc3NpbmcgaXQgcmVsYXRlcyB0byBob3cgbXVjaCB6c3dhcCBpcyBiZWluZyB1dGlsaXplZCwgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHRoZSBwcmVzc3VyZSBiZWluZyBwdXQgb24gdGhlIHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBjb3VsZCBtYWtlIG15IHN5c3RlbSBtb3JlIHJlc3BvbnNpdmUgaWYgdHVuZWQgY29ycmVjdGx5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0c3RydWN0IGNyeXB0b19hY29tcCAqYWNvbXA7XG4gMTQxOlx0XHRzdHJ1Y3QgYWNvbXBfcmVxICpyZXE7XG4gMTQyOlx0XHRzdHJ1Y3QgY3J5cHRvX3dhaXQgd2FpdDtcbiAxNDM6XHRcdHU4ICpidWZmZXI7XG4gMTQ0Olx0XHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG4gMTQ1Olx0fTtcbiAxNDY6XHRcbiAxNDc6XHQvKlxuIDE0ODpcdCAqIFRoZSBsb2NrIG9yZGVyaW5nIGlzIHpzd2FwX3RyZWUubG9jayAtXHUwMDNlIHpzd2FwX3Bvb2wubHJ1X2xvY2suXG4gMTQ5Olx0ICogVGhlIG9ubHkgY2FzZSB3aGVyZSBscnVfbG9jayBpcyBub3QgYWNxdWlyZWQgd2hpbGUgaG9sZGluZyB0cmVlLmxvY2sgaXNcbiAxNTA6XHQgKiB3aGVuIGEgenN3YXBfZW50cnkgaXMgdGFrZW4gb2ZmIHRoZSBscnUgZm9yIHdyaXRlYmFjaywgaW4gdGhhdCBjYXNlIGl0XG4gMTUxOlx0ICogbmVlZHMgdG8gYmUgdmVyaWZpZWQgdGhhdCBpdCYjMzk7cyBzdGlsbCB2YWxpZCBpbiB0aGUgdHJlZS5cbiAxNTI6XHQgKi9cbiAxNTM6XHRzdHJ1Y3QgenN3YXBfcG9vbCB7XG4gMTU0Olx0XHRzdHJ1Y3QgenNfcG9vbCAqenNfcG9vbDtcbiAxNTU6XHRcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7XG4gMTU2Olx0XHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4gMTU3Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gMTU4Olx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xuIDE1OTpcdFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbiAxNjA6XHRcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gMTYxOlx0fTtcbiAxNjI6XHRcbiAxNjM6XHQvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gMTY0Olx0c3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiAxNjU6XHRcbiAxNjY6XHQvKiBUaGUgbG9jayBwcm90ZWN0cyB6c3dhcF9uZXh0X3NocmluayB1cGRhdGVzLiAqL1xuIDE2NzpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfc2hyaW5rX2xvY2spO1xuIDE2ODpcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqenN3YXBfbmV4dF9zaHJpbms7XG4gMTY5Olx0c3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCB6c3dhcF9zaHJpbmtfd29yaztcbiAxNzA6XHRzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAxNzE6XHRcbiAxNzI6XHQvKlxuIDE3MzpcdCAqIHN0cnVjdCB6c3dhcF9lbnRyeVxuIDE3NDpcdCAqXG4gMTc1Olx0ICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIG1ldGFkYXRhIGZvciB0cmFja2luZyBhIHNpbmdsZSBjb21wcmVzc2VkXG4gMTc2Olx0ICogcGFnZSB3aXRoaW4genN3YXAuXG4gMTc3Olx0ICpcbiAxNzg6XHQgKiBzd3BlbnRyeSAtIGFzc29jaWF0ZWQgc3dhcCBlbnRyeSwgdGhlIG9mZnNldCBpbmRleGVzIGludG8gdGhlIHhhcnJheVxuIDE3OTpcdCAqIGxlbmd0aCAtIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhLiAgTmVlZGVkIGR1cmluZ1xuIDE4MDpcdCAqICAgICAgICAgIGRlY29tcHJlc3Npb24uXG4gMTgxOlx0ICogcmVmZXJlbmNlZCAtIHRydWUgaWYgdGhlIGVudHJ5IHJlY2VudGx5IGVudGVyZWQgdGhlIHpzd2FwIHBvb2wuIFVuc2V0IGJ5IHRoZVxuIDE4MjpcdCAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXG4gMTgzOlx0ICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcbiAxODQ6XHQgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cbiAxODU6XHQgKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5JiMzOTtzIGRhdGEgaXMgaW5cbiAxODY6XHQgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAxODc6XHQgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAxODg6XHQgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXG4gMTg5Olx0ICovXG4gMTkwOlx0c3RydWN0IHpzd2FwX2VudHJ5IHtcbiAxOTE6XHRcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuIDE5MjpcdFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiAxOTM6XHRcdGJvb2wgcmVmZXJlbmNlZDtcbiAxOTQ6XHRcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIDE5NTpcdFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gMTk2Olx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gMTk3Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiAxOTg6XHR9O1xuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBac3dhcCBMYWJ5cmludGgqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGhvdyB6c3dhcCBpcyBjb25maWd1cmVkLCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBlbmFibGluZyBvZiBpdC4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHNldHRpbmcsIHRoaXMgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCwgaXMgbGlrZWx5IGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIHpzd2FwIGltcGxlbWVudGF0aW9uLiBTbywgbXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBtbS96c3dhcC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiwgdmFyaWFibGUsIG9yIHdoYXRldmVyIGl0IGlzIHRoYXQgbWFuYWdlcyB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiB0aGlzIGltcG9ydGFudCBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkmIzM5O20gZ29pbmcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX2VuYWJsZWRfcGFyYW1fc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTkwPXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6OTE6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTkyLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbm1tL3pzd2FwLmM9OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xubW0venN3YXAuYzo5NDpcdC5zZXQgPVx0XHR6c3dhcF9lbmFibGVkX3BhcmFtX3NldCxcbm1tL3pzd2FwLmMtOTUtXHQuZ2V0ID1cdFx0cGFyYW1fZ2V0X2Jvb2wsXG4tLVxubW0venN3YXAuYz01MzA9c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL3pzd2FwLmMtNjE4LVxubW0venN3YXAuYzo2MTk6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG5tbS96c3dhcC5jLTYyMC1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDYxNS02NjAgb2YgYG1tL3pzd2FwLmNgOgoKKipEaXZpbmcgaW50byB6c3dhcC5jJiMzOTtzIENvcmUgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA2MTUtNjYwLiBUaGUgY29udGV4dCBoZXJlLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGxpa2VseSBnb2luZyB0byBkZWFsIHdpdGggdGhlIGhlYXJ0IG9mIHpzd2FwJiMzOTtzIG9wZXJhdGlvbiDigJMgbGlrZWx5IGhvdyBpdCYjMzk7cyAqY2hvb3NpbmcqIHRoZSBwYWdlcyB0byBzd2FwIG91dCwgb3IgbWF5YmUgbWFuYWdpbmcgdGhlIHpwb29sIGl0c2VsZi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7ZCBndWVzcyB3ZSYjMzk7cmUgcGFzdCB0aGUgaW5pdGlhbCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiwgYW5kIG5vdyBhdCB0aGUgbW9yZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGxvb3BzIHRoYXQgbWlnaHQgYmUgZXhwZW5zaXZlLCBvciBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgY29tcHJlc3NlZCBkYXRhIHN0b3JlLCBhbmQgd2hldGhlciBpdCBoYW5kbGVzIG1lbW9yeSBtYW5hZ2VtZW50IGVmZmljaWVudGx5LiBBcmUgd2UgZGVhbGluZyB3aXRoIHBhZ2UgZmF1bHRzIGhlcmUsIG9yIGFyZSB0aGVzZSBwcm9hY3RpdmUgc3dhcHM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBtYWluIGRlY2lzaW9uIHBvaW50cyB3aXRoaW4gdGhpcyBibG9jayBvZiBjb2RlOiBXaGF0IGFyZSB0aGUgY3JpdGVyaWEgdXNlZCBmb3Igc2VsZWN0aW5nIHBhZ2VzPyBJcyB0aGUgZGF0YSBiZWluZyBjb21wcmVzc2VkIGVmZmljaWVudGx5PyBBbmQgaG93IGlzIHRoaXMgc2VsZWN0aW9uIGFmZmVjdGVkIGJ5IGdsb2JhbCBvciBsb2NhbCBtZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBzeXN0ZW0/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgcmVhZC93cml0ZSBvcGVyYXRpb25zIHRvIHRoZSBjb21wcmVzc2VkIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IGV4cGVjdGF0aW9ucywgYW5kIHdoZXJlIHRoZSBjb2RlIGFjdHVhbGx5IHN0YXJ0cyB0byAqZG8qIHNvbWV0aGluZyBjb25jcmV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTU6XHRcbiA2MTY6XHRcdHJldHVybiByZXQ7XG4gNjE3Olx0fVxuIDYxODpcdFxuIDYxOTpcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxuIDYyMDpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4gNjIxOlx0e1xuIDYyMjpcdFx0aW50IHJldCA9IC1FTk9ERVY7XG4gNjIzOlx0XG4gNjI0Olx0XHQvKiBpZiB0aGlzIGlzIGxvYWQtdGltZSAocHJlLWluaXQpIHBhcmFtIHNldHRpbmcsIG9ubHkgc2V0IHBhcmFtLiAqL1xuIDYyNTpcdFx0aWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORylcbiA2MjY6XHRcdFx0cmV0dXJuIHBhcmFtX3NldF9ib29sKHZhbCwga3ApO1xuIDYyNzpcdFxuIDYyODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ6c3dhcF9pbml0X2xvY2spO1xuIDYyOTpcdFx0c3dpdGNoICh6c3dhcF9pbml0X3N0YXRlKSB7XG4gNjMwOlx0XHRjYXNlIFpTV0FQX1VOSU5JVDpcbiA2MzE6XHRcdFx0aWYgKHpzd2FwX3NldHVwKCkpXG4gNjMyOlx0XHRcdFx0YnJlYWs7XG4gNjMzOlx0XHRcdGZhbGx0aHJvdWdoO1xuIDYzNDpcdFx0Y2FzZSBaU1dBUF9JTklUX1NVQ0NFRUQ6XG4gNjM1Olx0XHRcdGlmICghenN3YXBfaGFzX3Bvb2wpXG4gNjM2Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2NhbiYjMzk7dCBlbmFibGUsIG5vIHBvb2wgY29uZmlndXJlZFxcblwmIzM0Oyk7XG4gNjM3Olx0XHRcdGVsc2VcbiA2Mzg6XHRcdFx0XHRyZXQgPSBwYXJhbV9zZXRfYm9vbCh2YWwsIGtwKTtcbiA2Mzk6XHRcdFx0YnJlYWs7XG4gNjQwOlx0XHRjYXNlIFpTV0FQX0lOSVRfRkFJTEVEOlxuIDY0MTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y2FuJiMzOTt0IGVuYWJsZSwgaW5pdGlhbGl6YXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiA2NDI6XHRcdH1cbiA2NDM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6c3dhcF9pbml0X2xvY2spO1xuIDY0NDpcdFxuIDY0NTpcdFx0cmV0dXJuIHJldDtcbiA2NDY6XHR9XG4gNjQ3Olx0XG4gNjQ4Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDY0OTpcdCogbHJ1IGZ1bmN0aW9uc1xuIDY1MDpcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gNjUxOlx0XG4gNjUyOlx0Lyogc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBSQ1UgKi9cbiA2NTM6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjU0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gNjU1Olx0e1xuIDY1NjpcdFx0cmV0dXJuIGVudHJ5LVx1MDAzZW9iamNnID8gb2JqX2Nncm91cF9tZW1jZyhlbnRyeS1cdTAwM2VvYmpjZykgOiBOVUxMO1xuIDY1NzpcdH1cbiA2NTg6XHQjZWxzZVxuIDY1OTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIDY2MDpcdHtcbiA2NjE6XHRcdHJldHVybiBOVUxMO1xuIDY2MjpcdH1cbiA2NjM6XHQjZW5kaWZcbiA2NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgenN3YXBfcG9vbF9jcmVhdGVgIENhbGxzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgenN3YXBfcG9vbF9jcmVhdGVgIHdpdGhpbiB0aGUgYG1tL3pzd2FwLmNgIGZpbGUuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgYW5kIGhvdyB0aGUgenN3YXAgcG9vbCBpbml0aWFsaXphdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaXNuJiMzOTt0IHVzdWFsbHkgc29tZXRoaW5nIEkgaGF2ZSB0byByZXZpc2l0IGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIG9mIHRoZSB6c3dhcCBkZXNpZ24uIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZGVwZW5kZW5jaWVzIGFuZCB3aGVuIHRoZSBwb29sIGlzIGJyb3VnaHQgb25saW5lLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoZXJlIGVsc2UgaXQmIzM5O3MgYWN0dWFsbHkgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGNsYXJpZnkgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfcG9vbF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MjQ1PXN0YXRpYyB2b2lkIGFjb21wX2N0eF9mcmVlKHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHgpXG4tLVxubW0venN3YXAuYy0yNzItXG5tbS96c3dhcC5jOjI3MzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG5tbS96c3dhcC5jLTI3NC17XG4tLVxubW0venN3YXAuYy0zNDUtXG5tbS96c3dhcC5jOjM0NjpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbm1tL3pzd2FwLmMtMzQ3LXtcbi0tXG5tbS96c3dhcC5jLTM2MS1cbm1tL3pzd2FwLmM6MzYyOlx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYy0zNjMtfVxuLS1cbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTU3Mi1cdGlmICghcG9vbClcbm1tL3pzd2FwLmM6NTczOlx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTU3NC1cdGVsc2Uge1xuLS1cbm1tL3pzd2FwLmM9MTc3Mz1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODA0LVxubW0venN3YXAuYzoxODA1Olx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbm1tL3pzd2FwLmMtMTgwNi1cdGlmIChwb29sKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjA5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB6c3dhcF9uZXZlcl9lbmFibGVkYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHpzd2FwX25ldmVyX2VuYWJsZWRgIHBhcmFtZXRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCwgY3J1Y2lhbGx5LCB3aGVyZSBpbiB0aGUga2VybmVsIGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgYSBzeXNjdGwgb3Iga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIsIGdpdmVuIHRoZSBuYW1lLCBzbyB0aGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgdHJhY2luZyB0aGUgaW50ZXJhY3Rpb25zIGFyb3VuZCB0aGF0IHZhcmlhYmxlLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIHRoZSBhc3NpZ25tZW50cy4gVGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGxvZ2ljIGRlcGVuZHMgb24gaXRzIHZhbHVlLiBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24sIG9yIHJ1bnRpbWUgY29uZmlndXJhYmxlPyBJcyBpdCBhIGJvb2xlYW4gb3Igc29tZSBraW5kIG9mIGVudW1lcmF0ZWQgdmFsdWU/IEtub3dpbmcgaG93IHRoZSBjb25maWd1cmF0aW9uIGltcGFjdHMgenN3YXAgYmVoYXZpb3IgaXMgdGhlIGtleS4gSXMgdGhpcyB0byBkaXNhYmxlIG9yIHByZXZlbnQgenN3YXAgZnJvbSAqZXZlciogYmVpbmcgYWN0aXZlPyBPciBwZXJoYXBzIGEgcGFyYW1ldGVyIHRvIGluZmx1ZW5jZSBpbml0aWFsIHNldHVwIGJ1dCBwZXJtaXQgZW5hYmxpbmcgdmlhIG90aGVyIG1lY2hhbmlzbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBwcm92aWRlcyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHpzd2FwIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8ganVtcCB0byBjb25jbHVzaW9ucywgSSBtdXN0IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgZXhwbG9yYXRpb24gd2lsbCBsaWtlbHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBgenN3YXBgIGRyaXZlciBjb2RlLCBwcm9iYWJseSB3aXRoaW4gdGhlIGBtbWAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVjaXNpb25zIGFyZSBtYWRlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBmb3IgYW55IGV4cGxhbmF0aW9uIG9mIHRoZSBwYXJhbWV0ZXIgYW5kIGl0cyBpbnRlbmRlZCB1c2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfbmV2ZXJfZW5hYmxlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmg9MzY9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjM3OmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOC0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaC02Ni1cbmluY2x1ZGUvbGludXgvenN3YXAuaDo2NzpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY4LXtcbi0tXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4MTYtXHQgKi9cbm1tL21lbW9yeS5jOjQ4MTc6XHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL21lbW9yeS5jLTQ4MTgtXHRcdHJldHVybiAwO1xuLS1cbm1tL3NobWVtLmM9MjA0Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMDUyLVx0aWYgKCh2bWYgXHUwMDI2XHUwMDI2IHVubGlrZWx5KHVzZXJmYXVsdGZkX2FybWVkKHZtZi1cdTAwM2V2bWEpKSkgfHxcbm1tL3NobWVtLmM6MjA1MzpcdCAgICAgIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3NobWVtLmMtMjA1NC1cdFx0b3JkZXIgPSAwO1xuLS1cbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI5LVxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG4tLVxubW0venN3YXAuYz0xNTk2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNjA1LVxubW0venN3YXAuYzoxNjA2Olx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3pzd2FwLmMtMTYwNy1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFpzd2FwIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHpzd2FwIHNldHVwLiBJIHNlZSB0aGF0IHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uIGlzIGtleTsgaXQmIzM5O3MgY2FsbGVkIGluIHR3byBzaWduaWZpY2FudCBwbGFjZXM6IGVpdGhlciB3aGVuIGEgdXNlciBzZXRzIHVwIGEgbmV3IGNvbXByZXNzb3IgdmlhIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIG9yIGR1cmluZyBpbml0aWFsIGB6c3dhcF9zZXR1cGAuIFRoZSB0cmlja3kgcGFydCB1c2VkIHRvIGJlIHRoZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDt6c3dhcF9ldmVyX2VuYWJsZWQpYCBjYWxsLCB3aGljaCB3YXMgcHJldmlvdXNseSBvbmx5IGluIGB6c3dhcF9zZXR1cGAuIFRoZSBwcm9ibGVtIEkgc2VlIHdpdGggdGhpcyBpcyB0aGF0IGlmIHRoZSBwb29sIGNyZWF0aW9uIGhhcHBlbnMgKmFmdGVyKiB0aGUgaW5pdGlhbCBzZXR1cOKAlGxldCYjMzk7cyBzYXkgdGhyb3VnaCBhIGxhdGVyIGNvbXByZXNzb3IgY29uZmlndXJhdGlvbuKAlG9yIGlmIGB6c3dhcF9wb29sX2NyZWF0ZWAgc3VjY2VlZHMgaW5kZXBlbmRlbnRseSwgdGhlbiB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgc3RhdGljIGtleSBub3QgYmVpbmcgZW5hYmxlZCB3aGVuIGl0IHNob3VsZCBiZS4KClRoZSBzb2x1dGlvbiBpcyBjbGV2ZXI6IG1vdmUgYHN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKWAgKmludG8qIGB6c3dhcF9wb29sX2NyZWF0ZWAuIFRoaXMgZ3VhcmFudGVlcyB0aGF0ICpldmVyeSogdGltZSBhIHpzd2FwIHBvb2wgaXMgYWN0dWFsbHkgY3JlYXRlZOKAlG5vIG1hdHRlciB0aGUgdHJpZ2dlcuKAlHRoZSBzdGF0aWMga2V5IHdpbGwgYmUgZW5hYmxlZC4gVGhpcyBwcm92aWRlcyBhIG1vcmUgcm9idXN0IGFuZCBwcmVkaWN0YWJsZSB6c3dhcCBiZWhhdmlvciwgZXNwZWNpYWxseSBkdXJpbmcgcnVudGltZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuIEl0JiMzOTtzIGEgbmljZSwgY2xlYW4gd2F5IHRvIGVuc3VyZSB0aGF0IHRoZSB6c3dhcCBmZWF0dXJlIGlzIGNvcnJlY3RseSBhY3RpdmF0ZWQgd2hlbiB0aGUgdW5kZXJseWluZyByZXNvdXJjZXMgYXJlIGFjdHVhbGx5IHJlYWR5LiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX1pTV0FQYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENPTkZJR19aU1dBUGAuIE15IGZpcnN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBmb3IgYFpTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgY29uZmxpY3Qgd2l0aCB0aGlzIG9uZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcbiAgNDM6XHRcdCAgY29tbWFuZCBsaW5lICYjMzk7enN3YXAuZW5hYmxlZD0mIzM5OyBvcHRpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbiAgNDY6XHRcdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuICA0NzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICA0ODpcdFx0ZGVmYXVsdCBuXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXG4gIDUxOlx0XHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxuICA1MjpcdFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyMgoJCQkJCQkJb3V0cHV0OiA5MAoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFpzd2FwOiBBIFdvcnRoeSBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB0aGUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS4gRmlyc3QsIHJlYWNoYWJpbGl0eSBpcyBrZXkuIFRoaXMgY29kZSBkaXZlcyByaWdodCBpbnRvIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0ZXJyaXRvcnkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyIGlzIGFub3RoZXIgc3Ryb25nIHBvaW50LiBEeW5hbWljIGNvbmZpZ3VyYXRpb24gb2YgenN3YXAgdGhyb3VnaCBzeXNmcyBpcyBwcmFjdGljYWxseSBiZWdnaW5nIHRvIGJlIGZ1enplZCwgYW5kIHRoZW4gd2UgaGF2ZSBzdGF0aWMgYnJhbmNoIGZsaXBwaW5nIGFzIHdlbGwuIFRoYXQgYWZmZWN0cyBrZXkgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgYW5kIGB6c3dhcF9sb2FkKClgLgoKR2l2ZW4gdGhhdCByZWFjaGFiaWxpdHkgYW5kIHRoZSBpbXBhY3QsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaGFzIHN0cm9uZyBwb3RlbnRpYWwuIFRoZSB2ZXJkaWN0OiBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBwaW4gZG93biB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW46IGB6c3dhcF9wb29sX2NyZWF0ZWAsIGB6c3dhcF9zZXR1cGAsIGB6c3dhcF9uZXZlcl9lbmFibGVkYCwgYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCwgYHpzd2FwX2xvYWRgLCBhbmQgYHpzd2FwX3N0b3JlYC4gSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhbmQgZGVmaW5pdGlvbnMgZGlyZWN0bHkgaW4gYG1tL3pzd2FwLmNgIHRvIGJlIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgXFwqenN3YXBfcG9vbF9jcmVhdGV8XnN0YXRpYyBpbnQgenN3YXBfc2V0dXB8XmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZHxec3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldHxec3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldHxeYm9vbCB6c3dhcF9zdG9yZXxeaW50IHpzd2FwX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9Nzg9c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XG4tLVxubW0venN3YXAuYy04NS1cbm1tL3pzd2FwLmM6ODY6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcbm1tL3pzd2FwLmMtODctXG4tLVxubW0venN3YXAuYz05MD1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jOjkxOnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxubW0venN3YXAuYy05Mi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XG4tLVxubW0venN3YXAuYz0xMDA9c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYzoxMDE6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTEwMi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XG4tLVxubW0venN3YXAuYz0xMjU9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4tLVxubW0venN3YXAuYy0xMjktXG5tbS96c3dhcC5jOjEzMDpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcbm1tL3pzd2FwLmMtMTMxLXtcbi0tXG5tbS96c3dhcC5jPTI0NT1zdGF0aWMgdm9pZCBhY29tcF9jdHhfZnJlZShzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4KVxuLS1cbm1tL3pzd2FwLmMtMjcyLVxubW0venN3YXAuYzoyNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxubW0venN3YXAuYy0yNzQte1xuLS1cbm1tL3pzd2FwLmM9NTExPXN0YXRpYyBib29sIHpzd2FwX2NoZWNrX2xpbWl0cyh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtNTI5LVxubW0venN3YXAuYzo1MzA6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxubW0venN3YXAuYy01MzEte1xuLS1cbm1tL3pzd2FwLmMtNjE4LVxubW0venN3YXAuYzo2MTk6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG5tbS96c3dhcC5jLTYyMC1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL3pzd2FwLmM9MTQxMD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQ4OS1cbm1tL3pzd2FwLmM6MTQ5MDpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTE0OTEte1xuLS1cbm1tL3pzd2FwLmMtMTU5NS0gKi9cbm1tL3pzd2FwLmM6MTU5NjppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTk3LXtcbi0tXG5tbS96c3dhcC5jPTE3NjQ9c3RhdGljIGludCB6c3dhcF9kZWJ1Z2ZzX2luaXQodm9pZClcbi0tXG5tbS96c3dhcC5jLTE3NzItKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MTc3MzpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG5tbS96c3dhcC5jLTE3NzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NgoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8genN3YXAuIEZpcnN0LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19TV0FQYCBpcyBlbmFibGVkLCBhcyBgWlNXQVBgIGluaGVyZW50bHkgZGVwZW5kcyBvbiBpdC4gVGhlbiwgb2YgY291cnNlLCBgQ09ORklHX1pTV0FQYCBpdHNlbGYgbXVzdCBiZSBzZXQuIEkmIzM5O2xsIG5lZWQgdG8gcnVuIGEgY2hlY2sgdG8gZW5zdXJlIG5vIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBgWlNXQVBgIGFsc28gcmVsaWVzIG9uIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBTbywgSSYjMzk7bGwgYWRkIHRob3NlIHRvIG15IGVuYWJsZW1lbnQgbGlzdC4gTXkgRW5hYmxlQ29uZmlncyBhcmU6IGBbJiMzNDtTV0FQJiMzNDssICYjMzQ7WlNXQVAmIzM0O11gLgoKTm93LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhlIHpzd2FwIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZDogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3NldHVwYCwgYHpzd2FwX25ldmVyX2VuYWJsZWRgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX2xvYWRgLgoKRmluYWxseSwgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfcG9vbF9jcmVhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfc2V0dXAmIzM0OywKICAgICYjMzQ7enN3YXBfbmV2ZXJfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF9lbmFibGVkX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIG1vdmluZyB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgenN3YXBfZXZlcl9lbmFibGVkIHN0YXRpYyBrZXkgZnJvbSB6c3dhcF9zZXR1cCgpIGludG8genN3YXBfcG9vbF9jcmVhdGUoKS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6c3dhcF9uZXZlcl9lbmFibGVkKCkgYW5kIGFmZmVjdHMgcnVudGltZSBjaGVja3MgZHVyaW5nIHN3YXAgb3BlcmF0aW9ucyBhbmQgc3lzZnMgcGFyYW1ldGVyIHJlY29uZmlndXJhdGlvbi4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3Bvb2xfY3JlYXRlJiMzNDssCiAgICAmIzM0O3pzd2FwX3NldHVwJiMzNDssCiAgICAmIzM0O3pzd2FwX25ldmVyX2VuYWJsZWQmIzM0OywKICAgICYjMzQ7enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQmIzM0OywKICAgICYjMzQ7enN3YXBfZW5hYmxlZF9wYXJhbV9zZXQmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCBtb3ZpbmcgdGhlIGFjdGl2YXRpb24gb2YgdGhlIHpzd2FwX2V2ZXJfZW5hYmxlZCBzdGF0aWMga2V5IGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCkuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenN3YXBfbmV2ZXJfZW5hYmxlZCgpIGFuZCBhZmZlY3RzIHJ1bnRpbWUgY2hlY2tzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMgYW5kIHN5c2ZzIHBhcmFtZXRlciByZWNvbmZpZ3VyYXRpb24uIEl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpIGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCksIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpYyBicmFuY2ggdHJhY2tpbmcgd2hldGhlciB6c3dhcCB3YXMgZXZlciBlbmFibGVkIGlzIGFjdGl2YXRlZCB3aGVuZXZlciBhIHpzd2FwIHBvb2wgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGUuZy4sIHdoZW4gZHluYW1pY2FsbHkgY29uZmlndXJlZCB2aWEgc3lzZnMvcGFyYW1ldGVycykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Nzk1YWRjOTVmMjFhYmMwYzM2MTRmMWQ3ZTM3YzM5Yjc4MzE4ZWViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMzo0Mjo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzI0LDYgJiM0MzszMjQsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAomIzQzOwlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7CiYjNDM7CiAJcmV0dXJuIHBvb2w7CiAKIHJlZl9mYWlsOgpAQCAtMTgwNSw3ICYjNDM7MTgwNyw2IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCkKIAkJcHJfaW5mbygmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXG4mIzM0OywgcG9vbC0mZ3Q7dGZtX25hbWUpOwogCQlsaXN0X2FkZCgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7Ci0JCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTsKIAl9IGVsc2UgewogCQlwcl9lcnIoJiMzNDtwb29sIGNyZWF0aW9uIGZhaWxlZFxuJiMzNDspOwogCQl6c3dhcF9lbmFibGVkID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUxCgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2gqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIGEgcGF0Y2ggd2l0aGluIHRoZSBgbW0venN3YXAuY2AgZmlsZS4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAqaW50ZXJlc3RpbmcqLiBac3dhcCwgYXMgYSBjb21wcmVzc2VkIHN3YXAgY2FjaGUsIGNhbiBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGFuZCBhbnkgbW9kaWZpY2F0aW9uIHRoZXJlIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBnZXQgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggaXRzZWxmLgoKSSYjMzk7bGwgc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgb2YgYG1tL3pzd2FwLmNgIGRpcmVjdGx5LiBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZTsgdGhlIGxpbmUgbnVtYmVycyBhcmUgYSBnb29kIHN0YXJ0LCBidXQgdGhleSBkb24mIzM5O3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIEkmIzM5O2xsIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIG15IHByZWZlcnJlZCBmaWxlIHJlYWRpbmcgdG9vbCAobGlrZWx5IHNvbWV0aGluZyBsaWtlIGBsZXNzYCBvciBhbiBlZGl0b3Igd2l0aCBnb29kIHNlYXJjaCBjYXBhYmlsaXRpZXMpIHRvIGxvb2sgYXJvdW5kIGxpbmVzIDMyNCBhbmQgMTgwNSBpbiBgbW0venN3YXAuY2AuIEkgbmVlZCBjb250ZXh0ISBXaGF0IGZ1bmN0aW9ucyBhcmUgYXJvdW5kIHRob3NlIGxpbmVzPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gV2hhdCYjMzk7cyB0aGUgZ2VuZXJhbCBmbG93IG9mIGV4ZWN1dGlvbiBpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGU/IElzIHRoaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLCBvciBhIG1vcmUgcGVyaXBoZXJhbCBmdW5jdGlvbj8gVGhhdCBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIGl0cyBsaWtlbHkgaW50ZW50LiBUaGUgZ29hbCBhdCB0aGlzIHN0YWdlIGlzIHRvIGlkZW50aWZ5IHdoZXJlIHRoZSBjaGFuZ2UgaXMgYmVpbmcgbWFkZSBhbmQgd2h5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxuIDMxMTpcdFx0ICogd2UgZG9uJiMzOTt0IHJlZ2lzdGVyIGEgaG90dW5wbHVnIGNhbGxiYWNrLlxuIDMxMjpcdFx0ICovXG4gMzEzOlx0XHRpZiAocmV0KVxuIDMxNDpcdFx0XHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xuIDMxNTpcdFxuIDMxNjpcdFx0LyogYmVpbmcgdGhlIGN1cnJlbnQgcG9vbCB0YWtlcyAxIHJlZjsgdGhpcyBmdW5jIGV4cGVjdHMgdGhlXG4gMzE3Olx0XHQgKiBjYWxsZXIgdG8gYWx3YXlzIGFkZCB0aGUgbmV3IHBvb2wgYXMgdGhlIGN1cnJlbnQgcG9vbFxuIDMxODpcdFx0ICovXG4gMzE5Olx0XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYsIF9fenN3YXBfcG9vbF9lbXB0eSxcbiAzMjA6XHRcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gMzIxOlx0XHRpZiAocmV0KVxuIDMyMjpcdFx0XHRnb3RvIHJlZl9mYWlsO1xuIDMyMzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiAzMjQ6XHRcbiAzMjU6XHRcdHpzd2FwX3Bvb2xfZGVidWcoXCYjMzQ7Y3JlYXRlZFwmIzM0OywgcG9vbCk7XG4gMzI2Olx0XG4gMzI3Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIDMyODpcdFxuIDMyOTpcdFx0cmV0dXJuIHBvb2w7XG4gMzMwOlx0XG4gMzMxOlx0cmVmX2ZhaWw6XG4gMzMyOlx0XHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gMzMzOlx0XG4gMzM0Olx0Y3B1aHBfYWRkX2ZhaWw6XG4gMzM1Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuIDMzNjpcdFx0XHRhY29tcF9jdHhfZnJlZShwZXJfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCwgY3B1KSk7XG4gMzM3Olx0ZXJyb3I6XG4gMzM4Olx0XHRpZiAocG9vbC1cdTAwM2VhY29tcF9jdHgpXG4gMzM5Olx0XHRcdGZyZWVfcGVyY3B1KHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiAzNDA6XHRcdGlmIChwb29sLVx1MDAzZXpzX3Bvb2wpXG4gMzQxOlx0XHRcdHpzX2Rlc3Ryb3lfcG9vbChwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIDM0MjpcdFx0a2ZyZWUocG9vbCk7XG4gMzQzOlx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0aWYgKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApIFx1MDAyNlx1MDAyNlxuIDM0OTpcdFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3OTA6XHRcbjE3OTE6XHRcdHNocmlua193cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDt6c3dhcC1zaHJpbmtcJiMzNDssXG4xNzkyOlx0XHRcdFx0V1FfVU5CT1VORHxXUV9NRU1fUkVDTEFJTSwgMSk7XG4xNzkzOlx0XHRpZiAoIXNocmlua193cSlcbjE3OTQ6XHRcdFx0Z290byBzaHJpbmtfd3FfZmFpbDtcbjE3OTU6XHRcbjE3OTY6XHRcdHpzd2FwX3Nocmlua2VyID0genN3YXBfYWxsb2Nfc2hyaW5rZXIoKTtcbjE3OTc6XHRcdGlmICghenN3YXBfc2hyaW5rZXIpXG4xNzk4Olx0XHRcdGdvdG8gc2hyaW5rZXJfZmFpbDtcbjE3OTk6XHRcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCB6c3dhcF9zaHJpbmtlcikpXG4xODAwOlx0XHRcdGdvdG8gbHJ1X2ZhaWw7XG4xODAxOlx0XHRzaHJpbmtlcl9yZWdpc3Rlcih6c3dhcF9zaHJpbmtlcik7XG4xODAyOlx0XG4xODAzOlx0XHRJTklUX1dPUksoXHUwMDI2enN3YXBfc2hyaW5rX3dvcmssIHNocmlua193b3JrZXIpO1xuMTgwNDpcdFxuMTgwNTpcdFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbjE4MDY6XHRcdGlmIChwb29sKSB7XG4xODA3Olx0XHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cJiMzNDssIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuMTgwODpcdFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbjE4MDk6XHRcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuMTgxMDpcdFx0fSBlbHNlIHtcbjE4MTE6XHRcdFx0cHJfZXJyKFwmIzM0O3Bvb2wgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbjE4MTI6XHRcdFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xuMTgxMzpcdFx0fVxuMTgxNDpcdFxuMTgxNTpcdFx0aWYgKHpzd2FwX2RlYnVnZnNfaW5pdCgpKVxuMTgxNjpcdFx0XHRwcl93YXJuKFwmIzM0O2RlYnVnZnMgaW5pdGlhbGl6YXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbjE4MTc6XHRcdHpzd2FwX2luaXRfc3RhdGUgPSBaU1dBUF9JTklUX1NVQ0NFRUQ7XG4xODE4Olx0XHRyZXR1cm4gMDtcbjE4MTk6XHRcbjE4MjA6XHRscnVfZmFpbDpcbjE4MjE6XHRcdHNocmlua2VyX2ZyZWUoenN3YXBfc2hyaW5rZXIpO1xuMTgyMjpcdHNocmlua2VyX2ZhaWw6XG4xODIzOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShzaHJpbmtfd3EpO1xuMTgyNDpcdHNocmlua193cV9mYWlsOlxuMTgyNTpcdFx0Y3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFKTtcbjE4MjY6XHRocF9mYWlsOlxuMTgyNzpcdFx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcbjE4Mjg6XHRjYWNoZV9mYWlsOlxuMTgyOTpcdFx0LyogaWYgYnVpbHQtaW4sIHdlIGFyZW4mIzM5O3QgdW5sb2FkZWQgb24gZmFpbHVyZTsgZG9uJiMzOTt0IGFsbG93IHVzZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB6c3dhcCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgenN3YXBfZXZlcl9lbmFibGVkYCBpcyBhY3R1YWxseSBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXQmIzM5O3MgYSBrZXkgdmFyaWFibGUsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgenN3YXAgKG9yIGxhY2sgdGhlcmVvZikgaW4gdGhpcyBjb250ZXh0LiBUaW1lIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgcmVhZCBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9ldmVyX2VuYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYy05MC1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG4tLVxubW0venN3YXAuYz0xMzA9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG5tbS96c3dhcC5jOjEzMjpcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmMtMTMzLX1cbi0tXG5tbS96c3dhcC5jPTI3Mz1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4tLVxubW0venN3YXAuYy0zMjYtXG5tbS96c3dhcC5jOjMyNzpcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTMyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBac3dhcCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgenN3YXAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQsIG9yIG1vcmUgc3BlY2lmaWNhbGx5LCB3aGVyZSB0aGUgZGVjaXNpb24gdG8gKm5vdCogZW5hYmxlIGl0IGlzIG1hZGUuIE15IGZpcnN0IG1vdmUgaXMgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgcG9pbnRzIGluIHRoZSBjb2RlIHJlbGF0ZWQgdG8genN3YXAuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdW5kZXIgd2hpY2ggY29uZGl0aW9ucyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAgaXMgc2V0IG9yLCBjb252ZXJzZWx5LCB3aGVuIHRoZSB6c3dhcCBwb29sIGlzIGNyZWF0ZWQgYnkgY2FsbHMgdG8gYHpzd2FwX3Bvb2xfY3JlYXRlYC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IHRoZSBzZXR0aW5nIG9mIHRoaXMgdmFyaWFibGUgaW5mbHVlbmNlcyBzdWJzZXF1ZW50IGFjdGlvbnMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBhIGJpdCBvZiBgZ3JlcGAgb3Igc2ltaWxhciwgdG8gZmluZCBhbGwgY2FsbCBzaXRlcywgdGhlbiBqdW1waW5nIGludG8gdGhlIG1vc3QgcmVsZXZhbnQgdG8gdHJhY2sgZG93biB0aGUgaXNzdWUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX25ldmVyX2VuYWJsZWR8enN3YXBfcG9vbF9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTM2PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaDozNzpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzgtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NjI9c3RhdGljIGlubGluZSBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjYtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Njc6c3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgvenN3YXAuaC02OC17XG4tLVxubW0vbWVtb3J5LmM9NDc5NT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODE2LVx0ICovXG5tbS9tZW1vcnkuYzo0ODE3Olx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG5tbS9tZW1vcnkuYy00ODE4LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9zaG1lbS5jPTIwNDM9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL3NobWVtLmMtMjA1Mi1cdGlmICgodm1mIFx1MDAyNlx1MDAyNiB1bmxpa2VseSh1c2VyZmF1bHRmZF9hcm1lZCh2bWYtXHUwMDNldm1hKSkpIHx8XG5tbS9zaG1lbS5jOjIwNTM6XHQgICAgICF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG5tbS9zaG1lbS5jLTIwNTQtXHRcdG9yZGVyID0gMDtcbi0tXG5tbS96c3dhcC5jPTEyNT1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyOS1cbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xuLS1cbm1tL3pzd2FwLmM9MjQ1PXN0YXRpYyB2b2lkIGFjb21wX2N0eF9mcmVlKHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHgpXG4tLVxubW0venN3YXAuYy0yNzItXG5tbS96c3dhcC5jOjI3MzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG5tbS96c3dhcC5jLTI3NC17XG4tLVxubW0venN3YXAuYy0zNDUtXG5tbS96c3dhcC5jOjM0NjpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbm1tL3pzd2FwLmMtMzQ3LXtcbi0tXG5tbS96c3dhcC5jLTM2MS1cbm1tL3pzd2FwLmM6MzYyOlx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYy0zNjMtfVxuLS1cbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTU3Mi1cdGlmICghcG9vbClcbm1tL3pzd2FwLmM6NTczOlx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTU3NC1cdGVsc2Uge1xuLS1cbm1tL3pzd2FwLmM9MTU5Nj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTYwNS1cbm1tL3pzd2FwLmM6MTYwNjpcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG5tbS96c3dhcC5jLTE2MDctXHRcdHJldHVybiAtRU5PRU5UO1xuLS1cbm1tL3pzd2FwLmM9MTc3Mz1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODA0LVxubW0venN3YXAuYzoxODA1Olx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbm1tL3pzd2FwLmMtMTgwNi1cdGlmIChwb29sKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2g6IEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgbW92ZWQgdGhlIGBzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZClgIGNhbGwgZnJvbSBgenN3YXBfc2V0dXAoKWAgdG8gYHpzd2FwX3Bvb2xfY3JlYXRlKClgLiBUaGUgcmF0aW9uYWxlIGlzIHRvIGVuc3VyZSB0aGUgc3RhdGljIGtleSBpcyBlbmFibGVkIHdoZW5ldmVyICphbnkqIHpzd2FwIHBvb2wgaXMgY3JlYXRlZCwgYWRkcmVzc2luZyBzY2VuYXJpb3Mgd2hlcmUgenN3YXAgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgZGVsYXllZCBvciB0cmlnZ2VyZWQgZHluYW1pY2FsbHkuIE1ha2VzIHNlbnNlLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2l0aCB0aGlzIG1vdmU/IFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrcy4gTm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgbm8gY2hhbmdlcyB0byBzdHJ1Y3QgZmllbGQgaW5pdGlhbGl6YXRpb24sIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBzdGF0aWMgYnJhbmNoIGVuYWJsZW1lbnQgaXMgcHVyZWx5IGEgYm9vbGVhbiBmbGFnLCBzbyBpdCYjMzk7cyBhIGp1bXAgdGFibGUgbW9kaWZpY2F0aW9uLgoKR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRob3NlIGtpbmRzIG9mIHByb2JsZW1zLiBUaGlzIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCB0aGUgKnNldHRpbmcqIG9mIGEgYm9vbGVhbiB0aGF0IGNvbnRyb2xzIGEganVtcC4gU3RhbmRhcmQgS0FTQU4gY292ZXJhZ2UgYW5kIGJ1ZyBkZXRlY3Rpb24gdG9vbHMgc2hvdWxkIGhhbmRsZSB0aGF0LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKVG8gc29saWRpZnkgdGhlIHJlYXNvbmluZywgbGV0JiMzOTtzIGNsYXJpZnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIEtBU0FOIGNhdGNoZXMgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZ2VhcmVkIHRvd2FyZHMgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IGRhdGEgYnVmZmVycywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLCBhbmQgaXQmIzM5O3Mgc2ltcGx5IGVuYWJsaW5nIGEgc3RhdGljIGJyYW5jaCBiYXNlZCBvbiB0aGUgc3VjY2VzcyBvZiBwb29sIGNyZWF0aW9uLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpBbHJpZ2h0LCB0aW1lIHRvIHRyaWdnZXIgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBzdGF0aWMga2V5IC8gYnJhbmNoIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBzdGF0aWMga2V5IC8gYnJhbmNoIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0My40NjkyOTUzMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzExNDQ4OTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9zZXR1cFwiLFxuICAgIFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0My40NjkzMDI4NzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMzc3NTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMzo0Mjo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMzI0LDYgKzMyNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4gXFxuIFxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImNyZWF0ZWRcXFwiLCBwb29sKTtcXG4gXFxuK1xcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbitcXG4gXFx0cmV0dXJuIHBvb2w7XFxuIFxcbiByZWZfZmFpbDpcXG5AQCAtMTgwNSw3ICsxODA3LDYgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbiBcXHRcXHRwcl9pbmZvKFxcXCJsb2FkZWQgdXNpbmcgcG9vbCAlc1xcXFxuXFxcIiwgcG9vbC1cXHUwMDNldGZtX25hbWUpO1xcbiBcXHRcXHRsaXN0X2FkZChcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFx0XFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xcbi1cXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJwb29sIGNyZWF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDI6NDQuMDc2NTcxMTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNzg4ODk1OTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9zZXR1cFwiLFxuICAgIFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzI0LDYgKzMyNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJjcmVhdGVkXCIsIHBvb2wpO1xuIFxuK1x0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbitcbiBcdHJldHVybiBwb29sO1xuIFxuIHJlZl9mYWlsOlxuQEAgLTE4MDUsNyArMTgwNyw2IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuLVx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfZXJyKFwicG9vbCBjcmVhdGlvbiBmYWlsZWRcXG5cIik7XG4gXHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjQ0LjA3NjU3NDAwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODAyMzIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcGF0Y2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBtbS96c3dhcC5jYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyBjZW50ZXJlZCBhcm91bmQgYHpzd2FwX2V2ZXJfZW5hYmxlZGAuXG5cbkxvb2tpbmcgYXQgdGhlIGRldGFpbHMsIGl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO2Agd2l0aGluIHRoZSBgenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilgIGZ1bmN0aW9uLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IHRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IFpzd2FwJ3MgaW5pdGlhbGl6YXRpb24gaW50ZXJhY3RzIHdpdGggc3RhdGljIGJyYW5jaGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO2AgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBgenN3YXBfc2V0dXAodm9pZClgIGZ1bmN0aW9uLiBUaGlzIHBvaW50cyB0b3dhcmQgYSBjaGFuZ2UgaW4gKndoZW4qIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBgbW0venN3YXAuY2AgaXRzZWxmLiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjYWxsIHRvIHF1aWNrbHkgc2NhbiB0aGUgZmlsZSwgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIHNlZSB3aGF0IHRoZSBpbnRlbnRpb25zIG9mIHRoZXNlIHNlZW1pbmdseSBjb250cmFyeSBhbHRlcmF0aW9ucyBhcmUuIEFyZSB0aGV5IGludGVuZGVkIHRvIGRlbGF5IGZlYXR1cmUgZW5hYmxlbWVudCB1bnRpbCByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciwgcGVyaGFwcywgZW5zdXJlIHRoYXQgYSB1c2VyIGNhbiB0dXJuIHRoZSBmZWF0dXJlIG9mZiBzYWZlbHkgYWZ0ZXIgYm9vdGluZywgb3IgaXMgdGhlcmUgYSBiaWdnZXIgY2hhbmdlIGhhcHBlbmluZyB0byB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmU/IEkgZXhwZWN0IGEgZnVsbGVyIHBpY3R1cmUgd2lsbCBhcHBlYXIgb25jZSBJIGdldCBtb3JlIGNvbnRleHQgZnJvbSB0aGUgY29kZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0Ny45NTY4MDk2OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzODMyNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2V2ZXJfZW5hYmxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9ODY9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4tLVxcbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjg5OnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTkwLXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG5tbS96c3dhcC5jOjEzMjpcXHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmMtMTMzLX1cXG4tLVxcbm1tL3pzd2FwLmM9MjczPXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4tLVxcbm1tL3pzd2FwLmMtMzI2LVxcbm1tL3pzd2FwLmM6MzI3OlxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmMtMzI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0OC4wNjA2NDk2ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI2NDE2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgWnN3YXAgUG9vbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hvKiBjYWxscyBgenN3YXBfcG9vbF9jcmVhdGVgLCAqd2hlbiogaXQncyBjYWxsZWQsIGFuZCAqd2h5Ki4gSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0ZWQgZmxhZ3MgYW5kIHZhcmlhYmxlczogYHpzd2FwX2V2ZXJfZW5hYmxlZGAsIGFuZCBgenN3YXBfbmV2ZXJfZW5hYmxlZGAuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlc2UgZmxhZ3Mgd2lsbCBjb250cm9sIHRoZSBzdGF0ZSBvZiB0aGUgZmVhdHVyZTogd2hlbiBpdCBjYW4gYmUgY3JlYXRlZCBhbmQgaWYgaXQgaGFzIGJlZW4uIEhvdyBkb2VzIHRoZSBrZXJuZWwgZGVjaWRlIHdoZXRoZXIgdG8gaW5pdGlhbGl6ZSBhIFpzd2FwIHBvb2wgaW4gdGhlIGZpcnN0IHBsYWNlPyBBbmQgZG9lcyB0aGlzIGRlY2lzaW9uIGRlcGVuZCBvbiBib290IHBhcmFtZXRlcnMsIHN5c2ZzIHNldHRpbmdzLCBvciBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbnRyb2wgZmxvdy4gS25vd2luZyB0aGUgZW50cnkgcG9pbnRzIHdpbGwgcHJvdmlkZSBhIHdheSB0byBleGFtaW5lIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQvZGlzYWJsZWQgb3IgY29uZmlndXJlZC4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBvZiB0aGVzZSBmbGFncyB0aHJvdWdoIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBydW50aW1lIHN0YXRlIGFmZmVjdHMgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjUwLjU4NzA2OTgzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogenN3YXAuYyAtIHpzd2FwIGRyaXZlciBmaWxlXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogenN3YXAgaXMgYSBjYWNoZSB0aGF0IHRha2VzIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzXFxuICAgNjpcXHQgKiBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG8gY29tcHJlc3MgYW5kIHN0b3JlIHRoZW0gaW4gYVxcbiAgIDc6XFx0ICogUkFNLWJhc2VkIG1lbW9yeSBwb29sLiAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvblxcbiAgIDg6XFx0ICogdGhlIHN3YXAgZGV2aWNlIGFuZCwgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXJcXG4gICA5OlxcdCAqIHRoYW4gcmVhZGluZyBmcm9tIHRoZSBzd2FwIGRldmljZSwgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDEwOlxcdCAqXFxuICAxMTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTIgIFNldGggSmVubmluZ3MgXFx1MDAzY3NqZW5uaW5nQGxpbnV4LnZuZXQuaWJtLmNvbVxcdTAwM2VcXG4gIDEyOlxcdCovXFxuICAxMzpcXHRcXG4gIDE0OlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZ2htZW0uaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY3J5cHRvLmhcXHUwMDNlXFxuICAyNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb29sLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2Fjb21wcmVzcy5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2NyeXB0by9zY2F0dGVyd2Fsay5oXFx1MDAzZVxcbiAgMzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzd2FwLmhcXHUwMDNlXFxuICAzMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1fdHlwZXMuaFxcdTAwM2VcXG4gIDMyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcXHUwMDNlXFxuICAzMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbiAgMzU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gIDM2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gIDM3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiAgMzg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcXHUwMDNlXFxuICAzOTpcXHRcXG4gIDQwOlxcdCNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuICA0MTpcXHQjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gIDQyOlxcdFxcbiAgNDM6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgNDQ6XFx0KiBzdGF0aXN0aWNzXFxuICA0NTpcXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiAgNDY6XFx0LyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxuICA0NzpcXHRhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxuICA0ODpcXHQvKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG4gIDQ5OlxcdHN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdC8qXFxuICA1MjpcXHQgKiBUaGUgc3RhdGlzdGljcyBiZWxvdyBhcmUgbm90IHByb3RlY3RlZCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGZvclxcbiAgNTM6XFx0ICogcGVyZm9ybWFuY2UgcmVhc29ucyBzbyB0aGV5IG1heSBub3QgYmUgYSAxMDAlIGFjY3VyYXRlLiAgSG93ZXZlcixcXG4gIDU0OlxcdCAqIHRoZXkgZG8gcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gb24gcm91Z2hseSBob3cgbWFueSB0aW1lcyBhXFxuICA1NTpcXHQgKiBjZXJ0YWluIGV2ZW50IGlzIG9jY3VycmluZy5cXG4gIDU2OlxcdCovXFxuICA1NzpcXHRcXG4gIDU4OlxcdC8qIFBvb2wgbGltaXQgd2FzIGhpdCAoc2VlIHpzd2FwX21heF9wb29sX3BlcmNlbnQpICovXFxuICA1OTpcXHRzdGF0aWMgdTY0IHpzd2FwX3Bvb2xfbGltaXRfaGl0O1xcbiAgNjA6XFx0LyogUGFnZXMgd3JpdHRlbiBiYWNrIHdoZW4gcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xcbiAgNjE6XFx0c3RhdGljIHU2NCB6c3dhcF93cml0dGVuX2JhY2tfcGFnZXM7XFxuICA2MjpcXHQvKiBTdG9yZSBmYWlsZWQgZHVlIHRvIGEgcmVjbGFpbSBmYWlsdXJlIGFmdGVyIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cXG4gIDYzOlxcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X3JlY2xhaW1fZmFpbDtcXG4gIDY0OlxcdC8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gY29tcHJlc3Npb24gYWxnb3JpdGhtIGZhaWx1cmUgKi9cXG4gIDY1OlxcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX2ZhaWw7XFxuICA2NjpcXHQvKiBDb21wcmVzc2VkIHBhZ2Ugd2FzIHRvbyBiaWcgZm9yIHRoZSBhbGxvY2F0b3IgdG8gKG9wdGltYWxseSkgc3RvcmUgKi9cXG4gIDY3OlxcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX3Bvb3I7XFxuICA2ODpcXHQvKiBMb2FkIG9yIHdyaXRlYmFjayBmYWlsZWQgZHVlIHRvIGRlY29tcHJlc3Npb24gZmFpbHVyZSAqL1xcbiAgNjk6XFx0c3RhdGljIHU2NCB6c3dhcF9kZWNvbXByZXNzX2ZhaWw7XFxuICA3MDpcXHQvKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB1bmRlcmx5aW5nIGFsbG9jYXRvciBjb3VsZCBub3QgZ2V0IG1lbW9yeSAqL1xcbiAgNzE6XFx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfYWxsb2NfZmFpbDtcXG4gIDcyOlxcdC8qIFN0b3JlIGZhaWxlZCBiZWNhdXNlIHRoZSBlbnRyeSBtZXRhZGF0YSBjb3VsZCBub3QgYmUgYWxsb2NhdGVkIChyYXJlKSAqL1xcbiAgNzM6XFx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWw7XFxuICA3NDpcXHRcXG4gIDc1OlxcdC8qIFNocmlua2VyIHdvcmsgcXVldWUgKi9cXG4gIDc2OlxcdHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2hyaW5rX3dxO1xcbiAgNzc6XFx0LyogUG9vbCBsaW1pdCB3YXMgaGl0LCB3ZSBuZWVkIHRvIGNhbG0gZG93biAqL1xcbiAgNzg6XFx0c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XFxuICA3OTpcXHRcXG4gIDgwOlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gIDgxOlxcdCogdHVuYWJsZXNcXG4gIDgyOlxcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuICA4MzpcXHRcXG4gIDg0OlxcdCNkZWZpbmUgWlNXQVBfUEFSQU1fVU5TRVQgXFxcIlxcXCJcXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4gIDg3OlxcdFxcbiAgODg6XFx0LyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG4gIDg5OlxcdHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG4gIDkwOlxcdHN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG4gIDkxOlxcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbiAgOTI6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG4gIDkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9lbmFibGVkX3BhcmFtX29wcyA9IHtcXG4gIDk0OlxcdFxcdC5zZXQgPVxcdFxcdHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0LFxcbiAgOTU6XFx0XFx0LmdldCA9XFx0XFx0cGFyYW1fZ2V0X2Jvb2wsXFxuICA5NjpcXHR9O1xcbiAgOTc6XFx0bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFxcdTAwMjZ6c3dhcF9lbmFibGVkX3BhcmFtX29wcywgXFx1MDAyNnpzd2FwX2VuYWJsZWQsIDA2NDQpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHQvKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG4gMTAwOlxcdHN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDI6NTAuNTg3NDE1NzQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2MDIxMjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1tL3pzd2FwLmNgIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGFyZWFzIHRoYXQgZHJpdmUgenN3YXAncyBiZWhhdmlvciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93cy5cblxuKipac3dhcCBEZWVwIERpdmU6IEluaXRpYWxpemF0aW9uIGFuZCBDb250cm9sKipcblxuUmlnaHQsIHNvIEkgd2FudCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB6c3dhcCBwb29sIGlzIGNyZWF0ZWQgYW5kIG1hbmFnZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgYHpzd2FwX3Bvb2xfY3JlYXRlYCBjYWxscyDigJMgd2hvJ3MgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHRoaXMgdGhpbmcgdG8gbGlmZT8gV2hhdCBhcmUgdGhlIHBhcmFtZXRlcnMgaW52b2x2ZWQsIGFuZCBob3cgZG8gdGhleSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzPyBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgY29udGVudGlvbiBwb2ludHMgd2l0aGluIHRoZSBwb29sJ3MgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMuXG5cbk5leHQsIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGVuYWJsaW5nIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBzY3J1dGluaXplIGB6c3dhcF9lbmFibGVkX3BhcmFtX3NldGAgdG8gcGlucG9pbnQgaG93IHpzd2FwJ3MgYmVoYXZpb3IgaXMgY29uZmlndXJlZCBhdCBydW50aW1lLiBBcmUgdGhlcmUgdHVuYWJsZSBwYXJhbWV0ZXJzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBzZXR0aW5ncyBvbiBzd2FwIGJlaGF2aW9yIGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZT8gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGNvbnNpZGVyYXRpb25zIGhlcmU/XG5cbkZpbmFsbHksIHRoZSBgenN3YXBfc2V0dXBgIGZ1bmN0aW9uIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24uIFRoaXMgaXMgcHJvYmFibHkgdGhlIG1hc3RlciBzd2l0Y2gsIHRoZSBwcmltYXJ5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgenN3YXAgc3lzdGVtLiBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgcGljdHVyZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGluY2x1ZGluZyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBXaGVyZSBpcyBpdCBjYWxsZWQ/IFdoYXQgcHJlcmVxdWlzaXRlcyBtdXN0IGJlIHNhdGlzZmllZCBiZWZvcmUgaXQgY2FuIHJ1bj8gV2hhdCBkb2VzIGl0IHNldCB1cD8gQW55IG5vbi1vYnZpb3VzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIE1NIHN1YnN5c3RlbXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcHJvYmxlbXMgcmVnYXJkaW5nIE5VTUEsIGFuZCBob3cgenN3YXAgaW50ZXJmYWNlcyB3aXRoIHRoYXQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjUzLjM0NzYzMjk0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHRhY29tcF9jdHgtXFx1MDAzZWJ1ZmZlciA9IE5VTEw7XFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4gMjc0OlxcdHtcXG4gMjc1OlxcdFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiAyNzY6XFx0XFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFxcXDAgKi9cXG4gMjc3OlxcdFxcdGludCByZXQsIGNwdTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcXG4gMjgwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRwb29sID0ga3phbGxvY19vYmooKnBvb2wpO1xcbiAyODM6XFx0XFx0aWYgKCFwb29sKVxcbiAyODQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdC8qIHVuaXF1ZSBuYW1lIGZvciBlYWNoIHBvb2wgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IHpzbWFsbG9jICovXFxuIDI4NzpcXHRcXHRzbnByaW50ZihuYW1lLCAzOCwgXFxcInpzd2FwJXhcXFwiLCBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2enN3YXBfcG9vbHNfY291bnQpKTtcXG4gMjg4OlxcdFxcdHBvb2wtXFx1MDAzZXpzX3Bvb2wgPSB6c19jcmVhdGVfcG9vbChuYW1lKTtcXG4gMjg5OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlenNfcG9vbClcXG4gMjkwOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdHN0cnNjcHkocG9vbC1cXHUwMDNldGZtX25hbWUsIGNvbXByZXNzb3IsIHNpemVvZihwb29sLVxcdTAwM2V0Zm1fbmFtZSkpO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHQvKiBNYW55IHRoaW5ncyByZWx5IG9uIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uLiAqL1xcbiAyOTU6XFx0XFx0cG9vbC1cXHUwMDNlYWNvbXBfY3R4ID0gYWxsb2NfcGVyY3B1X2dmcCgqcG9vbC1cXHUwMDNlYWNvbXBfY3R4LFxcbiAyOTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiAyOTc6XFx0XFx0aWYgKCFwb29sLVxcdTAwM2VhY29tcF9jdHgpIHtcXG4gMjk4OlxcdFxcdFxcdHByX2VycihcXFwicGVyY3B1IGFsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuIDI5OTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiAzMDA6XFx0XFx0fVxcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHQvKlxcbiAzMDM6XFx0XFx0ICogVGhpcyBpcyBzZXJpYWxpemVkIGFnYWluc3QgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gSGVuY2UsIGNvcmVzXFxuIDMwNDpcXHRcXHQgKiBjYW5ub3QgYmUgb2ZmbGluZWQgdW50aWwgdGhpcyBmaW5pc2hlcy5cXG4gMzA1OlxcdFxcdCAqL1xcbiAzMDY6XFx0XFx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwb29sLVxcdTAwM2Vub2RlKTtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0LypcXG4gMzEwOlxcdFxcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxcbiAzMTE6XFx0XFx0ICogd2UgZG9uJ3QgcmVnaXN0ZXIgYSBob3R1bnBsdWcgY2FsbGJhY2suXFxuIDMxMjpcXHRcXHQgKi9cXG4gMzEzOlxcdFxcdGlmIChyZXQpXFxuIDMxNDpcXHRcXHRcXHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHQvKiBiZWluZyB0aGUgY3VycmVudCBwb29sIHRha2VzIDEgcmVmOyB0aGlzIGZ1bmMgZXhwZWN0cyB0aGVcXG4gMzE3OlxcdFxcdCAqIGNhbGxlciB0byBhbHdheXMgYWRkIHRoZSBuZXcgcG9vbCBhcyB0aGUgY3VycmVudCBwb29sXFxuIDMxODpcXHRcXHQgKi9cXG4gMzE5OlxcdFxcdHJldCA9IHBlcmNwdV9yZWZfaW5pdChcXHUwMDI2cG9vbC1cXHUwMDNlcmVmLCBfX3pzd2FwX3Bvb2xfZW1wdHksXFxuIDMyMDpcXHRcXHRcXHRcXHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XFxuIDMyMTpcXHRcXHRpZiAocmV0KVxcbiAzMjI6XFx0XFx0XFx0Z290byByZWZfZmFpbDtcXG4gMzIzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0KTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiY3JlYXRlZFxcXCIsIHBvb2wpO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG4gMzI4OlxcdFxcbiAzMjk6XFx0XFx0cmV0dXJuIHBvb2w7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdHJlZl9mYWlsOlxcbiAzMzI6XFx0XFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcXHUwMDI2cG9vbC1cXHUwMDNlbm9kZSk7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNwdWhwX2FkZF9mYWlsOlxcbiAzMzU6XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcXG4gMzM2OlxcdFxcdFxcdGFjb21wX2N0eF9mcmVlKHBlcl9jcHVfcHRyKHBvb2wtXFx1MDAzZWFjb21wX2N0eCwgY3B1KSk7XFxuIDMzNzpcXHRlcnJvcjpcXG4gMzM4OlxcdFxcdGlmIChwb29sLVxcdTAwM2VhY29tcF9jdHgpXFxuIDMzOTpcXHRcXHRcXHRmcmVlX3BlcmNwdShwb29sLVxcdTAwM2VhY29tcF9jdHgpO1xcbiAzNDA6XFx0XFx0aWYgKHBvb2wtXFx1MDAzZXpzX3Bvb2wpXFxuIDM0MTpcXHRcXHRcXHR6c19kZXN0cm95X3Bvb2wocG9vbC1cXHUwMDNlenNfcG9vbCk7XFxuIDM0MjpcXHRcXHRrZnJlZShwb29sKTtcXG4gMzQzOlxcdFxcdHJldHVybiBOVUxMO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcXG4gMzQ3OlxcdHtcXG4gMzQ4OlxcdFxcdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcXHUwMDI2XFx1MDAyNlxcbiAzNDk6XFx0XFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo1My4zNDc5MTg2OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY2NTcwMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gZGlzYWJsaW5nIHpzd2FwIGF0IGJvb3QgYW5kIHRoZW4gZW5hYmxpbmcgaXQgbGF0ZXIgZHluYW1pY2FsbHksIHRoaW5raW5nIGxpa2UgdGhlIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXIgSSBhbTpcblxuKipBbmFseXppbmcgenN3YXAgSW5pdGlhbGl6YXRpb24gYW5kIER5bmFtaWMgQ29udHJvbCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXIuIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaG93IHRoZSB6c3dhcCBtZWNoYW5pc20gYmVoYXZlcyB3aGVuIGl0cyBpbml0aWFsIHN0YXRlIGlzIHNldCBkdXJpbmcgYm9vdCwgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIGVuYWJsaW5nIGl0IG9uLXRoZS1mbHksIHR5cGljYWxseSB0aHJvdWdoIHN5c2ZzIG9yIGEgbW9kdWxlIHBhcmFtZXRlciBjaGFuZ2UuIEZpcnN0IHVwLCBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJlYWQgdGhyb3VnaCB0aGUgYHpzd2FwX3NldHVwYCBmdW5jdGlvbiDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGZvdW5kYXRpb24gb2YgaG93IHpzd2FwIGdldHMgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBpdCB0YWtlcywgdGhlIHJlc291cmNlcyBpdCBhbGxvY2F0ZXMsIGFuZCBhbnkgZWFybHkgY2hlY2tzIGZvciBlbmFibGVkL2Rpc2FibGVkIHN0YXRlcy4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRvbmUgd2hlbiB6c3dhcCBpcyAqc3VwcG9zZWQqIHRvIGJlIGFjdGl2ZSBmcm9tIHRoZSBiZWdpbm5pbmcsIGFuZCBpZiB0aG9zZSBhY3Rpb25zIGFyZSBza2lwcGVkIG9yIGRlZmVycmVkIHdoZW4gZGlzYWJsZWQuXG5cblRoZW4sIEknbGwgbW92ZSBvbiB0byBgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXRgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBkeW5hbWljIGNvbnRyb2wuIFRoaXMgZnVuY3Rpb24gKm11c3QqIGhhbmRsZSB0aGUgdHJhbnNpdGlvbiBmcm9tIGRpc2FibGVkIHRvIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBsb2dpYzogRG9lcyBpdCBzaW1wbHkgcmUtZXhlY3V0ZSBwYXJ0cyBvZiB0aGUgc2V0dXA/IERvZXMgaXQgY2FsbCBhIHNlcGFyYXRlIGVuYWJsZSBmdW5jdGlvbj8gRG9lcyBpdCBzYWZlbHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBpZiB0aG9zZSB0aGluZ3MgYXJlIG5vdCBwZXJmb3JtZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Q/IEkgd2lsbCB3YW50IHRvIGNoZWNrIGhvdyBpdCBlbnN1cmVzIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgdW5pbml0aWFsaXplZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uLiBJIHdpbGwgcGF5IHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQgc2FmZWx5LlxuXG5VbHRpbWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbmFibGluZyBwYXRoLiBEb2VzIGl0IHBlcmZvcm0gYSBmdWxsIHNldHVwIGVxdWl2YWxlbnQgdG8gYm9vdC10aW1lIGluaXRpYWxpemF0aW9uLCBvciBkb2VzIGl0IGNsZXZlcmx5IHNraXAgb3IgcmUtdXNlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlPyBXaGF0IHJlc291cmNlcyBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmFnZSwgYW5kIGhvdyBpcyBpdCBkb25lIGluIGEgdGhyZWFkLXNhZmUgbWFubmVyPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBvciBwb3RlbnRpYWwgZ290Y2hhcyB0aGF0IGFyaXNlIGZyb20gdGhpcyBkeW5hbWljIGFwcHJvYWNoPyBGaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBmb3IgZG9jdW1lbnRhdGlvbiBjb21tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDI6NTYuNDE0NDkxNTc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3ODA6XFx0XFx0XFx0cHJfZXJyKFxcXCJlbnRyeSBjYWNoZSBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbjE3ODE6XFx0XFx0XFx0Z290byBjYWNoZV9mYWlsO1xcbjE3ODI6XFx0XFx0fVxcbjE3ODM6XFx0XFxuMTc4NDpcXHRcXHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSxcXG4xNzg1OlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJtbS96c3dhcF9wb29sOnByZXBhcmVcXFwiLFxcbjE3ODY6XFx0XFx0XFx0XFx0XFx0ICAgICAgenN3YXBfY3B1X2NvbXBfcHJlcGFyZSxcXG4xNzg3OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbjE3ODg6XFx0XFx0aWYgKHJldClcXG4xNzg5OlxcdFxcdFxcdGdvdG8gaHBfZmFpbDtcXG4xNzkwOlxcdFxcbjE3OTE6XFx0XFx0c2hyaW5rX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJ6c3dhcC1zaHJpbmtcXFwiLFxcbjE3OTI6XFx0XFx0XFx0XFx0V1FfVU5CT1VORHxXUV9NRU1fUkVDTEFJTSwgMSk7XFxuMTc5MzpcXHRcXHRpZiAoIXNocmlua193cSlcXG4xNzk0OlxcdFxcdFxcdGdvdG8gc2hyaW5rX3dxX2ZhaWw7XFxuMTc5NTpcXHRcXG4xNzk2OlxcdFxcdHpzd2FwX3Nocmlua2VyID0genN3YXBfYWxsb2Nfc2hyaW5rZXIoKTtcXG4xNzk3OlxcdFxcdGlmICghenN3YXBfc2hyaW5rZXIpXFxuMTc5ODpcXHRcXHRcXHRnb3RvIHNocmlua2VyX2ZhaWw7XFxuMTc5OTpcXHRcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHpzd2FwX3Nocmlua2VyKSlcXG4xODAwOlxcdFxcdFxcdGdvdG8gbHJ1X2ZhaWw7XFxuMTgwMTpcXHRcXHRzaHJpbmtlcl9yZWdpc3Rlcih6c3dhcF9zaHJpbmtlcik7XFxuMTgwMjpcXHRcXG4xODAzOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2enN3YXBfc2hyaW5rX3dvcmssIHNocmlua193b3JrZXIpO1xcbjE4MDQ6XFx0XFxuMTgwNTpcXHRcXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xcbjE4MDY6XFx0XFx0aWYgKHBvb2wpIHtcXG4xODA3OlxcdFxcdFxcdHByX2luZm8oXFxcImxvYWRlZCB1c2luZyBwb29sICVzXFxcXG5cXFwiLCBwb29sLVxcdTAwM2V0Zm1fbmFtZSk7XFxuMTgwODpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4xODA5OlxcdFxcdFxcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcXG4xODEwOlxcdFxcdH0gZWxzZSB7XFxuMTgxMTpcXHRcXHRcXHRwcl9lcnIoXFxcInBvb2wgY3JlYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4xODEyOlxcdFxcdFxcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcXG4xODEzOlxcdFxcdH1cXG4xODE0OlxcdFxcbjE4MTU6XFx0XFx0aWYgKHpzd2FwX2RlYnVnZnNfaW5pdCgpKVxcbjE4MTY6XFx0XFx0XFx0cHJfd2FybihcXFwiZGVidWdmcyBpbml0aWFsaXphdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbjE4MTc6XFx0XFx0enN3YXBfaW5pdF9zdGF0ZSA9IFpTV0FQX0lOSVRfU1VDQ0VFRDtcXG4xODE4OlxcdFxcdHJldHVybiAwO1xcbjE4MTk6XFx0XFxuMTgyMDpcXHRscnVfZmFpbDpcXG4xODIxOlxcdFxcdHNocmlua2VyX2ZyZWUoenN3YXBfc2hyaW5rZXIpO1xcbjE4MjI6XFx0c2hyaW5rZXJfZmFpbDpcXG4xODIzOlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNocmlua193cSk7XFxuMTgyNDpcXHRzaHJpbmtfd3FfZmFpbDpcXG4xODI1OlxcdFxcdGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSk7XFxuMTgyNjpcXHRocF9mYWlsOlxcbjE4Mjc6XFx0XFx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcXG4xODI4OlxcdGNhY2hlX2ZhaWw6XFxuMTgyOTpcXHRcXHQvKiBpZiBidWlsdC1pbiwgd2UgYXJlbid0IHVubG9hZGVkIG9uIGZhaWx1cmU7IGRvbid0IGFsbG93IHVzZSAqL1xcbjE4MzA6XFx0XFx0enN3YXBfaW5pdF9zdGF0ZSA9IFpTV0FQX0lOSVRfRkFJTEVEO1xcbjE4MzE6XFx0XFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xcbjE4MzI6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTgzMzpcXHR9XFxuMTgzNDpcXHRcXG4xODM1OlxcdHN0YXRpYyBpbnQgX19pbml0IHpzd2FwX2luaXQodm9pZClcXG4xODM2OlxcdHtcXG4xODM3OlxcdFxcdGlmICghenN3YXBfZW5hYmxlZClcXG4xODM4OlxcdFxcdFxcdHJldHVybiAwO1xcbjE4Mzk6XFx0XFx0cmV0dXJuIHpzd2FwX3NldHVwKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjU2LjQxNDYzMjYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTkwNzM3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YC4gV2hlbmV2ZXIgSSBlbmNvdW50ZXIgYSBwYXJhbWV0ZXIgd2l0aCBhIG5hbWUgbGlrZSB0aGF0LCBteSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwYXJzaW5nIGl0LiBJIHNlZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBhc3N1bWUgdGhpcyByZWxhdGVzIHRvIHRoZSBgenN3YXBgIGtlcm5lbCBtb2R1bGUsIHNvIGl0J3MgcHJvYmFibHkgYSBib29sZWFuIHZhbHVlLCBhIGZsYWcuIFwiRW5hYmxlZFwiIGluIHRoZSBuYW1lIGltcGxpZXMgdGhhdCBzZXR0aW5nIGl0IHdpbGwgdG9nZ2xlIHNvbWUgc29ydCBvZiBmdW5jdGlvbmFsaXR5IG9uIG9yIG9mZiB3aXRoaW4gdGhlIHpzd2FwIHN1YnN5c3RlbS4gVGhlIHVzZSBvZiBcInBhcmFtX3NldFwiIHN1Z2dlc3RzIHRoaXMgbWlnaHQgYmUgYSBydW50aW1lIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXIuXG5cbkknbSBub3cgdGhpbmtpbmcgYWJvdXQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gSXMgdGhpcyBwYXJhbWV0ZXIgYSBzaW1wbGUgb24vb2ZmIHN3aXRjaCBmb3IgdGhlIGVudGlyZSB6c3dhcCBmdW5jdGlvbmFsaXR5LCBvciBkb2VzIGl0IGNvbnRyb2wgYSBzcGVjaWZpYyBhc3BlY3QsIHBlcmhhcHMgYSB0aHJlc2hvbGQsIG9yIGJlaGF2aW9yIHdpdGhpbiB0aGUgY29tcHJlc3NlZCBzd2FwIGNhY2hlPyBJZiBJIHdhbnRlZCB0byBpbnZlc3RpZ2F0ZSwgSSdkIHByb2JhYmx5IGxvb2sgYXQgdGhlIGNvbnRleHQgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBpcyB1c2VkLiBJJ2QgY2hlY2sgaG93IGl0J3MgZGVmaW5lZCAoZGF0YSB0eXBlLCBzY29wZSkgYW5kIGhvdyBpdCdzIGFjdHVhbGx5ICp1c2VkKiB0byB1bmRlcnN0YW5kIHdoYXQgaXQgYWN0dWFsbHkgY29udHJvbHMuXG5cbk5vdywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCBJ4oCZbSBtZW50YWxseSBtYXBwaW5nIG91dCBteSBnby10byBhcmVhcyBmb3IgdGhpcy4gSSdtIHRoaW5raW5nIG9mIGNoZWNraW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZXMsIG9yIHVzaW5nIGBncmVwYCBvciBgZ2l0IGdyZXBgIHRvIGZpbmQgYWxsIHVzYWdlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBhIGNvbXBpbGUtdGltZSBvcHRpb24gKGRvdWJ0ZnVsLCBnaXZlbiB0aGUgbmFtZSksIG9yIGlmIGl0J3MgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzIG9yIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBgc3lzY3RsYC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCwgYXMgaXQgY2hhbmdlcyBob3cgSSdkIGFwcHJvYWNoIG1vZGlmeWluZyBvciBkZWJ1Z2dpbmcgdGhlIHN5c3RlbS5cbkknbSBndWVzc2luZyBpdCByZWxhdGVzIHRvIGhvdyBtdWNoIHpzd2FwIGlzIGJlaW5nIHV0aWxpemVkLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgdGhlIHByZXNzdXJlIGJlaW5nIHB1dCBvbiB0aGUgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGNvdWxkIG1ha2UgbXkgc3lzdGVtIG1vcmUgcmVzcG9uc2l2ZSBpZiB0dW5lZCBjb3JyZWN0bHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjU5LjYwNTM3MjQ2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcCAqYWNvbXA7XFxuIDE0MTpcXHRcXHRzdHJ1Y3QgYWNvbXBfcmVxICpyZXE7XFxuIDE0MjpcXHRcXHRzdHJ1Y3QgY3J5cHRvX3dhaXQgd2FpdDtcXG4gMTQzOlxcdFxcdHU4ICpidWZmZXI7XFxuIDE0NDpcXHRcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XFxuIDE0NTpcXHR9O1xcbiAxNDY6XFx0XFxuIDE0NzpcXHQvKlxcbiAxNDg6XFx0ICogVGhlIGxvY2sgb3JkZXJpbmcgaXMgenN3YXBfdHJlZS5sb2NrIC1cXHUwMDNlIHpzd2FwX3Bvb2wubHJ1X2xvY2suXFxuIDE0OTpcXHQgKiBUaGUgb25seSBjYXNlIHdoZXJlIGxydV9sb2NrIGlzIG5vdCBhY3F1aXJlZCB3aGlsZSBob2xkaW5nIHRyZWUubG9jayBpc1xcbiAxNTA6XFx0ICogd2hlbiBhIHpzd2FwX2VudHJ5IGlzIHRha2VuIG9mZiB0aGUgbHJ1IGZvciB3cml0ZWJhY2ssIGluIHRoYXQgY2FzZSBpdFxcbiAxNTE6XFx0ICogbmVlZHMgdG8gYmUgdmVyaWZpZWQgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGluIHRoZSB0cmVlLlxcbiAxNTI6XFx0ICovXFxuIDE1MzpcXHRzdHJ1Y3QgenN3YXBfcG9vbCB7XFxuIDE1NDpcXHRcXHRzdHJ1Y3QgenNfcG9vbCAqenNfcG9vbDtcXG4gMTU1OlxcdFxcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XFxuIDE1NzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDE1ODpcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xcbiAxNTk6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcXG4gMTYwOlxcdFxcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XFxuIDE2MTpcXHR9O1xcbiAxNjI6XFx0XFxuIDE2MzpcXHQvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXFxuIDE2NDpcXHRzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xcbiAxNjU6XFx0XFxuIDE2NjpcXHQvKiBUaGUgbG9jayBwcm90ZWN0cyB6c3dhcF9uZXh0X3NocmluayB1cGRhdGVzLiAqL1xcbiAxNjc6XFx0c3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9zaHJpbmtfbG9jayk7XFxuIDE2ODpcXHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnpzd2FwX25leHRfc2hyaW5rO1xcbiAxNjk6XFx0c3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCB6c3dhcF9zaHJpbmtfd29yaztcXG4gMTcwOlxcdHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHQvKlxcbiAxNzM6XFx0ICogc3RydWN0IHpzd2FwX2VudHJ5XFxuIDE3NDpcXHQgKlxcbiAxNzU6XFx0ICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIG1ldGFkYXRhIGZvciB0cmFja2luZyBhIHNpbmdsZSBjb21wcmVzc2VkXFxuIDE3NjpcXHQgKiBwYWdlIHdpdGhpbiB6c3dhcC5cXG4gMTc3OlxcdCAqXFxuIDE3ODpcXHQgKiBzd3BlbnRyeSAtIGFzc29jaWF0ZWQgc3dhcCBlbnRyeSwgdGhlIG9mZnNldCBpbmRleGVzIGludG8gdGhlIHhhcnJheVxcbiAxNzk6XFx0ICogbGVuZ3RoIC0gdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGEuICBOZWVkZWQgZHVyaW5nXFxuIDE4MDpcXHQgKiAgICAgICAgICBkZWNvbXByZXNzaW9uLlxcbiAxODE6XFx0ICogcmVmZXJlbmNlZCAtIHRydWUgaWYgdGhlIGVudHJ5IHJlY2VudGx5IGVudGVyZWQgdGhlIHpzd2FwIHBvb2wuIFVuc2V0IGJ5IHRoZVxcbiAxODI6XFx0ICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcXG4gMTgzOlxcdCAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXFxuIDE4NDpcXHQgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cXG4gMTg1OlxcdCAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXFxuIDE4NjpcXHQgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcXG4gMTg3OlxcdCAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xcbiAxODg6XFx0ICogbHJ1IC0gaGFuZGxlIHRvIHRoZSBwb29sJ3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXFxuIDE4OTpcXHQgKi9cXG4gMTkwOlxcdHN0cnVjdCB6c3dhcF9lbnRyeSB7XFxuIDE5MTpcXHRcXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcXG4gMTkyOlxcdFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuIDE5MzpcXHRcXHRib29sIHJlZmVyZW5jZWQ7XFxuIDE5NDpcXHRcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4gMTk1OlxcdFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiAxOTY6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAxOTc6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XFxuIDE5ODpcXHR9O1xcbiAxOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjU5LjYwNTUwOTA2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQ5ODE4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWnN3YXAgTGFieXJpbnRoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGhvdyB6c3dhcCBpcyBjb25maWd1cmVkLCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBlbmFibGluZyBvZiBpdC4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHNldHRpbmcsIHRoaXMgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCwgaXMgbGlrZWx5IGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIHpzd2FwIGltcGxlbWVudGF0aW9uLiBTbywgbXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBtbS96c3dhcC5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uLCB2YXJpYWJsZSwgb3Igd2hhdGV2ZXIgaXQgaXMgdGhhdCBtYW5hZ2VzIHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHRoaXMgaW1wb3J0YW50IGZlYXR1cmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJ20gZ29pbmcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMS4xNTUzMzA5ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTQ4MjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9lbmFibGVkX3BhcmFtX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTA9c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xcbm1tL3pzd2FwLmM6OTE6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy05Mi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopO1xcbm1tL3pzd2FwLmM9OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xcbm1tL3pzd2FwLmM6OTQ6XFx0LnNldCA9XFx0XFx0enN3YXBfZW5hYmxlZF9wYXJhbV9zZXQsXFxubW0venN3YXAuYy05NS1cXHQuZ2V0ID1cXHRcXHRwYXJhbV9nZXRfYm9vbCxcXG4tLVxcbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNjE4LVxcbm1tL3pzd2FwLmM6NjE5OnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxcbm1tL3pzd2FwLmMtNjIwLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMS41MTQ4MTkwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxODA2Njk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDYxNS02NjAgb2YgYG1tL3pzd2FwLmNgOlxuXG4qKkRpdmluZyBpbnRvIHpzd2FwLmMncyBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYxNS02NjAuIFRoZSBjb250ZXh0IGhlcmUsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgbGlrZWx5IGdvaW5nIHRvIGRlYWwgd2l0aCB0aGUgaGVhcnQgb2YgenN3YXAncyBvcGVyYXRpb24g4oCTIGxpa2VseSBob3cgaXQncyAqY2hvb3NpbmcqIHRoZSBwYWdlcyB0byBzd2FwIG91dCwgb3IgbWF5YmUgbWFuYWdpbmcgdGhlIHpwb29sIGl0c2VsZi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSdkIGd1ZXNzIHdlJ3JlIHBhc3QgdGhlIGluaXRpYWwgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24sIGFuZCBub3cgYXQgdGhlIG1vcmUgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGxvb3BzIHRoYXQgbWlnaHQgYmUgZXhwZW5zaXZlLCBvciBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjb21wcmVzc2VkIGRhdGEgc3RvcmUsIGFuZCB3aGV0aGVyIGl0IGhhbmRsZXMgbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW50bHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggcGFnZSBmYXVsdHMgaGVyZSwgb3IgYXJlIHRoZXNlIHByb2FjdGl2ZSBzd2Fwcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG1haW4gZGVjaXNpb24gcG9pbnRzIHdpdGhpbiB0aGlzIGJsb2NrIG9mIGNvZGU6IFdoYXQgYXJlIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBzZWxlY3RpbmcgcGFnZXM/IElzIHRoZSBkYXRhIGJlaW5nIGNvbXByZXNzZWQgZWZmaWNpZW50bHk/IEFuZCBob3cgaXMgdGhpcyBzZWxlY3Rpb24gYWZmZWN0ZWQgYnkgZ2xvYmFsIG9yIGxvY2FsIG1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gdGhlIHN5c3RlbT8gSSdtIGFudGljaXBhdGluZyBzb21lIGNyaXRpY2FsIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgY29tcHJlc3NlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IGV4cGVjdGF0aW9ucywgYW5kIHdoZXJlIHRoZSBjb2RlIGFjdHVhbGx5IHN0YXJ0cyB0byAqZG8qIHNvbWV0aGluZyBjb25jcmV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMy44MzI4OTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxNTpcXHRcXG4gNjE2OlxcdFxcdHJldHVybiByZXQ7XFxuIDYxNzpcXHR9XFxuIDYxODpcXHRcXG4gNjE5OlxcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxcbiA2MjA6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuIDYyMTpcXHR7XFxuIDYyMjpcXHRcXHRpbnQgcmV0ID0gLUVOT0RFVjtcXG4gNjIzOlxcdFxcbiA2MjQ6XFx0XFx0LyogaWYgdGhpcyBpcyBsb2FkLXRpbWUgKHByZS1pbml0KSBwYXJhbSBzZXR0aW5nLCBvbmx5IHNldCBwYXJhbS4gKi9cXG4gNjI1OlxcdFxcdGlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpXFxuIDYyNjpcXHRcXHRcXHRyZXR1cm4gcGFyYW1fc2V0X2Jvb2wodmFsLCBrcCk7XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzd2FwX2luaXRfbG9jayk7XFxuIDYyOTpcXHRcXHRzd2l0Y2ggKHpzd2FwX2luaXRfc3RhdGUpIHtcXG4gNjMwOlxcdFxcdGNhc2UgWlNXQVBfVU5JTklUOlxcbiA2MzE6XFx0XFx0XFx0aWYgKHpzd2FwX3NldHVwKCkpXFxuIDYzMjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNjMzOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiA2MzQ6XFx0XFx0Y2FzZSBaU1dBUF9JTklUX1NVQ0NFRUQ6XFxuIDYzNTpcXHRcXHRcXHRpZiAoIXpzd2FwX2hhc19wb29sKVxcbiA2MzY6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjYW4ndCBlbmFibGUsIG5vIHBvb2wgY29uZmlndXJlZFxcXFxuXFxcIik7XFxuIDYzNzpcXHRcXHRcXHRlbHNlXFxuIDYzODpcXHRcXHRcXHRcXHRyZXQgPSBwYXJhbV9zZXRfYm9vbCh2YWwsIGtwKTtcXG4gNjM5OlxcdFxcdFxcdGJyZWFrO1xcbiA2NDA6XFx0XFx0Y2FzZSBaU1dBUF9JTklUX0ZBSUxFRDpcXG4gNjQxOlxcdFxcdFxcdHByX2VycihcXFwiY2FuJ3QgZW5hYmxlLCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbiA2NDI6XFx0XFx0fVxcbiA2NDM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3dhcF9pbml0X2xvY2spO1xcbiA2NDQ6XFx0XFxuIDY0NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2NDY6XFx0fVxcbiA2NDc6XFx0XFxuIDY0ODpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuIDY0OTpcXHQqIGxydSBmdW5jdGlvbnNcXG4gNjUwOlxcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDY1MTpcXHRcXG4gNjUyOlxcdC8qIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgUkNVICovXFxuIDY1MzpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDY1NDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4gNjU1OlxcdHtcXG4gNjU2OlxcdFxcdHJldHVybiBlbnRyeS1cXHUwMDNlb2JqY2cgPyBvYmpfY2dyb3VwX21lbWNnKGVudHJ5LVxcdTAwM2VvYmpjZykgOiBOVUxMO1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0I2Vsc2VcXG4gNjU5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY2MjpcXHR9XFxuIDY2MzpcXHQjZW5kaWZcXG4gNjY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMy44MzMxMTU4OTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwODU0ODE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYHpzd2FwX3Bvb2xfY3JlYXRlYCBDYWxscyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgenN3YXBfcG9vbF9jcmVhdGVgIHdpdGhpbiB0aGUgYG1tL3pzd2FwLmNgIGZpbGUuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgYW5kIGhvdyB0aGUgenN3YXAgcG9vbCBpbml0aWFsaXphdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaXNuJ3QgdXN1YWxseSBzb21ldGhpbmcgSSBoYXZlIHRvIHJldmlzaXQgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZSBvZiB0aGUgenN3YXAgZGVzaWduLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGRlcGVuZGVuY2llcyBhbmQgd2hlbiB0aGUgcG9vbCBpcyBicm91Z2h0IG9ubGluZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSBlbHNlIGl0J3MgYWN0dWFsbHkgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGNsYXJpZnkgdGhlIHN5c3RlbSdzIHJ1bnRpbWUgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MDUuNDQxNjY4MDQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3ODM2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfcG9vbF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTI0NT1zdGF0aWMgdm9pZCBhY29tcF9jdHhfZnJlZShzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4KVxcbi0tXFxubW0venN3YXAuYy0yNzItXFxubW0venN3YXAuYzoyNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbm1tL3pzd2FwLmMtMjc0LXtcXG4tLVxcbm1tL3pzd2FwLmMtMzQ1LVxcbm1tL3pzd2FwLmM6MzQ2OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbm1tL3pzd2FwLmMtMzQ3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMzYxLVxcbm1tL3pzd2FwLmM6MzYyOlxcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jLTM2My19XFxuLS1cXG5tbS96c3dhcC5jPTUzMD1zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS96c3dhcC5jLTU3Mi1cXHRpZiAoIXBvb2wpXFxubW0venN3YXAuYzo1NzM6XFx0XFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xcbm1tL3pzd2FwLmMtNTc0LVxcdGVsc2Uge1xcbi0tXFxubW0venN3YXAuYz0xNzczPXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTgwNC1cXG5tbS96c3dhcC5jOjE4MDU6XFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcXG5tbS96c3dhcC5jLTE4MDYtXFx0aWYgKHBvb2wpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MDUuNjA5NDU4MjAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzAwODY5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAgcGFyYW1ldGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kLCBjcnVjaWFsbHksIHdoZXJlIGluIHRoZSBrZXJuZWwgaXQncyBiZWluZyB1c2VkLiBJJ20gYXNzdW1pbmcgaXQncyBhIHN5c2N0bCBvciBrZXJuZWwgbW9kdWxlIHBhcmFtZXRlciwgZ2l2ZW4gdGhlIG5hbWUsIHNvIHRoZSBmb2N1cyBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZSBpbnRlcmFjdGlvbnMgYXJvdW5kIHRoYXQgdmFyaWFibGUuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBzaW1pbGFyIHRvIGZpbmQgdGhlIGRlY2xhcmF0aW9uIGFuZCB0aGUgYXNzaWdubWVudHMuIFRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBsb2dpYyBkZXBlbmRzIG9uIGl0cyB2YWx1ZS4gSXMgaXQgYSBjb21waWxlLXRpbWUgb3B0aW9uLCBvciBydW50aW1lIGNvbmZpZ3VyYWJsZT8gSXMgaXQgYSBib29sZWFuIG9yIHNvbWUga2luZCBvZiBlbnVtZXJhdGVkIHZhbHVlPyBLbm93aW5nIGhvdyB0aGUgY29uZmlndXJhdGlvbiBpbXBhY3RzIHpzd2FwIGJlaGF2aW9yIGlzIHRoZSBrZXkuIElzIHRoaXMgdG8gZGlzYWJsZSBvciBwcmV2ZW50IHpzd2FwIGZyb20gKmV2ZXIqIGJlaW5nIGFjdGl2ZT8gT3IgcGVyaGFwcyBhIHBhcmFtZXRlciB0byBpbmZsdWVuY2UgaW5pdGlhbCBzZXR1cCBidXQgcGVybWl0IGVuYWJsaW5nIHZpYSBvdGhlciBtZWNoYW5pc21zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgcHJvdmlkZXMgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB6c3dhcCBiZWhhdmlvci4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGV4cGxvcmF0aW9uIHdpbGwgbGlrZWx5IGludm9sdmUgbG9va2luZyBhdCB0aGUgYHpzd2FwYCBkcml2ZXIgY29kZSwgcHJvYmFibHkgd2l0aGluIHRoZSBgbW1gIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IGRlY2lzaW9ucyBhcmUgbWFkZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24gZm9yIGFueSBleHBsYW5hdGlvbiBvZiB0aGUgcGFyYW1ldGVyIGFuZCBpdHMgaW50ZW5kZWQgdXNlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowNy45Mzk1NDk4MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzI2Mjk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3pzd2FwLmg9MzY9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaDozNzpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTM4LSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NjI9c3RhdGljIGlubGluZSBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC02Ni1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Njc6c3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjgte1xcbi0tXFxubW0vbWVtb3J5LmM9NDc5NT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4MTYtXFx0ICovXFxubW0vbWVtb3J5LmM6NDgxNzpcXHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS9tZW1vcnkuYy00ODE4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vc2htZW0uYz0yMDQzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL3NobWVtLmMtMjA1Mi1cXHRpZiAoKHZtZiBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSh1c2VyZmF1bHRmZF9hcm1lZCh2bWYtXFx1MDAzZXZtYSkpKSB8fFxcbm1tL3NobWVtLmM6MjA1MzpcXHQgICAgICF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0vc2htZW0uYy0yMDU0LVxcdFxcdG9yZGVyID0gMDtcXG4tLVxcbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjktXFxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzEte1xcbi0tXFxubW0venN3YXAuYz0xNTk2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE2MDUtXFxubW0venN3YXAuYzoxNjA2OlxcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0venN3YXAuYy0xNjA3LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzoxMS4wNzIxODY3MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NzI3NDk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBac3dhcCBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB6c3dhcCBzZXR1cC4gSSBzZWUgdGhhdCB0aGUgYHpzd2FwX3Bvb2xfY3JlYXRlYCBmdW5jdGlvbiBpcyBrZXk7IGl0J3MgY2FsbGVkIGluIHR3byBzaWduaWZpY2FudCBwbGFjZXM6IGVpdGhlciB3aGVuIGEgdXNlciBzZXRzIHVwIGEgbmV3IGNvbXByZXNzb3IgdmlhIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIG9yIGR1cmluZyBpbml0aWFsIGB6c3dhcF9zZXR1cGAuIFRoZSB0cmlja3kgcGFydCB1c2VkIHRvIGJlIHRoZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKWAgY2FsbCwgd2hpY2ggd2FzIHByZXZpb3VzbHkgb25seSBpbiBgenN3YXBfc2V0dXBgLiBUaGUgcHJvYmxlbSBJIHNlZSB3aXRoIHRoaXMgaXMgdGhhdCBpZiB0aGUgcG9vbCBjcmVhdGlvbiBoYXBwZW5zICphZnRlciogdGhlIGluaXRpYWwgc2V0dXDigJRsZXQncyBzYXkgdGhyb3VnaCBhIGxhdGVyIGNvbXByZXNzb3IgY29uZmlndXJhdGlvbuKAlG9yIGlmIGB6c3dhcF9wb29sX2NyZWF0ZWAgc3VjY2VlZHMgaW5kZXBlbmRlbnRseSwgdGhlbiB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgc3RhdGljIGtleSBub3QgYmVpbmcgZW5hYmxlZCB3aGVuIGl0IHNob3VsZCBiZS5cblxuVGhlIHNvbHV0aW9uIGlzIGNsZXZlcjogbW92ZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKWAgKmludG8qIGB6c3dhcF9wb29sX2NyZWF0ZWAuIFRoaXMgZ3VhcmFudGVlcyB0aGF0ICpldmVyeSogdGltZSBhIHpzd2FwIHBvb2wgaXMgYWN0dWFsbHkgY3JlYXRlZOKAlG5vIG1hdHRlciB0aGUgdHJpZ2dlcuKAlHRoZSBzdGF0aWMga2V5IHdpbGwgYmUgZW5hYmxlZC4gVGhpcyBwcm92aWRlcyBhIG1vcmUgcm9idXN0IGFuZCBwcmVkaWN0YWJsZSB6c3dhcCBiZWhhdmlvciwgZXNwZWNpYWxseSBkdXJpbmcgcnVudGltZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuIEl0J3MgYSBuaWNlLCBjbGVhbiB3YXkgdG8gZW5zdXJlIHRoYXQgdGhlIHpzd2FwIGZlYXR1cmUgaXMgY29ycmVjdGx5IGFjdGl2YXRlZCB3aGVuIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlcyBhcmUgYWN0dWFsbHkgcmVhZHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzoxNC4wMjk0NjUzMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDY1Mzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjE0LjIxNDEyODU2NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDE4OTk1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfWlNXQVBgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDT05GSUdfWlNXQVBgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGp1bXAgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdtIGJldHRpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBmb3IgYFpTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgY29uZmxpY3Qgd2l0aCB0aGlzIG9uZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MTUuNjMzMTI5NjczWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxcbiAgMTg6XFx0XFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXFxuICAxOTpcXHRcXHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxcbiAgMjA6XFx0XFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuICAzMjpcXHRcXHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcXG4gIDMzOlxcdFxcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuICAzNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxcbiAgNDA6XFx0XFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXFxuICA0MzpcXHRcXHQgIGNvbW1hbmQgbGluZSAnenN3YXAuZW5hYmxlZD0nIG9wdGlvbi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG4gIDQ2OlxcdFxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICA0ODpcXHRcXHRkZWZhdWx0IG5cXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcXG4gIDUxOlxcdFxcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXFxuICA1MjpcXHRcXHQgIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSkgb24gbWVtb3J5IHByZXNzdXJlLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MTUuNjMzMzMxMTAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDQxOTgzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBac3dhcDogQSBXb3J0aHkgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLiBGaXJzdCwgcmVhY2hhYmlsaXR5IGlzIGtleS4gVGhpcyBjb2RlIGRpdmVzIHJpZ2h0IGludG8gYG1tL3pzd2FwLmNgLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRlcnJpdG9yeS4gVGhhdCdzIGEgZ29vZCBzdGFydCwgYW5kIHRoZSBmYWN0IHRoYXQgaXQncyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyIGlzIGFub3RoZXIgc3Ryb25nIHBvaW50LiBEeW5hbWljIGNvbmZpZ3VyYXRpb24gb2YgenN3YXAgdGhyb3VnaCBzeXNmcyBpcyBwcmFjdGljYWxseSBiZWdnaW5nIHRvIGJlIGZ1enplZCwgYW5kIHRoZW4gd2UgaGF2ZSBzdGF0aWMgYnJhbmNoIGZsaXBwaW5nIGFzIHdlbGwuIFRoYXQgYWZmZWN0cyBrZXkgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgYW5kIGB6c3dhcF9sb2FkKClgLlxuXG5HaXZlbiB0aGF0IHJlYWNoYWJpbGl0eSBhbmQgdGhlIGltcGFjdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGhhcyBzdHJvbmcgcG90ZW50aWFsLiBUaGUgdmVyZGljdDogZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHBpbiBkb3duIHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluOiBgenN3YXBfcG9vbF9jcmVhdGVgLCBgenN3YXBfc2V0dXBgLCBgenN3YXBfbmV2ZXJfZW5hYmxlZGAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF9lbmFibGVkX3BhcmFtX3NldGAsIGB6c3dhcF9sb2FkYCwgYW5kIGB6c3dhcF9zdG9yZWAuIEkgc2hvdWxkIHByb2JhYmx5IHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYW5kIGRlZmluaXRpb25zIGRpcmVjdGx5IGluIGBtbS96c3dhcC5jYCB0byBiZSBwcmVjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyMiwiT3V0cHV0VG9rZW5zIjo5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjE4LjQ3NzUzMjc1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNjYyNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgXFxcXCp6c3dhcF9wb29sX2NyZWF0ZXxec3RhdGljIGludCB6c3dhcF9zZXR1cHxeYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkfF5zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0fF5zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0fF5ib29sIHpzd2FwX3N0b3JlfF5pbnQgenN3YXBfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9Nzg9c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XFxuLS1cXG5tbS96c3dhcC5jLTg1LVxcbm1tL3pzd2FwLmM6ODY6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG5tbS96c3dhcC5jLTg3LVxcbi0tXFxubW0venN3YXAuYz05MD1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XFxubW0venN3YXAuYzo5MTpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcXG5tbS96c3dhcC5jLTkyLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XFxuLS1cXG5tbS96c3dhcC5jPTEwMD1zdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYzoxMDE6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy0xMDItXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjktXFxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzEte1xcbi0tXFxubW0venN3YXAuYz0yNDU9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcXG4tLVxcbm1tL3pzd2FwLmMtMjcyLVxcbm1tL3pzd2FwLmM6MjczOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTI3NC17XFxuLS1cXG5tbS96c3dhcC5jPTUxMT1zdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtNTI5LVxcbm1tL3pzd2FwLmM6NTMwOnN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS96c3dhcC5jLTUzMS17XFxuLS1cXG5tbS96c3dhcC5jLTYxOC1cXG5tbS96c3dhcC5jOjYxOTpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG5tbS96c3dhcC5jLTYyMC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmM9MTQxMD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNDg5LVxcbm1tL3pzd2FwLmM6MTQ5MDpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNDkxLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTU5NS0gKi9cXG5tbS96c3dhcC5jOjE1OTY6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTE1OTcte1xcbi0tXFxubW0venN3YXAuYz0xNzY0PXN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE3NzItKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjE3NzM6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjE4LjY1MDIwMzA2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTYxNDI0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxldmFudCB0byB6c3dhcC4gRmlyc3QsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBgQ09ORklHX1NXQVBgIGlzIGVuYWJsZWQsIGFzIGBaU1dBUGAgaW5oZXJlbnRseSBkZXBlbmRzIG9uIGl0LiBUaGVuLCBvZiBjb3Vyc2UsIGBDT05GSUdfWlNXQVBgIGl0c2VsZiBtdXN0IGJlIHNldC4gSSdsbCBuZWVkIHRvIHJ1biBhIGNoZWNrIHRvIGVuc3VyZSBubyBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgbWlzc2luZy5cblxuQWxyaWdodCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBgWlNXQVBgIGFsc28gcmVsaWVzIG9uIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBTbywgSSdsbCBhZGQgdGhvc2UgdG8gbXkgZW5hYmxlbWVudCBsaXN0LiBNeSBFbmFibGVDb25maWdzIGFyZTogYFtcIlNXQVBcIiwgXCJaU1dBUFwiXWAuXG5cbk5vdywgSSdsbCBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhlIHpzd2FwIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZDogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3NldHVwYCwgYHpzd2FwX25ldmVyX2VuYWJsZWRgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX2xvYWRgLlxuXG5GaW5hbGx5LCBpdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI0NiwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjEuODExNjMxNDU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzODkzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9zZXR1cFwiLFxuICAgIFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfcG9vbF9jcmVhdGVcIixcbiAgICBcInpzd2FwX3NldHVwXCIsXG4gICAgXCJ6c3dhcF9uZXZlcl9lbmFibGVkXCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfZW5hYmxlZF9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2xvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCBtb3ZpbmcgdGhlIGFjdGl2YXRpb24gb2YgdGhlIHpzd2FwX2V2ZXJfZW5hYmxlZCBzdGF0aWMga2V5IGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCkuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenN3YXBfbmV2ZXJfZW5hYmxlZCgpIGFuZCBhZmZlY3RzIHJ1bnRpbWUgY2hlY2tzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMgYW5kIHN5c2ZzIHBhcmFtZXRlciByZWNvbmZpZ3VyYXRpb24uIEl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjIxLjk2NTUzNTc4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MTgyMzE5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzoyMS45NjY0Njk0NDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODYxNzI5MDY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgc3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCkgZnJvbSB6c3dhcF9zZXR1cCgpIGludG8genN3YXBfcG9vbF9jcmVhdGUoKSwgZW5zdXJpbmcgdGhhdCB0aGUgc3RhdGljIGJyYW5jaCB0cmFja2luZyB3aGV0aGVyIHpzd2FwIHdhcyBldmVyIGVuYWJsZWQgaXMgYWN0aXZhdGVkIHdoZW5ldmVyIGEgenN3YXAgcG9vbCBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCAoZS5nLiwgd2hlbiBkeW5hbWljYWxseSBjb25maWd1cmVkIHZpYSBzeXNmcy9wYXJhbWV0ZXJzKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBzdGF0aWMga2V5IC8gYnJhbmNoIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzI0LDYgKzMyNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJjcmVhdGVkXCIsIHBvb2wpO1xuIFxuK1x0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbitcbiBcdHJldHVybiBwb29sO1xuIFxuIHJlZl9mYWlsOlxuQEAgLTE4MDUsNyArMTgwNyw2IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuLVx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfZXJyKFwicG9vbCBjcmVhdGlvbiBmYWlsZWRcXG5cIik7XG4gXHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjIxLjk2NjQ3MTU5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDI0NTIwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGRpdmUgaW50byBhIHBhdGNoIHdpdGhpbiB0aGUgYG1tL3pzd2FwLmNgIGZpbGUuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgKmludGVyZXN0aW5nKi4gWnN3YXAsIGFzIGEgY29tcHJlc3NlZCBzd2FwIGNhY2hlLCBjYW4gYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhbmQgYW55IG1vZGlmaWNhdGlvbiB0aGVyZSB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGl0c2VsZi5cblxuSSdsbCBzdGFydCBieSBwdWxsaW5nIHVwIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiBgbW0venN3YXAuY2AgZGlyZWN0bHkuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlOyB0aGUgbGluZSBudW1iZXJzIGFyZSBhIGdvb2Qgc3RhcnQsIGJ1dCB0aGV5IGRvbid0IHRlbGwgdGhlIHdob2xlIHN0b3J5LiBJJ2xsIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIG15IHByZWZlcnJlZCBmaWxlIHJlYWRpbmcgdG9vbCAobGlrZWx5IHNvbWV0aGluZyBsaWtlIGBsZXNzYCBvciBhbiBlZGl0b3Igd2l0aCBnb29kIHNlYXJjaCBjYXBhYmlsaXRpZXMpIHRvIGxvb2sgYXJvdW5kIGxpbmVzIDMyNCBhbmQgMTgwNSBpbiBgbW0venN3YXAuY2AuIEkgbmVlZCBjb250ZXh0ISBXaGF0IGZ1bmN0aW9ucyBhcmUgYXJvdW5kIHRob3NlIGxpbmVzPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gV2hhdCdzIHRoZSBnZW5lcmFsIGZsb3cgb2YgZXhlY3V0aW9uIGluIHRoYXQgYXJlYSBvZiB0aGUgY29kZT8gSXMgdGhpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUsIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGNvZGUsIG9yIGEgbW9yZSBwZXJpcGhlcmFsIGZ1bmN0aW9uPyBUaGF0IGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0IGFuZCBpdHMgbGlrZWx5IGludGVudC4gVGhlIGdvYWwgYXQgdGhpcyBzdGFnZSBpcyB0byBpZGVudGlmeSB3aGVyZSB0aGUgY2hhbmdlIGlzIGJlaW5nIG1hZGUgYW5kIHdoeS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MSwiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjYuOTkwOTk4MjAyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxMDpcXHRcXHQgKiBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoKSB3aWxsIG5vdCBjbGVhbnVwIG9uIGZhaWx1cmUgc2luY2VcXG4gMzExOlxcdFxcdCAqIHdlIGRvbid0IHJlZ2lzdGVyIGEgaG90dW5wbHVnIGNhbGxiYWNrLlxcbiAzMTI6XFx0XFx0ICovXFxuIDMxMzpcXHRcXHRpZiAocmV0KVxcbiAzMTQ6XFx0XFx0XFx0Z290byBjcHVocF9hZGRfZmFpbDtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0LyogYmVpbmcgdGhlIGN1cnJlbnQgcG9vbCB0YWtlcyAxIHJlZjsgdGhpcyBmdW5jIGV4cGVjdHMgdGhlXFxuIDMxNzpcXHRcXHQgKiBjYWxsZXIgdG8gYWx3YXlzIGFkZCB0aGUgbmV3IHBvb2wgYXMgdGhlIGN1cnJlbnQgcG9vbFxcbiAzMTg6XFx0XFx0ICovXFxuIDMxOTpcXHRcXHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZiwgX196c3dhcF9wb29sX2VtcHR5LFxcbiAzMjA6XFx0XFx0XFx0XFx0ICAgICAgUEVSQ1BVX1JFRl9BTExPV19SRUlOSVQsIEdGUF9LRVJORUwpO1xcbiAzMjE6XFx0XFx0aWYgKHJldClcXG4gMzIyOlxcdFxcdFxcdGdvdG8gcmVmX2ZhaWw7XFxuIDMyMzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCk7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImNyZWF0ZWRcXFwiLCBwb29sKTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XFxuIDMyODpcXHRcXG4gMzI5OlxcdFxcdHJldHVybiBwb29sO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRyZWZfZmFpbDpcXG4gMzMyOlxcdFxcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXFx1MDAyNnBvb2wtXFx1MDAzZW5vZGUpO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRjcHVocF9hZGRfZmFpbDpcXG4gMzM1OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuIDMzNjpcXHRcXHRcXHRhY29tcF9jdHhfZnJlZShwZXJfY3B1X3B0cihwb29sLVxcdTAwM2VhY29tcF9jdHgsIGNwdSkpO1xcbiAzMzc6XFx0ZXJyb3I6XFxuIDMzODpcXHRcXHRpZiAocG9vbC1cXHUwMDNlYWNvbXBfY3R4KVxcbiAzMzk6XFx0XFx0XFx0ZnJlZV9wZXJjcHUocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gMzQwOlxcdFxcdGlmIChwb29sLVxcdTAwM2V6c19wb29sKVxcbiAzNDE6XFx0XFx0XFx0enNfZGVzdHJveV9wb29sKHBvb2wtXFx1MDAzZXpzX3Bvb2wpO1xcbiAzNDI6XFx0XFx0a2ZyZWUocG9vbCk7XFxuIDM0MzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzQ0OlxcdH1cXG4gMzQ1OlxcdFxcbiAzNDY6XFx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXFxuIDM0NzpcXHR7XFxuIDM0ODpcXHRcXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXFx1MDAyNlxcdTAwMjZcXG4gMzQ5OlxcdFxcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjYuOTkxMjgwNzAyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3OTA6XFx0XFxuMTc5MTpcXHRcXHRzaHJpbmtfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcInpzd2FwLXNocmlua1xcXCIsXFxuMTc5MjpcXHRcXHRcXHRcXHRXUV9VTkJPVU5EfFdRX01FTV9SRUNMQUlNLCAxKTtcXG4xNzkzOlxcdFxcdGlmICghc2hyaW5rX3dxKVxcbjE3OTQ6XFx0XFx0XFx0Z290byBzaHJpbmtfd3FfZmFpbDtcXG4xNzk1OlxcdFxcbjE3OTY6XFx0XFx0enN3YXBfc2hyaW5rZXIgPSB6c3dhcF9hbGxvY19zaHJpbmtlcigpO1xcbjE3OTc6XFx0XFx0aWYgKCF6c3dhcF9zaHJpbmtlcilcXG4xNzk4OlxcdFxcdFxcdGdvdG8gc2hyaW5rZXJfZmFpbDtcXG4xNzk5OlxcdFxcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgenN3YXBfc2hyaW5rZXIpKVxcbjE4MDA6XFx0XFx0XFx0Z290byBscnVfZmFpbDtcXG4xODAxOlxcdFxcdHNocmlua2VyX3JlZ2lzdGVyKHpzd2FwX3Nocmlua2VyKTtcXG4xODAyOlxcdFxcbjE4MDM6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZ6c3dhcF9zaHJpbmtfd29yaywgc2hyaW5rX3dvcmtlcik7XFxuMTgwNDpcXHRcXG4xODA1OlxcdFxcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XFxuMTgwNjpcXHRcXHRpZiAocG9vbCkge1xcbjE4MDc6XFx0XFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXFxcblxcXCIsIHBvb2wtXFx1MDAzZXRmbV9uYW1lKTtcXG4xODA4OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0LCBcXHUwMDI2enN3YXBfcG9vbHMpO1xcbjE4MDk6XFx0XFx0XFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xcbjE4MTA6XFx0XFx0fSBlbHNlIHtcXG4xODExOlxcdFxcdFxcdHByX2VycihcXFwicG9vbCBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbjE4MTI6XFx0XFx0XFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xcbjE4MTM6XFx0XFx0fVxcbjE4MTQ6XFx0XFxuMTgxNTpcXHRcXHRpZiAoenN3YXBfZGVidWdmc19pbml0KCkpXFxuMTgxNjpcXHRcXHRcXHRwcl93YXJuKFxcXCJkZWJ1Z2ZzIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuMTgxNzpcXHRcXHR6c3dhcF9pbml0X3N0YXRlID0gWlNXQVBfSU5JVF9TVUNDRUVEO1xcbjE4MTg6XFx0XFx0cmV0dXJuIDA7XFxuMTgxOTpcXHRcXG4xODIwOlxcdGxydV9mYWlsOlxcbjE4MjE6XFx0XFx0c2hyaW5rZXJfZnJlZSh6c3dhcF9zaHJpbmtlcik7XFxuMTgyMjpcXHRzaHJpbmtlcl9mYWlsOlxcbjE4MjM6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoc2hyaW5rX3dxKTtcXG4xODI0OlxcdHNocmlua193cV9mYWlsOlxcbjE4MjU6XFx0XFx0Y3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFKTtcXG4xODI2OlxcdGhwX2ZhaWw6XFxuMTgyNzpcXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koenN3YXBfZW50cnlfY2FjaGUpO1xcbjE4Mjg6XFx0Y2FjaGVfZmFpbDpcXG4xODI5OlxcdFxcdC8qIGlmIGJ1aWx0LWluLCB3ZSBhcmVuJ3QgdW5sb2FkZWQgb24gZmFpbHVyZTsgZG9uJ3QgYWxsb3cgdXNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjI2Ljk5MTUzMjE4MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDk4MTQ5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHpzd2FwIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHpzd2FwX2V2ZXJfZW5hYmxlZGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEl0J3MgYSBrZXkgdmFyaWFibGUsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgenN3YXAgKG9yIGxhY2sgdGhlcmVvZikgaW4gdGhpcyBjb250ZXh0LiBUaW1lIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyByZWFkIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllZC4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjguNDg5Njg3MDI4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3NTEwODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2V2ZXJfZW5hYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTg2PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCk7XFxuLS1cXG5tbS96c3dhcC5jLTg4LS8qIEVuYWJsZS9kaXNhYmxlIHpzd2FwICovXFxubW0venN3YXAuYzo4OTpzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIHpzd2FwX2V2ZXJfZW5hYmxlZCk7XFxubW0venN3YXAuYy05MC1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XFxuLS1cXG5tbS96c3dhcC5jPTEzMD1ib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxubW0venN3YXAuYzoxMzI6XFx0cmV0dXJuICFzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCBcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTEzMy19XFxuLS1cXG5tbS96c3dhcC5jPTI3Mz1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxuLS1cXG5tbS96c3dhcC5jLTMyNi1cXG5tbS96c3dhcC5jOjMyNzpcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTMyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MzEuNDQ3MjA5MTkxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NjEzNjIzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBac3dhcCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB6c3dhcCBpcyBiZWluZyBpbml0aWFsaXplZCwgb3IgbW9yZSBzcGVjaWZpY2FsbHksIHdoZXJlIHRoZSBkZWNpc2lvbiB0byAqbm90KiBlbmFibGUgaXQgaXMgbWFkZS4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBwb2ludHMgaW4gdGhlIGNvZGUgcmVsYXRlZCB0byB6c3dhcC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGljaCBjb25kaXRpb25zIGB6c3dhcF9uZXZlcl9lbmFibGVkYCBpcyBzZXQgb3IsIGNvbnZlcnNlbHksIHdoZW4gdGhlIHpzd2FwIHBvb2wgaXMgY3JlYXRlZCBieSBjYWxscyB0byBgenN3YXBfcG9vbF9jcmVhdGVgLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBob3cgdGhlIHNldHRpbmcgb2YgdGhpcyB2YXJpYWJsZSBpbmZsdWVuY2VzIHN1YnNlcXVlbnQgYWN0aW9ucy4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGEgYml0IG9mIGBncmVwYCBvciBzaW1pbGFyLCB0byBmaW5kIGFsbCBjYWxsIHNpdGVzLCB0aGVuIGp1bXBpbmcgaW50byB0aGUgbW9zdCByZWxldmFudCB0byB0cmFjayBkb3duIHRoZSBpc3N1ZS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MzMuMTA4NTc1NDY1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTExOTE5MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX25ldmVyX2VuYWJsZWR8enN3YXBfcG9vbF9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTM2PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjYtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY4LXtcXG4tLVxcbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODE2LVxcdCAqL1xcbm1tL21lbW9yeS5jOjQ4MTc6XFx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0vbWVtb3J5LmMtNDgxOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3NobWVtLmM9MjA0Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTIwNTItXFx0aWYgKCh2bWYgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVxcdTAwM2V2bWEpKSkgfHxcXG5tbS9zaG1lbS5jOjIwNTM6XFx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3NobWVtLmMtMjA1NC1cXHRcXHRvcmRlciA9IDA7XFxuLS1cXG5tbS96c3dhcC5jPTEyNT1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI5LVxcbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG4tLVxcbm1tL3pzd2FwLmM9MjQ1PXN0YXRpYyB2b2lkIGFjb21wX2N0eF9mcmVlKHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHgpXFxuLS1cXG5tbS96c3dhcC5jLTI3Mi1cXG5tbS96c3dhcC5jOjI3MzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxubW0venN3YXAuYy0yNzQte1xcbi0tXFxubW0venN3YXAuYy0zNDUtXFxubW0venN3YXAuYzozNDY6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXFxubW0venN3YXAuYy0zNDcte1xcbi0tXFxubW0venN3YXAuYy0zNjEtXFxubW0venN3YXAuYzozNjI6XFx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmMtMzYzLX1cXG4tLVxcbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNTcyLVxcdGlmICghcG9vbClcXG5tbS96c3dhcC5jOjU3MzpcXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxubW0venN3YXAuYy01NzQtXFx0ZWxzZSB7XFxuLS1cXG5tbS96c3dhcC5jPTE1OTY9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTYwNS1cXG5tbS96c3dhcC5jOjE2MDY6XFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS96c3dhcC5jLTE2MDctXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLS1cXG5tbS96c3dhcC5jPTE3NzM9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xODA0LVxcbm1tL3pzd2FwLmM6MTgwNTpcXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xcbm1tL3pzd2FwLmMtMTgwNi1cXHRpZiAocG9vbCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzozNi4yMjA1MDE1MTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2MzIxNDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoOiBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIG1vdmVkIHRoZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKWAgY2FsbCBmcm9tIGB6c3dhcF9zZXR1cCgpYCB0byBgenN3YXBfcG9vbF9jcmVhdGUoKWAuIFRoZSByYXRpb25hbGUgaXMgdG8gZW5zdXJlIHRoZSBzdGF0aWMga2V5IGlzIGVuYWJsZWQgd2hlbmV2ZXIgKmFueSogenN3YXAgcG9vbCBpcyBjcmVhdGVkLCBhZGRyZXNzaW5nIHNjZW5hcmlvcyB3aGVyZSB6c3dhcCBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBkZWxheWVkIG9yIHRyaWdnZXJlZCBkeW5hbWljYWxseS4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBtb3ZlPyBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrcy4gTm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgbm8gY2hhbmdlcyB0byBzdHJ1Y3QgZmllbGQgaW5pdGlhbGl6YXRpb24sIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBzdGF0aWMgYnJhbmNoIGVuYWJsZW1lbnQgaXMgcHVyZWx5IGEgYm9vbGVhbiBmbGFnLCBzbyBpdCdzIGEganVtcCB0YWJsZSBtb2RpZmljYXRpb24uXG5cbkdpdmVuIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoZSBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRob3NlIGtpbmRzIG9mIHByb2JsZW1zLiBUaGlzIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCB0aGUgKnNldHRpbmcqIG9mIGEgYm9vbGVhbiB0aGF0IGNvbnRyb2xzIGEganVtcC4gU3RhbmRhcmQgS0FTQU4gY292ZXJhZ2UgYW5kIGJ1ZyBkZXRlY3Rpb24gdG9vbHMgc2hvdWxkIGhhbmRsZSB0aGF0LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cblRvIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcsIGxldCdzIGNsYXJpZnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIEtBU0FOIGNhdGNoZXMgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZ2VhcmVkIHRvd2FyZHMgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgZGF0YSBidWZmZXJzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2Vyc3BhY2UsIGFuZCBpdCdzIHNpbXBseSBlbmFibGluZyBhIHN0YXRpYyBicmFuY2ggYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb2YgcG9vbCBjcmVhdGlvbiwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cbkFscmlnaHQsIHRpbWUgdG8gdHJpZ2dlciBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA1LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mzo0MC41ODM3MTk5NDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpIGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCksIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpYyBicmFuY2ggdHJhY2tpbmcgd2hldGhlciB6c3dhcCB3YXMgZXZlciBlbmFibGVkIGlzIGFjdGl2YXRlZCB3aGVuZXZlciBhIHpzd2FwIHBvb2wgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGUuZy4sIHdoZW4gZHluYW1pY2FsbHkgY29uZmlndXJlZCB2aWEgc3lzZnMvcGFyYW1ldGVycykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgc3RhdGljIGtleSAvIGJyYW5jaCBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBhbGxvY2F0ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2Ugb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgc2FuaXRpemVycyAoS0FTQU4pIGFyZSBzdWZmaWNpZW50LCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows9g24[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 23:19:36 +0000 UTC FinishedAt: 2026-09-06 23:43:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9e52420889a26d87ac7a92eb579cf18d7b516397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9e52420889a26d87ac7a92eb579cf18d7b516397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "b5895d91-4540-4bba-8d73-9bf77b8fd8ef" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_pool_create", "zswap_setup", "zswap_never_enabled", "zswap_compressor_param_set", "zswap_enabled_param_set", "zswap_load" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zZXR1cCYjMzQ7LAogICAgJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2VuYWJsZWRfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpIGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCksIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpYyBicmFuY2ggdHJhY2tpbmcgd2hldGhlciB6c3dhcCB3YXMgZXZlciBlbmFibGVkIGlzIGFjdGl2YXRlZCB3aGVuZXZlciBhIHpzd2FwIHBvb2wgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGUuZy4sIHdoZW4gZHluYW1pY2FsbHkgY29uZmlndXJlZCB2aWEgc3lzZnMvcGFyYW1ldGVycykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIG1vdmluZyB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgenN3YXBfZXZlcl9lbmFibGVkIHN0YXRpYyBrZXkgZnJvbSB6c3dhcF9zZXR1cCgpIGludG8genN3YXBfcG9vbF9jcmVhdGUoKS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6c3dhcF9uZXZlcl9lbmFibGVkKCkgYW5kIGFmZmVjdHMgcnVudGltZSBjaGVja3MgZHVyaW5nIHN3YXAgb3BlcmF0aW9ucyBhbmQgc3lzZnMgcGFyYW1ldGVyIHJlY29uZmlndXJhdGlvbi4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjQyOjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi4zYWJjZDg0MzM0MjViIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuY1xuQEAgLTMyNCw2ICYjNDM7MzI0LDggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDtjcmVhdGVkXCYjMzQ7LCBwb29sKTtcbiBcbiYjNDM7XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuJiM0MztcbiBcdHJldHVybiBwb29sO1xuIFxuIHJlZl9mYWlsOlxuQEAgLTE4MDUsNyAmIzQzOzE4MDcsNiBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4gXHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cJiMzNDssIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuLVx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfZXJyKFwmIzM0O3Bvb2wgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiBcdFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9zZXR1cCYjMzQ7LAogICAgJiMzNDt6c3dhcF9uZXZlcl9lbmFibGVkJiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2VuYWJsZWRfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDc5NWFkYzk1ZjIxYWJjMGMzNjE0ZjFkN2UzN2MzOWI3ODMxOGVlYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMjM6NDI6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi4zYWJjZDg0MzM0MjViIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTMyNCw2ICYjNDM7MzI0LDggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCiAJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O2NyZWF0ZWQmIzM0OywgcG9vbCk7CiAKJiM0MzsJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDt6c3dhcF9ldmVyX2VuYWJsZWQpOwomIzQzOwogCXJldHVybiBwb29sOwogCiByZWZfZmFpbDoKQEAgLTE4MDUsNyAmIzQzOzE4MDcsNiBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpCiAJCXByX2luZm8oJiMzNDtsb2FkZWQgdXNpbmcgcG9vbCAlc1xuJiMzNDssIHBvb2wtJmd0O3RmbV9uYW1lKTsKIAkJbGlzdF9hZGQoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKIAkJenN3YXBfaGFzX3Bvb2wgPSB0cnVlOwotCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7CiAJfSBlbHNlIHsKIAkJcHJfZXJyKCYjMzQ7cG9vbCBjcmVhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKIAkJenN3YXBfZW5hYmxlZCA9IGZhbHNlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcGF0Y2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBtbS96c3dhcC5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgY2VudGVyZWQgYXJvdW5kIGB6c3dhcF9ldmVyX2VuYWJsZWRgLgoKTG9va2luZyBhdCB0aGUgZGV0YWlscywgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTtgIHdpdGhpbiB0aGUgYHpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhpcyBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgWnN3YXAmIzM5O3MgaW5pdGlhbGl6YXRpb24gaW50ZXJhY3RzIHdpdGggc3RhdGljIGJyYW5jaGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7YCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGB6c3dhcF9zZXR1cCh2b2lkKWAgZnVuY3Rpb24uIFRoaXMgcG9pbnRzIHRvd2FyZCBhIGNoYW5nZSBpbiAqd2hlbiogdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBgbW0venN3YXAuY2AgaXRzZWxmLiBJJiMzOTtsbCBwcm9iYWJseSByZWFjaCBmb3IgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY2FsbCB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGUsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBzZWUgd2hhdCB0aGUgaW50ZW50aW9ucyBvZiB0aGVzZSBzZWVtaW5nbHkgY29udHJhcnkgYWx0ZXJhdGlvbnMgYXJlLiBBcmUgdGhleSBpbnRlbmRlZCB0byBkZWxheSBmZWF0dXJlIGVuYWJsZW1lbnQgdW50aWwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IsIHBlcmhhcHMsIGVuc3VyZSB0aGF0IGEgdXNlciBjYW4gdHVybiB0aGUgZmVhdHVyZSBvZmYgc2FmZWx5IGFmdGVyIGJvb3RpbmcsIG9yIGlzIHRoZXJlIGEgYmlnZ2VyIGNoYW5nZSBoYXBwZW5pbmcgdG8gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlPyBJIGV4cGVjdCBhIGZ1bGxlciBwaWN0dXJlIHdpbGwgYXBwZWFyIG9uY2UgSSBnZXQgbW9yZSBjb250ZXh0IGZyb20gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX2V2ZXJfZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYy05MC1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG4tLVxubW0venN3YXAuYz0xMzA9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG5tbS96c3dhcC5jOjEzMjpcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmMtMTMzLX1cbi0tXG5tbS96c3dhcC5jPTI3Mz1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4tLVxubW0venN3YXAuYy0zMjYtXG5tbS96c3dhcC5jOjMyNzpcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTMyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFpzd2FwIFBvb2wgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hvKiBjYWxscyBgenN3YXBfcG9vbF9jcmVhdGVgLCAqd2hlbiogaXQmIzM5O3MgY2FsbGVkLCBhbmQgKndoeSouIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVsYXRlZCBmbGFncyBhbmQgdmFyaWFibGVzOiBgenN3YXBfZXZlcl9lbmFibGVkYCwgYW5kIGB6c3dhcF9uZXZlcl9lbmFibGVkYC4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGVzZSBmbGFncyB3aWxsIGNvbnRyb2wgdGhlIHN0YXRlIG9mIHRoZSBmZWF0dXJlOiB3aGVuIGl0IGNhbiBiZSBjcmVhdGVkIGFuZCBpZiBpdCBoYXMgYmVlbi4gSG93IGRvZXMgdGhlIGtlcm5lbCBkZWNpZGUgd2hldGhlciB0byBpbml0aWFsaXplIGEgWnN3YXAgcG9vbCBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCBkb2VzIHRoaXMgZGVjaXNpb24gZGVwZW5kIG9uIGJvb3QgcGFyYW1ldGVycywgc3lzZnMgc2V0dGluZ3MsIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93LiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludHMgd2lsbCBwcm92aWRlIGEgd2F5IHRvIGV4YW1pbmUgdGhlIGJlaGF2aW9yIHdoZW4gdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIG9mIHRoZXNlIGZsYWdzIHRocm91Z2ggdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIHN0YXRlIGFmZmVjdHMgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIHpzd2FwLmMgLSB6c3dhcCBkcml2ZXIgZmlsZVxuICAgNDpcdCAqXG4gICA1Olx0ICogenN3YXAgaXMgYSBjYWNoZSB0aGF0IHRha2VzIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzXG4gICA2Olx0ICogb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvIGNvbXByZXNzIGFuZCBzdG9yZSB0aGVtIGluIGFcbiAgIDc6XHQgKiBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uXG4gICA4Olx0ICogdGhlIHN3YXAgZGV2aWNlIGFuZCwgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXJcbiAgIDk6XHQgKiB0aGFuIHJlYWRpbmcgZnJvbSB0aGUgc3dhcCBkZXZpY2UsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDEwOlx0ICpcbiAgMTE6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTIgIFNldGggSmVubmluZ3MgXHUwMDNjc2plbm5pbmdAbGludXgudm5ldC5pYm0uY29tXHUwMDNlXG4gIDEyOlx0Ki9cbiAgMTM6XHRcbiAgMTQ6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAxNTpcdFxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcF9vcHMuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyeXB0by5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcG9vbC5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2Fjb21wcmVzcy5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjY3J5cHRvL3NjYXR0ZXJ3YWxrLmhcdTAwM2VcbiAgMzA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gIDMxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuICAzMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZVxuICAzMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBvcHMuaFx1MDAzZVxuICAzNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gIDM1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gIDM2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAgMzc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gIDM4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuICAzOTpcdFxuICA0MDpcdCNpbmNsdWRlIFwmIzM0O3N3YXAuaFwmIzM0O1xuICA0MTpcdCNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAgNDI6XHRcbiAgNDM6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIDQ0Olx0KiBzdGF0aXN0aWNzXG4gIDQ1Olx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgNDY6XHQvKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cbiAgNDc6XHRhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gIDQ4Olx0LyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG4gIDQ5Olx0c3RhdGljIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbiAgNTA6XHRcbiAgNTE6XHQvKlxuICA1MjpcdCAqIFRoZSBzdGF0aXN0aWNzIGJlbG93IGFyZSBub3QgcHJvdGVjdGVkIGZyb20gY29uY3VycmVudCBhY2Nlc3MgZm9yXG4gIDUzOlx0ICogcGVyZm9ybWFuY2UgcmVhc29ucyBzbyB0aGV5IG1heSBub3QgYmUgYSAxMDAlIGFjY3VyYXRlLiAgSG93ZXZlcixcbiAgNTQ6XHQgKiB0aGV5IGRvIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHJvdWdobHkgaG93IG1hbnkgdGltZXMgYVxuICA1NTpcdCAqIGNlcnRhaW4gZXZlbnQgaXMgb2NjdXJyaW5nLlxuICA1NjpcdCovXG4gIDU3Olx0XG4gIDU4Olx0LyogUG9vbCBsaW1pdCB3YXMgaGl0IChzZWUgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCkgKi9cbiAgNTk6XHRzdGF0aWMgdTY0IHpzd2FwX3Bvb2xfbGltaXRfaGl0O1xuICA2MDpcdC8qIFBhZ2VzIHdyaXR0ZW4gYmFjayB3aGVuIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cbiAgNjE6XHRzdGF0aWMgdTY0IHpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcztcbiAgNjI6XHQvKiBTdG9yZSBmYWlsZWQgZHVlIHRvIGEgcmVjbGFpbSBmYWlsdXJlIGFmdGVyIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cbiAgNjM6XHRzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWw7XG4gIDY0Olx0LyogU3RvcmUgZmFpbGVkIGR1ZSB0byBjb21wcmVzc2lvbiBhbGdvcml0aG0gZmFpbHVyZSAqL1xuICA2NTpcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX2ZhaWw7XG4gIDY2Olx0LyogQ29tcHJlc3NlZCBwYWdlIHdhcyB0b28gYmlnIGZvciB0aGUgYWxsb2NhdG9yIHRvIChvcHRpbWFsbHkpIHN0b3JlICovXG4gIDY3Olx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfcG9vcjtcbiAgNjg6XHQvKiBMb2FkIG9yIHdyaXRlYmFjayBmYWlsZWQgZHVlIHRvIGRlY29tcHJlc3Npb24gZmFpbHVyZSAqL1xuICA2OTpcdHN0YXRpYyB1NjQgenN3YXBfZGVjb21wcmVzc19mYWlsO1xuICA3MDpcdC8qIFN0b3JlIGZhaWxlZCBiZWNhdXNlIHVuZGVybHlpbmcgYWxsb2NhdG9yIGNvdWxkIG5vdCBnZXQgbWVtb3J5ICovXG4gIDcxOlx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfYWxsb2NfZmFpbDtcbiAgNzI6XHQvKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB0aGUgZW50cnkgbWV0YWRhdGEgY291bGQgbm90IGJlIGFsbG9jYXRlZCAocmFyZSkgKi9cbiAgNzM6XHRzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbDtcbiAgNzQ6XHRcbiAgNzU6XHQvKiBTaHJpbmtlciB3b3JrIHF1ZXVlICovXG4gIDc2Olx0c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzaHJpbmtfd3E7XG4gIDc3Olx0LyogUG9vbCBsaW1pdCB3YXMgaGl0LCB3ZSBuZWVkIHRvIGNhbG0gZG93biAqL1xuICA3ODpcdHN0YXRpYyBib29sIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xuICA3OTpcdFxuICA4MDpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgODE6XHQqIHR1bmFibGVzXG4gIDgyOlx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgODM6XHRcbiAgODQ6XHQjZGVmaW5lIFpTV0FQX1BBUkFNX1VOU0VUIFwmIzM0O1wmIzM0O1xuICA4NTpcdFxuICA4NjpcdHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCk7XG4gIDg3Olx0XG4gIDg4Olx0LyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbiAgODk6XHRzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIHpzd2FwX2V2ZXJfZW5hYmxlZCk7XG4gIDkwOlx0c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xuICA5MTpcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxuICA5MjpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbiAgOTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfZW5hYmxlZF9wYXJhbV9vcHMgPSB7XG4gIDk0Olx0XHQuc2V0ID1cdFx0enN3YXBfZW5hYmxlZF9wYXJhbV9zZXQsXG4gIDk1Olx0XHQuZ2V0ID1cdFx0cGFyYW1fZ2V0X2Jvb2wsXG4gIDk2Olx0fTtcbiAgOTc6XHRtb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFx1MDAyNnpzd2FwX2VuYWJsZWQsIDA2NDQpO1xuICA5ODpcdFxuICA5OTpcdC8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xuIDEwMDpcdHN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbW0venN3YXAuY2AgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgYXJlYXMgdGhhdCBkcml2ZSB6c3dhcCYjMzk7cyBiZWhhdmlvciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93cy4KCioqWnN3YXAgRGVlcCBEaXZlOiBJbml0aWFsaXphdGlvbiBhbmQgQ29udHJvbCoqCgpSaWdodCwgc28gSSB3YW50IHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHpzd2FwIHBvb2wgaXMgY3JlYXRlZCBhbmQgbWFuYWdlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgYHpzd2FwX3Bvb2xfY3JlYXRlYCBjYWxscyDigJMgd2hvJiMzOTtzIHJlc3BvbnNpYmxlIGZvciBicmluZ2luZyB0aGlzIHRoaW5nIHRvIGxpZmU/IFdoYXQgYXJlIHRoZSBwYXJhbWV0ZXJzIGludm9sdmVkLCBhbmQgaG93IGRvIHRoZXkgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcz8gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBjb250ZW50aW9uIHBvaW50cyB3aXRoaW4gdGhlIHBvb2wmIzM5O3MgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMuCgpOZXh0LCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZW5hYmxpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCB0byBwaW5wb2ludCBob3cgenN3YXAmIzM5O3MgYmVoYXZpb3IgaXMgY29uZmlndXJlZCBhdCBydW50aW1lLiBBcmUgdGhlcmUgdHVuYWJsZSBwYXJhbWV0ZXJzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBzZXR0aW5ncyBvbiBzd2FwIGJlaGF2aW9yIGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZT8gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGNvbnNpZGVyYXRpb25zIGhlcmU/CgpGaW5hbGx5LCB0aGUgYHpzd2FwX3NldHVwYCBmdW5jdGlvbiBuZWVkcyBjYXJlZnVsIGV4YW1pbmF0aW9uLiBUaGlzIGlzIHByb2JhYmx5IHRoZSBtYXN0ZXIgc3dpdGNoLCB0aGUgcHJpbWFyeSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIHpzd2FwIHN5c3RlbS4gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIHBpY3R1cmUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBpbmNsdWRpbmcgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZS4gV2hlcmUgaXMgaXQgY2FsbGVkPyBXaGF0IHByZXJlcXVpc2l0ZXMgbXVzdCBiZSBzYXRpc2ZpZWQgYmVmb3JlIGl0IGNhbiBydW4/IFdoYXQgZG9lcyBpdCBzZXQgdXA/IEFueSBub24tb2J2aW91cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBNTSBzdWJzeXN0ZW1zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcG90ZW50aWFsIHByb2JsZW1zIHJlZ2FyZGluZyBOVU1BLCBhbmQgaG93IHpzd2FwIGludGVyZmFjZXMgd2l0aCB0aGF0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRhY29tcF9jdHgtXHUwMDNlYnVmZmVyID0gTlVMTDtcbiAyNzE6XHR9XG4gMjcyOlx0XG4gMjczOlx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIDI3NDpcdHtcbiAyNzU6XHRcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIDI3NjpcdFx0Y2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFxcMCAqL1xuIDI3NzpcdFx0aW50IHJldCwgY3B1O1xuIDI3ODpcdFxuIDI3OTpcdFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gMjgwOlx0XHRcdHJldHVybiBOVUxMO1xuIDI4MTpcdFxuIDI4MjpcdFx0cG9vbCA9IGt6YWxsb2Nfb2JqKCpwb29sKTtcbiAyODM6XHRcdGlmICghcG9vbClcbiAyODQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjg1Olx0XG4gMjg2Olx0XHQvKiB1bmlxdWUgbmFtZSBmb3IgZWFjaCBwb29sIHNwZWNpZmljYWxseSByZXF1aXJlZCBieSB6c21hbGxvYyAqL1xuIDI4NzpcdFx0c25wcmludGYobmFtZSwgMzgsIFwmIzM0O3pzd2FwJXhcJiMzNDssIGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnpzd2FwX3Bvb2xzX2NvdW50KSk7XG4gMjg4Olx0XHRwb29sLVx1MDAzZXpzX3Bvb2wgPSB6c19jcmVhdGVfcG9vbChuYW1lKTtcbiAyODk6XHRcdGlmICghcG9vbC1cdTAwM2V6c19wb29sKVxuIDI5MDpcdFx0XHRnb3RvIGVycm9yO1xuIDI5MTpcdFxuIDI5MjpcdFx0c3Ryc2NweShwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yLCBzaXplb2YocG9vbC1cdTAwM2V0Zm1fbmFtZSkpO1xuIDI5MzpcdFxuIDI5NDpcdFx0LyogTWFueSB0aGluZ3MgcmVseSBvbiB0aGUgemVyby1pbml0aWFsaXphdGlvbi4gKi9cbiAyOTU6XHRcdHBvb2wtXHUwMDNlYWNvbXBfY3R4ID0gYWxsb2NfcGVyY3B1X2dmcCgqcG9vbC1cdTAwM2VhY29tcF9jdHgsXG4gMjk2Olx0XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiAyOTc6XHRcdGlmICghcG9vbC1cdTAwM2VhY29tcF9jdHgpIHtcbiAyOTg6XHRcdFx0cHJfZXJyKFwmIzM0O3BlcmNwdSBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuIDI5OTpcdFx0XHRnb3RvIGVycm9yO1xuIDMwMDpcdFx0fVxuIDMwMTpcdFxuIDMwMjpcdFx0LypcbiAzMDM6XHRcdCAqIFRoaXMgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEhlbmNlLCBjb3Jlc1xuIDMwNDpcdFx0ICogY2Fubm90IGJlIG9mZmxpbmVkIHVudGlsIHRoaXMgZmluaXNoZXMuXG4gMzA1Olx0XHQgKi9cbiAzMDY6XHRcdHJldCA9IGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSxcbiAzMDc6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwb29sLVx1MDAzZW5vZGUpO1xuIDMwODpcdFxuIDMwOTpcdFx0LypcbiAzMTA6XHRcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxuIDMxMTpcdFx0ICogd2UgZG9uJiMzOTt0IHJlZ2lzdGVyIGEgaG90dW5wbHVnIGNhbGxiYWNrLlxuIDMxMjpcdFx0ICovXG4gMzEzOlx0XHRpZiAocmV0KVxuIDMxNDpcdFx0XHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xuIDMxNTpcdFxuIDMxNjpcdFx0LyogYmVpbmcgdGhlIGN1cnJlbnQgcG9vbCB0YWtlcyAxIHJlZjsgdGhpcyBmdW5jIGV4cGVjdHMgdGhlXG4gMzE3Olx0XHQgKiBjYWxsZXIgdG8gYWx3YXlzIGFkZCB0aGUgbmV3IHBvb2wgYXMgdGhlIGN1cnJlbnQgcG9vbFxuIDMxODpcdFx0ICovXG4gMzE5Olx0XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYsIF9fenN3YXBfcG9vbF9lbXB0eSxcbiAzMjA6XHRcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gMzIxOlx0XHRpZiAocmV0KVxuIDMyMjpcdFx0XHRnb3RvIHJlZl9mYWlsO1xuIDMyMzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiAzMjQ6XHRcbiAzMjU6XHRcdHpzd2FwX3Bvb2xfZGVidWcoXCYjMzQ7Y3JlYXRlZFwmIzM0OywgcG9vbCk7XG4gMzI2Olx0XG4gMzI3Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIDMyODpcdFxuIDMyOTpcdFx0cmV0dXJuIHBvb2w7XG4gMzMwOlx0XG4gMzMxOlx0cmVmX2ZhaWw6XG4gMzMyOlx0XHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gMzMzOlx0XG4gMzM0Olx0Y3B1aHBfYWRkX2ZhaWw6XG4gMzM1Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuIDMzNjpcdFx0XHRhY29tcF9jdHhfZnJlZShwZXJfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCwgY3B1KSk7XG4gMzM3Olx0ZXJyb3I6XG4gMzM4Olx0XHRpZiAocG9vbC1cdTAwM2VhY29tcF9jdHgpXG4gMzM5Olx0XHRcdGZyZWVfcGVyY3B1KHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiAzNDA6XHRcdGlmIChwb29sLVx1MDAzZXpzX3Bvb2wpXG4gMzQxOlx0XHRcdHpzX2Rlc3Ryb3lfcG9vbChwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIDM0MjpcdFx0a2ZyZWUocG9vbCk7XG4gMzQzOlx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0aWYgKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApIFx1MDAyNlx1MDAyNlxuIDM0OTpcdFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIGRpc2FibGluZyB6c3dhcCBhdCBib290IGFuZCB0aGVuIGVuYWJsaW5nIGl0IGxhdGVyIGR5bmFtaWNhbGx5LCB0aGlua2luZyBsaWtlIHRoZSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyIEkgYW06CgoqKkFuYWx5emluZyB6c3dhcCBJbml0aWFsaXphdGlvbiBhbmQgRHluYW1pYyBDb250cm9sKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXIuIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaG93IHRoZSB6c3dhcCBtZWNoYW5pc20gYmVoYXZlcyB3aGVuIGl0cyBpbml0aWFsIHN0YXRlIGlzIHNldCBkdXJpbmcgYm9vdCwgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIGVuYWJsaW5nIGl0IG9uLXRoZS1mbHksIHR5cGljYWxseSB0aHJvdWdoIHN5c2ZzIG9yIGEgbW9kdWxlIHBhcmFtZXRlciBjaGFuZ2UuIEZpcnN0IHVwLCBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSByZWFkIHRocm91Z2ggdGhlIGB6c3dhcF9zZXR1cGAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgZm91bmRhdGlvbiBvZiBob3cgenN3YXAgZ2V0cyBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBpdCB0YWtlcywgdGhlIHJlc291cmNlcyBpdCBhbGxvY2F0ZXMsIGFuZCBhbnkgZWFybHkgY2hlY2tzIGZvciBlbmFibGVkL2Rpc2FibGVkIHN0YXRlcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZG9uZSB3aGVuIHpzd2FwIGlzICpzdXBwb3NlZCogdG8gYmUgYWN0aXZlIGZyb20gdGhlIGJlZ2lubmluZywgYW5kIGlmIHRob3NlIGFjdGlvbnMgYXJlIHNraXBwZWQgb3IgZGVmZXJyZWQgd2hlbiBkaXNhYmxlZC4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgZHluYW1pYyBjb250cm9sLiBUaGlzIGZ1bmN0aW9uICptdXN0KiBoYW5kbGUgdGhlIHRyYW5zaXRpb24gZnJvbSBkaXNhYmxlZCB0byBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGxvZ2ljOiBEb2VzIGl0IHNpbXBseSByZS1leGVjdXRlIHBhcnRzIG9mIHRoZSBzZXR1cD8gRG9lcyBpdCBjYWxsIGEgc2VwYXJhdGUgZW5hYmxlIGZ1bmN0aW9uPyBEb2VzIGl0IHNhZmVseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGlmIHRob3NlIHRoaW5ncyBhcmUgbm90IHBlcmZvcm1lZCBkdXJpbmcgdGhlIGluaXRpYWwgYm9vdD8gSSB3aWxsIHdhbnQgdG8gY2hlY2sgaG93IGl0IGVuc3VyZXMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBvciB1bmluaXRpYWxpemVkLCBhcyB3ZWxsIGFzIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24uIEkgd2lsbCBwYXkgdmVyeSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgY29uY3VycmVuY3kgaXMgaGFuZGxlZCBzYWZlbHkuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW5hYmxpbmcgcGF0aC4gRG9lcyBpdCBwZXJmb3JtIGEgZnVsbCBzZXR1cCBlcXVpdmFsZW50IHRvIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiwgb3IgZG9lcyBpdCBjbGV2ZXJseSBza2lwIG9yIHJlLXVzZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZT8gV2hhdCByZXNvdXJjZXMgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5hZ2UsIGFuZCBob3cgaXMgaXQgZG9uZSBpbiBhIHRocmVhZC1zYWZlIG1hbm5lcj8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3Igb3IgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBhcmlzZSBmcm9tIHRoaXMgZHluYW1pYyBhcHByb2FjaD8gRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGRvY3VtZW50YXRpb24gY29tbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc4MDpcdFx0XHRwcl9lcnIoXCYjMzQ7ZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbjE3ODE6XHRcdFx0Z290byBjYWNoZV9mYWlsO1xuMTc4MjpcdFx0fVxuMTc4MzpcdFxuMTc4NDpcdFx0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsXG4xNzg1Olx0XHRcdFx0XHQgICAgICBcJiMzNDttbS96c3dhcF9wb29sOnByZXBhcmVcJiMzNDssXG4xNzg2Olx0XHRcdFx0XHQgICAgICB6c3dhcF9jcHVfY29tcF9wcmVwYXJlLFxuMTc4NzpcdFx0XHRcdFx0ICAgICAgTlVMTCk7XG4xNzg4Olx0XHRpZiAocmV0KVxuMTc4OTpcdFx0XHRnb3RvIGhwX2ZhaWw7XG4xNzkwOlx0XG4xNzkxOlx0XHRzaHJpbmtfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7enN3YXAtc2hyaW5rXCYjMzQ7LFxuMTc5MjpcdFx0XHRcdFdRX1VOQk9VTkR8V1FfTUVNX1JFQ0xBSU0sIDEpO1xuMTc5MzpcdFx0aWYgKCFzaHJpbmtfd3EpXG4xNzk0Olx0XHRcdGdvdG8gc2hyaW5rX3dxX2ZhaWw7XG4xNzk1Olx0XG4xNzk2Olx0XHR6c3dhcF9zaHJpbmtlciA9IHpzd2FwX2FsbG9jX3Nocmlua2VyKCk7XG4xNzk3Olx0XHRpZiAoIXpzd2FwX3Nocmlua2VyKVxuMTc5ODpcdFx0XHRnb3RvIHNocmlua2VyX2ZhaWw7XG4xNzk5Olx0XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcdTAwMjZ6c3dhcF9saXN0X2xydSwgenN3YXBfc2hyaW5rZXIpKVxuMTgwMDpcdFx0XHRnb3RvIGxydV9mYWlsO1xuMTgwMTpcdFx0c2hyaW5rZXJfcmVnaXN0ZXIoenN3YXBfc2hyaW5rZXIpO1xuMTgwMjpcdFxuMTgwMzpcdFx0SU5JVF9XT1JLKFx1MDAyNnpzd2FwX3Nocmlua193b3JrLCBzaHJpbmtfd29ya2VyKTtcbjE4MDQ6XHRcbjE4MDU6XHRcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XG4xODA2Olx0XHRpZiAocG9vbCkge1xuMTgwNzpcdFx0XHRwcl9pbmZvKFwmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXFxuXCYjMzQ7LCBwb29sLVx1MDAzZXRmbV9uYW1lKTtcbjE4MDg6XHRcdFx0bGlzdF9hZGQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4xODA5Olx0XHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbjE4MTA6XHRcdH0gZWxzZSB7XG4xODExOlx0XHRcdHByX2VycihcJiMzNDtwb29sIGNyZWF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4xODEyOlx0XHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbjE4MTM6XHRcdH1cbjE4MTQ6XHRcbjE4MTU6XHRcdGlmICh6c3dhcF9kZWJ1Z2ZzX2luaXQoKSlcbjE4MTY6XHRcdFx0cHJfd2FybihcJiMzNDtkZWJ1Z2ZzIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4xODE3Olx0XHR6c3dhcF9pbml0X3N0YXRlID0gWlNXQVBfSU5JVF9TVUNDRUVEO1xuMTgxODpcdFx0cmV0dXJuIDA7XG4xODE5Olx0XG4xODIwOlx0bHJ1X2ZhaWw6XG4xODIxOlx0XHRzaHJpbmtlcl9mcmVlKHpzd2FwX3Nocmlua2VyKTtcbjE4MjI6XHRzaHJpbmtlcl9mYWlsOlxuMTgyMzpcdFx0ZGVzdHJveV93b3JrcXVldWUoc2hyaW5rX3dxKTtcbjE4MjQ6XHRzaHJpbmtfd3FfZmFpbDpcbjE4MjU6XHRcdGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSk7XG4xODI2Olx0aHBfZmFpbDpcbjE4Mjc6XHRcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XG4xODI4Olx0Y2FjaGVfZmFpbDpcbjE4Mjk6XHRcdC8qIGlmIGJ1aWx0LWluLCB3ZSBhcmVuJiMzOTt0IHVubG9hZGVkIG9uIGZhaWx1cmU7IGRvbiYjMzk7dCBhbGxvdyB1c2UgKi9cbjE4MzA6XHRcdHpzd2FwX2luaXRfc3RhdGUgPSBaU1dBUF9JTklUX0ZBSUxFRDtcbjE4MzE6XHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbjE4MzI6XHRcdHJldHVybiAtRU5PTUVNO1xuMTgzMzpcdH1cbjE4MzQ6XHRcbjE4MzU6XHRzdGF0aWMgaW50IF9faW5pdCB6c3dhcF9pbml0KHZvaWQpXG4xODM2Olx0e1xuMTgzNzpcdFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuMTgzODpcdFx0XHRyZXR1cm4gMDtcbjE4Mzk6XHRcdHJldHVybiB6c3dhcF9zZXR1cCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjkwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB6c3dhcF9lbmFibGVkX3BhcmFtX3NldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YC4gV2hlbmV2ZXIgSSBlbmNvdW50ZXIgYSBwYXJhbWV0ZXIgd2l0aCBhIG5hbWUgbGlrZSB0aGF0LCBteSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwYXJzaW5nIGl0LiBJIHNlZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBhc3N1bWUgdGhpcyByZWxhdGVzIHRvIHRoZSBgenN3YXBgIGtlcm5lbCBtb2R1bGUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGEgYm9vbGVhbiB2YWx1ZSwgYSBmbGFnLiAmIzM0O0VuYWJsZWQmIzM0OyBpbiB0aGUgbmFtZSBpbXBsaWVzIHRoYXQgc2V0dGluZyBpdCB3aWxsIHRvZ2dsZSBzb21lIHNvcnQgb2YgZnVuY3Rpb25hbGl0eSBvbiBvciBvZmYgd2l0aGluIHRoZSB6c3dhcCBzdWJzeXN0ZW0uIFRoZSB1c2Ugb2YgJiMzNDtwYXJhbV9zZXQmIzM0OyBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGEgcnVudGltZSBjb25maWd1cmFibGUgcGFyYW1ldGVyLgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gSXMgdGhpcyBwYXJhbWV0ZXIgYSBzaW1wbGUgb24vb2ZmIHN3aXRjaCBmb3IgdGhlIGVudGlyZSB6c3dhcCBmdW5jdGlvbmFsaXR5LCBvciBkb2VzIGl0IGNvbnRyb2wgYSBzcGVjaWZpYyBhc3BlY3QsIHBlcmhhcHMgYSB0aHJlc2hvbGQsIG9yIGJlaGF2aW9yIHdpdGhpbiB0aGUgY29tcHJlc3NlZCBzd2FwIGNhY2hlPyBJZiBJIHdhbnRlZCB0byBpbnZlc3RpZ2F0ZSwgSSYjMzk7ZCBwcm9iYWJseSBsb29rIGF0IHRoZSBjb250ZXh0IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaXMgdXNlZC4gSSYjMzk7ZCBjaGVjayBob3cgaXQmIzM5O3MgZGVmaW5lZCAoZGF0YSB0eXBlLCBzY29wZSkgYW5kIGhvdyBpdCYjMzk7cyBhY3R1YWxseSAqdXNlZCogdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGFjdHVhbGx5IGNvbnRyb2xzLgoKTm93LCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIEnigJltIG1lbnRhbGx5IG1hcHBpbmcgb3V0IG15IGdvLXRvIGFyZWFzIGZvciB0aGlzLiBJJiMzOTttIHRoaW5raW5nIG9mIGNoZWNraW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZXMsIG9yIHVzaW5nIGBncmVwYCBvciBgZ2l0IGdyZXBgIHRvIGZpbmQgYWxsIHVzYWdlcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGEgY29tcGlsZS10aW1lIG9wdGlvbiAoZG91YnRmdWwsIGdpdmVuIHRoZSBuYW1lKSwgb3IgaWYgaXQmIzM5O3MgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzIG9yIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBgc3lzY3RsYC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCwgYXMgaXQgY2hhbmdlcyBob3cgSSYjMzk7ZCBhcHByb2FjaCBtb2RpZnlpbmcgb3IgZGVidWdnaW5nIHRoZSBzeXN0ZW0uCkkmIzM5O20gZ3Vlc3NpbmcgaXQgcmVsYXRlcyB0byBob3cgbXVjaCB6c3dhcCBpcyBiZWluZyB1dGlsaXplZCwgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHRoZSBwcmVzc3VyZSBiZWluZyBwdXQgb24gdGhlIHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBjb3VsZCBtYWtlIG15IHN5c3RlbSBtb3JlIHJlc3BvbnNpdmUgaWYgdHVuZWQgY29ycmVjdGx5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0c3RydWN0IGNyeXB0b19hY29tcCAqYWNvbXA7XG4gMTQxOlx0XHRzdHJ1Y3QgYWNvbXBfcmVxICpyZXE7XG4gMTQyOlx0XHRzdHJ1Y3QgY3J5cHRvX3dhaXQgd2FpdDtcbiAxNDM6XHRcdHU4ICpidWZmZXI7XG4gMTQ0Olx0XHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG4gMTQ1Olx0fTtcbiAxNDY6XHRcbiAxNDc6XHQvKlxuIDE0ODpcdCAqIFRoZSBsb2NrIG9yZGVyaW5nIGlzIHpzd2FwX3RyZWUubG9jayAtXHUwMDNlIHpzd2FwX3Bvb2wubHJ1X2xvY2suXG4gMTQ5Olx0ICogVGhlIG9ubHkgY2FzZSB3aGVyZSBscnVfbG9jayBpcyBub3QgYWNxdWlyZWQgd2hpbGUgaG9sZGluZyB0cmVlLmxvY2sgaXNcbiAxNTA6XHQgKiB3aGVuIGEgenN3YXBfZW50cnkgaXMgdGFrZW4gb2ZmIHRoZSBscnUgZm9yIHdyaXRlYmFjaywgaW4gdGhhdCBjYXNlIGl0XG4gMTUxOlx0ICogbmVlZHMgdG8gYmUgdmVyaWZpZWQgdGhhdCBpdCYjMzk7cyBzdGlsbCB2YWxpZCBpbiB0aGUgdHJlZS5cbiAxNTI6XHQgKi9cbiAxNTM6XHRzdHJ1Y3QgenN3YXBfcG9vbCB7XG4gMTU0Olx0XHRzdHJ1Y3QgenNfcG9vbCAqenNfcG9vbDtcbiAxNTU6XHRcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7XG4gMTU2Olx0XHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4gMTU3Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gMTU4Olx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xuIDE1OTpcdFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbiAxNjA6XHRcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gMTYxOlx0fTtcbiAxNjI6XHRcbiAxNjM6XHQvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gMTY0Olx0c3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiAxNjU6XHRcbiAxNjY6XHQvKiBUaGUgbG9jayBwcm90ZWN0cyB6c3dhcF9uZXh0X3NocmluayB1cGRhdGVzLiAqL1xuIDE2NzpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfc2hyaW5rX2xvY2spO1xuIDE2ODpcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqenN3YXBfbmV4dF9zaHJpbms7XG4gMTY5Olx0c3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCB6c3dhcF9zaHJpbmtfd29yaztcbiAxNzA6XHRzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAxNzE6XHRcbiAxNzI6XHQvKlxuIDE3MzpcdCAqIHN0cnVjdCB6c3dhcF9lbnRyeVxuIDE3NDpcdCAqXG4gMTc1Olx0ICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIG1ldGFkYXRhIGZvciB0cmFja2luZyBhIHNpbmdsZSBjb21wcmVzc2VkXG4gMTc2Olx0ICogcGFnZSB3aXRoaW4genN3YXAuXG4gMTc3Olx0ICpcbiAxNzg6XHQgKiBzd3BlbnRyeSAtIGFzc29jaWF0ZWQgc3dhcCBlbnRyeSwgdGhlIG9mZnNldCBpbmRleGVzIGludG8gdGhlIHhhcnJheVxuIDE3OTpcdCAqIGxlbmd0aCAtIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhLiAgTmVlZGVkIGR1cmluZ1xuIDE4MDpcdCAqICAgICAgICAgIGRlY29tcHJlc3Npb24uXG4gMTgxOlx0ICogcmVmZXJlbmNlZCAtIHRydWUgaWYgdGhlIGVudHJ5IHJlY2VudGx5IGVudGVyZWQgdGhlIHpzd2FwIHBvb2wuIFVuc2V0IGJ5IHRoZVxuIDE4MjpcdCAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXG4gMTgzOlx0ICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcbiAxODQ6XHQgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cbiAxODU6XHQgKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5JiMzOTtzIGRhdGEgaXMgaW5cbiAxODY6XHQgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAxODc6XHQgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAxODg6XHQgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXG4gMTg5Olx0ICovXG4gMTkwOlx0c3RydWN0IHpzd2FwX2VudHJ5IHtcbiAxOTE6XHRcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuIDE5MjpcdFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiAxOTM6XHRcdGJvb2wgcmVmZXJlbmNlZDtcbiAxOTQ6XHRcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIDE5NTpcdFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gMTk2Olx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gMTk3Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiAxOTg6XHR9O1xuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBac3dhcCBMYWJ5cmludGgqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGhvdyB6c3dhcCBpcyBjb25maWd1cmVkLCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBlbmFibGluZyBvZiBpdC4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHNldHRpbmcsIHRoaXMgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCwgaXMgbGlrZWx5IGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIHpzd2FwIGltcGxlbWVudGF0aW9uLiBTbywgbXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBtbS96c3dhcC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiwgdmFyaWFibGUsIG9yIHdoYXRldmVyIGl0IGlzIHRoYXQgbWFuYWdlcyB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiB0aGlzIGltcG9ydGFudCBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkmIzM5O20gZ29pbmcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX2VuYWJsZWRfcGFyYW1fc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTkwPXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6OTE6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTkyLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbm1tL3pzd2FwLmM9OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xubW0venN3YXAuYzo5NDpcdC5zZXQgPVx0XHR6c3dhcF9lbmFibGVkX3BhcmFtX3NldCxcbm1tL3pzd2FwLmMtOTUtXHQuZ2V0ID1cdFx0cGFyYW1fZ2V0X2Jvb2wsXG4tLVxubW0venN3YXAuYz01MzA9c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL3pzd2FwLmMtNjE4LVxubW0venN3YXAuYzo2MTk6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG5tbS96c3dhcC5jLTYyMC1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDYxNS02NjAgb2YgYG1tL3pzd2FwLmNgOgoKKipEaXZpbmcgaW50byB6c3dhcC5jJiMzOTtzIENvcmUgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA2MTUtNjYwLiBUaGUgY29udGV4dCBoZXJlLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGxpa2VseSBnb2luZyB0byBkZWFsIHdpdGggdGhlIGhlYXJ0IG9mIHpzd2FwJiMzOTtzIG9wZXJhdGlvbiDigJMgbGlrZWx5IGhvdyBpdCYjMzk7cyAqY2hvb3NpbmcqIHRoZSBwYWdlcyB0byBzd2FwIG91dCwgb3IgbWF5YmUgbWFuYWdpbmcgdGhlIHpwb29sIGl0c2VsZi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7ZCBndWVzcyB3ZSYjMzk7cmUgcGFzdCB0aGUgaW5pdGlhbCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiwgYW5kIG5vdyBhdCB0aGUgbW9yZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGxvb3BzIHRoYXQgbWlnaHQgYmUgZXhwZW5zaXZlLCBvciBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgY29tcHJlc3NlZCBkYXRhIHN0b3JlLCBhbmQgd2hldGhlciBpdCBoYW5kbGVzIG1lbW9yeSBtYW5hZ2VtZW50IGVmZmljaWVudGx5LiBBcmUgd2UgZGVhbGluZyB3aXRoIHBhZ2UgZmF1bHRzIGhlcmUsIG9yIGFyZSB0aGVzZSBwcm9hY3RpdmUgc3dhcHM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBtYWluIGRlY2lzaW9uIHBvaW50cyB3aXRoaW4gdGhpcyBibG9jayBvZiBjb2RlOiBXaGF0IGFyZSB0aGUgY3JpdGVyaWEgdXNlZCBmb3Igc2VsZWN0aW5nIHBhZ2VzPyBJcyB0aGUgZGF0YSBiZWluZyBjb21wcmVzc2VkIGVmZmljaWVudGx5PyBBbmQgaG93IGlzIHRoaXMgc2VsZWN0aW9uIGFmZmVjdGVkIGJ5IGdsb2JhbCBvciBsb2NhbCBtZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBzeXN0ZW0/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgcmVhZC93cml0ZSBvcGVyYXRpb25zIHRvIHRoZSBjb21wcmVzc2VkIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IGV4cGVjdGF0aW9ucywgYW5kIHdoZXJlIHRoZSBjb2RlIGFjdHVhbGx5IHN0YXJ0cyB0byAqZG8qIHNvbWV0aGluZyBjb25jcmV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTU6XHRcbiA2MTY6XHRcdHJldHVybiByZXQ7XG4gNjE3Olx0fVxuIDYxODpcdFxuIDYxOTpcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxuIDYyMDpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4gNjIxOlx0e1xuIDYyMjpcdFx0aW50IHJldCA9IC1FTk9ERVY7XG4gNjIzOlx0XG4gNjI0Olx0XHQvKiBpZiB0aGlzIGlzIGxvYWQtdGltZSAocHJlLWluaXQpIHBhcmFtIHNldHRpbmcsIG9ubHkgc2V0IHBhcmFtLiAqL1xuIDYyNTpcdFx0aWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORylcbiA2MjY6XHRcdFx0cmV0dXJuIHBhcmFtX3NldF9ib29sKHZhbCwga3ApO1xuIDYyNzpcdFxuIDYyODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ6c3dhcF9pbml0X2xvY2spO1xuIDYyOTpcdFx0c3dpdGNoICh6c3dhcF9pbml0X3N0YXRlKSB7XG4gNjMwOlx0XHRjYXNlIFpTV0FQX1VOSU5JVDpcbiA2MzE6XHRcdFx0aWYgKHpzd2FwX3NldHVwKCkpXG4gNjMyOlx0XHRcdFx0YnJlYWs7XG4gNjMzOlx0XHRcdGZhbGx0aHJvdWdoO1xuIDYzNDpcdFx0Y2FzZSBaU1dBUF9JTklUX1NVQ0NFRUQ6XG4gNjM1Olx0XHRcdGlmICghenN3YXBfaGFzX3Bvb2wpXG4gNjM2Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2NhbiYjMzk7dCBlbmFibGUsIG5vIHBvb2wgY29uZmlndXJlZFxcblwmIzM0Oyk7XG4gNjM3Olx0XHRcdGVsc2VcbiA2Mzg6XHRcdFx0XHRyZXQgPSBwYXJhbV9zZXRfYm9vbCh2YWwsIGtwKTtcbiA2Mzk6XHRcdFx0YnJlYWs7XG4gNjQwOlx0XHRjYXNlIFpTV0FQX0lOSVRfRkFJTEVEOlxuIDY0MTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y2FuJiMzOTt0IGVuYWJsZSwgaW5pdGlhbGl6YXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiA2NDI6XHRcdH1cbiA2NDM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6c3dhcF9pbml0X2xvY2spO1xuIDY0NDpcdFxuIDY0NTpcdFx0cmV0dXJuIHJldDtcbiA2NDY6XHR9XG4gNjQ3Olx0XG4gNjQ4Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDY0OTpcdCogbHJ1IGZ1bmN0aW9uc1xuIDY1MDpcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gNjUxOlx0XG4gNjUyOlx0Lyogc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBSQ1UgKi9cbiA2NTM6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjU0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gNjU1Olx0e1xuIDY1NjpcdFx0cmV0dXJuIGVudHJ5LVx1MDAzZW9iamNnID8gb2JqX2Nncm91cF9tZW1jZyhlbnRyeS1cdTAwM2VvYmpjZykgOiBOVUxMO1xuIDY1NzpcdH1cbiA2NTg6XHQjZWxzZVxuIDY1OTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIDY2MDpcdHtcbiA2NjE6XHRcdHJldHVybiBOVUxMO1xuIDY2MjpcdH1cbiA2NjM6XHQjZW5kaWZcbiA2NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgenN3YXBfcG9vbF9jcmVhdGVgIENhbGxzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgenN3YXBfcG9vbF9jcmVhdGVgIHdpdGhpbiB0aGUgYG1tL3pzd2FwLmNgIGZpbGUuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgYW5kIGhvdyB0aGUgenN3YXAgcG9vbCBpbml0aWFsaXphdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaXNuJiMzOTt0IHVzdWFsbHkgc29tZXRoaW5nIEkgaGF2ZSB0byByZXZpc2l0IGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIG9mIHRoZSB6c3dhcCBkZXNpZ24uIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZGVwZW5kZW5jaWVzIGFuZCB3aGVuIHRoZSBwb29sIGlzIGJyb3VnaHQgb25saW5lLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoZXJlIGVsc2UgaXQmIzM5O3MgYWN0dWFsbHkgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGNsYXJpZnkgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfcG9vbF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MjQ1PXN0YXRpYyB2b2lkIGFjb21wX2N0eF9mcmVlKHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHgpXG4tLVxubW0venN3YXAuYy0yNzItXG5tbS96c3dhcC5jOjI3MzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG5tbS96c3dhcC5jLTI3NC17XG4tLVxubW0venN3YXAuYy0zNDUtXG5tbS96c3dhcC5jOjM0NjpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbm1tL3pzd2FwLmMtMzQ3LXtcbi0tXG5tbS96c3dhcC5jLTM2MS1cbm1tL3pzd2FwLmM6MzYyOlx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYy0zNjMtfVxuLS1cbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTU3Mi1cdGlmICghcG9vbClcbm1tL3pzd2FwLmM6NTczOlx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTU3NC1cdGVsc2Uge1xuLS1cbm1tL3pzd2FwLmM9MTc3Mz1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODA0LVxubW0venN3YXAuYzoxODA1Olx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbm1tL3pzd2FwLmMtMTgwNi1cdGlmIChwb29sKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjA5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB6c3dhcF9uZXZlcl9lbmFibGVkYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHpzd2FwX25ldmVyX2VuYWJsZWRgIHBhcmFtZXRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCwgY3J1Y2lhbGx5LCB3aGVyZSBpbiB0aGUga2VybmVsIGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgYSBzeXNjdGwgb3Iga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIsIGdpdmVuIHRoZSBuYW1lLCBzbyB0aGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgdHJhY2luZyB0aGUgaW50ZXJhY3Rpb25zIGFyb3VuZCB0aGF0IHZhcmlhYmxlLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIHRoZSBhc3NpZ25tZW50cy4gVGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGxvZ2ljIGRlcGVuZHMgb24gaXRzIHZhbHVlLiBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24sIG9yIHJ1bnRpbWUgY29uZmlndXJhYmxlPyBJcyBpdCBhIGJvb2xlYW4gb3Igc29tZSBraW5kIG9mIGVudW1lcmF0ZWQgdmFsdWU/IEtub3dpbmcgaG93IHRoZSBjb25maWd1cmF0aW9uIGltcGFjdHMgenN3YXAgYmVoYXZpb3IgaXMgdGhlIGtleS4gSXMgdGhpcyB0byBkaXNhYmxlIG9yIHByZXZlbnQgenN3YXAgZnJvbSAqZXZlciogYmVpbmcgYWN0aXZlPyBPciBwZXJoYXBzIGEgcGFyYW1ldGVyIHRvIGluZmx1ZW5jZSBpbml0aWFsIHNldHVwIGJ1dCBwZXJtaXQgZW5hYmxpbmcgdmlhIG90aGVyIG1lY2hhbmlzbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBwcm92aWRlcyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHpzd2FwIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8ganVtcCB0byBjb25jbHVzaW9ucywgSSBtdXN0IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgZXhwbG9yYXRpb24gd2lsbCBsaWtlbHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBgenN3YXBgIGRyaXZlciBjb2RlLCBwcm9iYWJseSB3aXRoaW4gdGhlIGBtbWAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVjaXNpb25zIGFyZSBtYWRlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBmb3IgYW55IGV4cGxhbmF0aW9uIG9mIHRoZSBwYXJhbWV0ZXIgYW5kIGl0cyBpbnRlbmRlZCB1c2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfbmV2ZXJfZW5hYmxlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmg9MzY9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjM3OmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOC0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaD02Mj1zdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaC02Ni1cbmluY2x1ZGUvbGludXgvenN3YXAuaDo2NzpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY4LXtcbi0tXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4MTYtXHQgKi9cbm1tL21lbW9yeS5jOjQ4MTc6XHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL21lbW9yeS5jLTQ4MTgtXHRcdHJldHVybiAwO1xuLS1cbm1tL3NobWVtLmM9MjA0Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMDUyLVx0aWYgKCh2bWYgXHUwMDI2XHUwMDI2IHVubGlrZWx5KHVzZXJmYXVsdGZkX2FybWVkKHZtZi1cdTAwM2V2bWEpKSkgfHxcbm1tL3NobWVtLmM6MjA1MzpcdCAgICAgIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3NobWVtLmMtMjA1NC1cdFx0b3JkZXIgPSAwO1xuLS1cbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI5LVxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG4tLVxubW0venN3YXAuYz0xNTk2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNjA1LVxubW0venN3YXAuYzoxNjA2Olx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbm1tL3pzd2FwLmMtMTYwNy1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFpzd2FwIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHpzd2FwIHNldHVwLiBJIHNlZSB0aGF0IHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uIGlzIGtleTsgaXQmIzM5O3MgY2FsbGVkIGluIHR3byBzaWduaWZpY2FudCBwbGFjZXM6IGVpdGhlciB3aGVuIGEgdXNlciBzZXRzIHVwIGEgbmV3IGNvbXByZXNzb3IgdmlhIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIG9yIGR1cmluZyBpbml0aWFsIGB6c3dhcF9zZXR1cGAuIFRoZSB0cmlja3kgcGFydCB1c2VkIHRvIGJlIHRoZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDt6c3dhcF9ldmVyX2VuYWJsZWQpYCBjYWxsLCB3aGljaCB3YXMgcHJldmlvdXNseSBvbmx5IGluIGB6c3dhcF9zZXR1cGAuIFRoZSBwcm9ibGVtIEkgc2VlIHdpdGggdGhpcyBpcyB0aGF0IGlmIHRoZSBwb29sIGNyZWF0aW9uIGhhcHBlbnMgKmFmdGVyKiB0aGUgaW5pdGlhbCBzZXR1cOKAlGxldCYjMzk7cyBzYXkgdGhyb3VnaCBhIGxhdGVyIGNvbXByZXNzb3IgY29uZmlndXJhdGlvbuKAlG9yIGlmIGB6c3dhcF9wb29sX2NyZWF0ZWAgc3VjY2VlZHMgaW5kZXBlbmRlbnRseSwgdGhlbiB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgc3RhdGljIGtleSBub3QgYmVpbmcgZW5hYmxlZCB3aGVuIGl0IHNob3VsZCBiZS4KClRoZSBzb2x1dGlvbiBpcyBjbGV2ZXI6IG1vdmUgYHN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKWAgKmludG8qIGB6c3dhcF9wb29sX2NyZWF0ZWAuIFRoaXMgZ3VhcmFudGVlcyB0aGF0ICpldmVyeSogdGltZSBhIHpzd2FwIHBvb2wgaXMgYWN0dWFsbHkgY3JlYXRlZOKAlG5vIG1hdHRlciB0aGUgdHJpZ2dlcuKAlHRoZSBzdGF0aWMga2V5IHdpbGwgYmUgZW5hYmxlZC4gVGhpcyBwcm92aWRlcyBhIG1vcmUgcm9idXN0IGFuZCBwcmVkaWN0YWJsZSB6c3dhcCBiZWhhdmlvciwgZXNwZWNpYWxseSBkdXJpbmcgcnVudGltZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuIEl0JiMzOTtzIGEgbmljZSwgY2xlYW4gd2F5IHRvIGVuc3VyZSB0aGF0IHRoZSB6c3dhcCBmZWF0dXJlIGlzIGNvcnJlY3RseSBhY3RpdmF0ZWQgd2hlbiB0aGUgdW5kZXJseWluZyByZXNvdXJjZXMgYXJlIGFjdHVhbGx5IHJlYWR5LiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX1pTV0FQYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENPTkZJR19aU1dBUGAuIE15IGZpcnN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBmb3IgYFpTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgY29uZmxpY3Qgd2l0aCB0aGlzIG9uZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcbiAgNDM6XHRcdCAgY29tbWFuZCBsaW5lICYjMzk7enN3YXAuZW5hYmxlZD0mIzM5OyBvcHRpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbiAgNDY6XHRcdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuICA0NzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICA0ODpcdFx0ZGVmYXVsdCBuXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXG4gIDUxOlx0XHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxuICA1MjpcdFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyMgoJCQkJCQkJb3V0cHV0OiA5MAoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFpzd2FwOiBBIFdvcnRoeSBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB0aGUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS4gRmlyc3QsIHJlYWNoYWJpbGl0eSBpcyBrZXkuIFRoaXMgY29kZSBkaXZlcyByaWdodCBpbnRvIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0ZXJyaXRvcnkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyIGlzIGFub3RoZXIgc3Ryb25nIHBvaW50LiBEeW5hbWljIGNvbmZpZ3VyYXRpb24gb2YgenN3YXAgdGhyb3VnaCBzeXNmcyBpcyBwcmFjdGljYWxseSBiZWdnaW5nIHRvIGJlIGZ1enplZCwgYW5kIHRoZW4gd2UgaGF2ZSBzdGF0aWMgYnJhbmNoIGZsaXBwaW5nIGFzIHdlbGwuIFRoYXQgYWZmZWN0cyBrZXkgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgYW5kIGB6c3dhcF9sb2FkKClgLgoKR2l2ZW4gdGhhdCByZWFjaGFiaWxpdHkgYW5kIHRoZSBpbXBhY3QsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaGFzIHN0cm9uZyBwb3RlbnRpYWwuIFRoZSB2ZXJkaWN0OiBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBwaW4gZG93biB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW46IGB6c3dhcF9wb29sX2NyZWF0ZWAsIGB6c3dhcF9zZXR1cGAsIGB6c3dhcF9uZXZlcl9lbmFibGVkYCwgYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCwgYHpzd2FwX2xvYWRgLCBhbmQgYHpzd2FwX3N0b3JlYC4gSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhbmQgZGVmaW5pdGlvbnMgZGlyZWN0bHkgaW4gYG1tL3pzd2FwLmNgIHRvIGJlIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgXFwqenN3YXBfcG9vbF9jcmVhdGV8XnN0YXRpYyBpbnQgenN3YXBfc2V0dXB8XmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZHxec3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldHxec3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldHxeYm9vbCB6c3dhcF9zdG9yZXxeaW50IHpzd2FwX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9Nzg9c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XG4tLVxubW0venN3YXAuYy04NS1cbm1tL3pzd2FwLmM6ODY6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcbm1tL3pzd2FwLmMtODctXG4tLVxubW0venN3YXAuYz05MD1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jOjkxOnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxubW0venN3YXAuYy05Mi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XG4tLVxubW0venN3YXAuYz0xMDA9c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYzoxMDE6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTEwMi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XG4tLVxubW0venN3YXAuYz0xMjU9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4tLVxubW0venN3YXAuYy0xMjktXG5tbS96c3dhcC5jOjEzMDpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcbm1tL3pzd2FwLmMtMTMxLXtcbi0tXG5tbS96c3dhcC5jPTI0NT1zdGF0aWMgdm9pZCBhY29tcF9jdHhfZnJlZShzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4KVxuLS1cbm1tL3pzd2FwLmMtMjcyLVxubW0venN3YXAuYzoyNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxubW0venN3YXAuYy0yNzQte1xuLS1cbm1tL3pzd2FwLmM9NTExPXN0YXRpYyBib29sIHpzd2FwX2NoZWNrX2xpbWl0cyh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtNTI5LVxubW0venN3YXAuYzo1MzA6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxubW0venN3YXAuYy01MzEte1xuLS1cbm1tL3pzd2FwLmMtNjE4LVxubW0venN3YXAuYzo2MTk6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG5tbS96c3dhcC5jLTYyMC1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL3pzd2FwLmM9MTQxMD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQ4OS1cbm1tL3pzd2FwLmM6MTQ5MDpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTE0OTEte1xuLS1cbm1tL3pzd2FwLmMtMTU5NS0gKi9cbm1tL3pzd2FwLmM6MTU5NjppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTk3LXtcbi0tXG5tbS96c3dhcC5jPTE3NjQ9c3RhdGljIGludCB6c3dhcF9kZWJ1Z2ZzX2luaXQodm9pZClcbi0tXG5tbS96c3dhcC5jLTE3NzItKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MTc3MzpzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG5tbS96c3dhcC5jLTE3NzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NgoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8genN3YXAuIEZpcnN0LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19TV0FQYCBpcyBlbmFibGVkLCBhcyBgWlNXQVBgIGluaGVyZW50bHkgZGVwZW5kcyBvbiBpdC4gVGhlbiwgb2YgY291cnNlLCBgQ09ORklHX1pTV0FQYCBpdHNlbGYgbXVzdCBiZSBzZXQuIEkmIzM5O2xsIG5lZWQgdG8gcnVuIGEgY2hlY2sgdG8gZW5zdXJlIG5vIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBgWlNXQVBgIGFsc28gcmVsaWVzIG9uIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBTbywgSSYjMzk7bGwgYWRkIHRob3NlIHRvIG15IGVuYWJsZW1lbnQgbGlzdC4gTXkgRW5hYmxlQ29uZmlncyBhcmU6IGBbJiMzNDtTV0FQJiMzNDssICYjMzQ7WlNXQVAmIzM0O11gLgoKTm93LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhlIHpzd2FwIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZDogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3NldHVwYCwgYHpzd2FwX25ldmVyX2VuYWJsZWRgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX2xvYWRgLgoKRmluYWxseSwgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfcG9vbF9jcmVhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfc2V0dXAmIzM0OywKICAgICYjMzQ7enN3YXBfbmV2ZXJfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF9lbmFibGVkX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIG1vdmluZyB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgenN3YXBfZXZlcl9lbmFibGVkIHN0YXRpYyBrZXkgZnJvbSB6c3dhcF9zZXR1cCgpIGludG8genN3YXBfcG9vbF9jcmVhdGUoKS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB6c3dhcF9uZXZlcl9lbmFibGVkKCkgYW5kIGFmZmVjdHMgcnVudGltZSBjaGVja3MgZHVyaW5nIHN3YXAgb3BlcmF0aW9ucyBhbmQgc3lzZnMgcGFyYW1ldGVyIHJlY29uZmlndXJhdGlvbi4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3Bvb2xfY3JlYXRlJiMzNDssCiAgICAmIzM0O3pzd2FwX3NldHVwJiMzNDssCiAgICAmIzM0O3pzd2FwX25ldmVyX2VuYWJsZWQmIzM0OywKICAgICYjMzQ7enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQmIzM0OywKICAgICYjMzQ7enN3YXBfZW5hYmxlZF9wYXJhbV9zZXQmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCBtb3ZpbmcgdGhlIGFjdGl2YXRpb24gb2YgdGhlIHpzd2FwX2V2ZXJfZW5hYmxlZCBzdGF0aWMga2V5IGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCkuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenN3YXBfbmV2ZXJfZW5hYmxlZCgpIGFuZCBhZmZlY3RzIHJ1bnRpbWUgY2hlY2tzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMgYW5kIHN5c2ZzIHBhcmFtZXRlciByZWNvbmZpZ3VyYXRpb24uIEl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpIGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCksIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpYyBicmFuY2ggdHJhY2tpbmcgd2hldGhlciB6c3dhcCB3YXMgZXZlciBlbmFibGVkIGlzIGFjdGl2YXRlZCB3aGVuZXZlciBhIHpzd2FwIHBvb2wgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGUuZy4sIHdoZW4gZHluYW1pY2FsbHkgY29uZmlndXJlZCB2aWEgc3lzZnMvcGFyYW1ldGVycykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Nzk1YWRjOTVmMjFhYmMwYzM2MTRmMWQ3ZTM3YzM5Yjc4MzE4ZWViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMzo0Mjo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzI0LDYgJiM0MzszMjQsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAomIzQzOwlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7CiYjNDM7CiAJcmV0dXJuIHBvb2w7CiAKIHJlZl9mYWlsOgpAQCAtMTgwNSw3ICYjNDM7MTgwNyw2IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCkKIAkJcHJfaW5mbygmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXG4mIzM0OywgcG9vbC0mZ3Q7dGZtX25hbWUpOwogCQlsaXN0X2FkZCgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7Ci0JCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTsKIAl9IGVsc2UgewogCQlwcl9lcnIoJiMzNDtwb29sIGNyZWF0aW9uIGZhaWxlZFxuJiMzNDspOwogCQl6c3dhcF9lbmFibGVkID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUxCgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2gqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIGEgcGF0Y2ggd2l0aGluIHRoZSBgbW0venN3YXAuY2AgZmlsZS4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAqaW50ZXJlc3RpbmcqLiBac3dhcCwgYXMgYSBjb21wcmVzc2VkIHN3YXAgY2FjaGUsIGNhbiBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGFuZCBhbnkgbW9kaWZpY2F0aW9uIHRoZXJlIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBnZXQgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggaXRzZWxmLgoKSSYjMzk7bGwgc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgb2YgYG1tL3pzd2FwLmNgIGRpcmVjdGx5LiBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZTsgdGhlIGxpbmUgbnVtYmVycyBhcmUgYSBnb29kIHN0YXJ0LCBidXQgdGhleSBkb24mIzM5O3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIEkmIzM5O2xsIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIG15IHByZWZlcnJlZCBmaWxlIHJlYWRpbmcgdG9vbCAobGlrZWx5IHNvbWV0aGluZyBsaWtlIGBsZXNzYCBvciBhbiBlZGl0b3Igd2l0aCBnb29kIHNlYXJjaCBjYXBhYmlsaXRpZXMpIHRvIGxvb2sgYXJvdW5kIGxpbmVzIDMyNCBhbmQgMTgwNSBpbiBgbW0venN3YXAuY2AuIEkgbmVlZCBjb250ZXh0ISBXaGF0IGZ1bmN0aW9ucyBhcmUgYXJvdW5kIHRob3NlIGxpbmVzPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gV2hhdCYjMzk7cyB0aGUgZ2VuZXJhbCBmbG93IG9mIGV4ZWN1dGlvbiBpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGU/IElzIHRoaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLCBvciBhIG1vcmUgcGVyaXBoZXJhbCBmdW5jdGlvbj8gVGhhdCBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIGl0cyBsaWtlbHkgaW50ZW50LiBUaGUgZ29hbCBhdCB0aGlzIHN0YWdlIGlzIHRvIGlkZW50aWZ5IHdoZXJlIHRoZSBjaGFuZ2UgaXMgYmVpbmcgbWFkZSBhbmQgd2h5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxuIDMxMTpcdFx0ICogd2UgZG9uJiMzOTt0IHJlZ2lzdGVyIGEgaG90dW5wbHVnIGNhbGxiYWNrLlxuIDMxMjpcdFx0ICovXG4gMzEzOlx0XHRpZiAocmV0KVxuIDMxNDpcdFx0XHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xuIDMxNTpcdFxuIDMxNjpcdFx0LyogYmVpbmcgdGhlIGN1cnJlbnQgcG9vbCB0YWtlcyAxIHJlZjsgdGhpcyBmdW5jIGV4cGVjdHMgdGhlXG4gMzE3Olx0XHQgKiBjYWxsZXIgdG8gYWx3YXlzIGFkZCB0aGUgbmV3IHBvb2wgYXMgdGhlIGN1cnJlbnQgcG9vbFxuIDMxODpcdFx0ICovXG4gMzE5Olx0XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYsIF9fenN3YXBfcG9vbF9lbXB0eSxcbiAzMjA6XHRcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gMzIxOlx0XHRpZiAocmV0KVxuIDMyMjpcdFx0XHRnb3RvIHJlZl9mYWlsO1xuIDMyMzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiAzMjQ6XHRcbiAzMjU6XHRcdHpzd2FwX3Bvb2xfZGVidWcoXCYjMzQ7Y3JlYXRlZFwmIzM0OywgcG9vbCk7XG4gMzI2Olx0XG4gMzI3Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIDMyODpcdFxuIDMyOTpcdFx0cmV0dXJuIHBvb2w7XG4gMzMwOlx0XG4gMzMxOlx0cmVmX2ZhaWw6XG4gMzMyOlx0XHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gMzMzOlx0XG4gMzM0Olx0Y3B1aHBfYWRkX2ZhaWw6XG4gMzM1Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuIDMzNjpcdFx0XHRhY29tcF9jdHhfZnJlZShwZXJfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCwgY3B1KSk7XG4gMzM3Olx0ZXJyb3I6XG4gMzM4Olx0XHRpZiAocG9vbC1cdTAwM2VhY29tcF9jdHgpXG4gMzM5Olx0XHRcdGZyZWVfcGVyY3B1KHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiAzNDA6XHRcdGlmIChwb29sLVx1MDAzZXpzX3Bvb2wpXG4gMzQxOlx0XHRcdHpzX2Rlc3Ryb3lfcG9vbChwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIDM0MjpcdFx0a2ZyZWUocG9vbCk7XG4gMzQzOlx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHR9XG4gMzQ1Olx0XG4gMzQ2Olx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0aWYgKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApIFx1MDAyNlx1MDAyNlxuIDM0OTpcdFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3OTA6XHRcbjE3OTE6XHRcdHNocmlua193cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDt6c3dhcC1zaHJpbmtcJiMzNDssXG4xNzkyOlx0XHRcdFx0V1FfVU5CT1VORHxXUV9NRU1fUkVDTEFJTSwgMSk7XG4xNzkzOlx0XHRpZiAoIXNocmlua193cSlcbjE3OTQ6XHRcdFx0Z290byBzaHJpbmtfd3FfZmFpbDtcbjE3OTU6XHRcbjE3OTY6XHRcdHpzd2FwX3Nocmlua2VyID0genN3YXBfYWxsb2Nfc2hyaW5rZXIoKTtcbjE3OTc6XHRcdGlmICghenN3YXBfc2hyaW5rZXIpXG4xNzk4Olx0XHRcdGdvdG8gc2hyaW5rZXJfZmFpbDtcbjE3OTk6XHRcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCB6c3dhcF9zaHJpbmtlcikpXG4xODAwOlx0XHRcdGdvdG8gbHJ1X2ZhaWw7XG4xODAxOlx0XHRzaHJpbmtlcl9yZWdpc3Rlcih6c3dhcF9zaHJpbmtlcik7XG4xODAyOlx0XG4xODAzOlx0XHRJTklUX1dPUksoXHUwMDI2enN3YXBfc2hyaW5rX3dvcmssIHNocmlua193b3JrZXIpO1xuMTgwNDpcdFxuMTgwNTpcdFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbjE4MDY6XHRcdGlmIChwb29sKSB7XG4xODA3Olx0XHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cJiMzNDssIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuMTgwODpcdFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbjE4MDk6XHRcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuMTgxMDpcdFx0fSBlbHNlIHtcbjE4MTE6XHRcdFx0cHJfZXJyKFwmIzM0O3Bvb2wgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbjE4MTI6XHRcdFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xuMTgxMzpcdFx0fVxuMTgxNDpcdFxuMTgxNTpcdFx0aWYgKHpzd2FwX2RlYnVnZnNfaW5pdCgpKVxuMTgxNjpcdFx0XHRwcl93YXJuKFwmIzM0O2RlYnVnZnMgaW5pdGlhbGl6YXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbjE4MTc6XHRcdHpzd2FwX2luaXRfc3RhdGUgPSBaU1dBUF9JTklUX1NVQ0NFRUQ7XG4xODE4Olx0XHRyZXR1cm4gMDtcbjE4MTk6XHRcbjE4MjA6XHRscnVfZmFpbDpcbjE4MjE6XHRcdHNocmlua2VyX2ZyZWUoenN3YXBfc2hyaW5rZXIpO1xuMTgyMjpcdHNocmlua2VyX2ZhaWw6XG4xODIzOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShzaHJpbmtfd3EpO1xuMTgyNDpcdHNocmlua193cV9mYWlsOlxuMTgyNTpcdFx0Y3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFKTtcbjE4MjY6XHRocF9mYWlsOlxuMTgyNzpcdFx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcbjE4Mjg6XHRjYWNoZV9mYWlsOlxuMTgyOTpcdFx0LyogaWYgYnVpbHQtaW4sIHdlIGFyZW4mIzM5O3QgdW5sb2FkZWQgb24gZmFpbHVyZTsgZG9uJiMzOTt0IGFsbG93IHVzZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB6c3dhcCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgenN3YXBfZXZlcl9lbmFibGVkYCBpcyBhY3R1YWxseSBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXQmIzM5O3MgYSBrZXkgdmFyaWFibGUsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgenN3YXAgKG9yIGxhY2sgdGhlcmVvZikgaW4gdGhpcyBjb250ZXh0LiBUaW1lIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgcmVhZCBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9ldmVyX2VuYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz04Nj1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpO1xuLS1cbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cbm1tL3pzd2FwLmM6ODk6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCB6c3dhcF9ldmVyX2VuYWJsZWQpO1xubW0venN3YXAuYy05MC1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XG4tLVxubW0venN3YXAuYz0xMzA9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMS17XG5tbS96c3dhcC5jOjEzMjpcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmMtMTMzLX1cbi0tXG5tbS96c3dhcC5jPTI3Mz1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4tLVxubW0venN3YXAuYy0zMjYtXG5tbS96c3dhcC5jOjMyNzpcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jLTMyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBac3dhcCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgenN3YXAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQsIG9yIG1vcmUgc3BlY2lmaWNhbGx5LCB3aGVyZSB0aGUgZGVjaXNpb24gdG8gKm5vdCogZW5hYmxlIGl0IGlzIG1hZGUuIE15IGZpcnN0IG1vdmUgaXMgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgcG9pbnRzIGluIHRoZSBjb2RlIHJlbGF0ZWQgdG8genN3YXAuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdW5kZXIgd2hpY2ggY29uZGl0aW9ucyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAgaXMgc2V0IG9yLCBjb252ZXJzZWx5LCB3aGVuIHRoZSB6c3dhcCBwb29sIGlzIGNyZWF0ZWQgYnkgY2FsbHMgdG8gYHpzd2FwX3Bvb2xfY3JlYXRlYC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IHRoZSBzZXR0aW5nIG9mIHRoaXMgdmFyaWFibGUgaW5mbHVlbmNlcyBzdWJzZXF1ZW50IGFjdGlvbnMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBhIGJpdCBvZiBgZ3JlcGAgb3Igc2ltaWxhciwgdG8gZmluZCBhbGwgY2FsbCBzaXRlcywgdGhlbiBqdW1waW5nIGludG8gdGhlIG1vc3QgcmVsZXZhbnQgdG8gdHJhY2sgZG93biB0aGUgaXNzdWUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX25ldmVyX2VuYWJsZWR8enN3YXBfcG9vbF9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC96c3dhcC5oPTM2PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaDozNzpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMzgtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NjI9c3RhdGljIGlubGluZSBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjYtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Njc6c3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgvenN3YXAuaC02OC17XG4tLVxubW0vbWVtb3J5LmM9NDc5NT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODE2LVx0ICovXG5tbS9tZW1vcnkuYzo0ODE3Olx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG5tbS9tZW1vcnkuYy00ODE4LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9zaG1lbS5jPTIwNDM9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL3NobWVtLmMtMjA1Mi1cdGlmICgodm1mIFx1MDAyNlx1MDAyNiB1bmxpa2VseSh1c2VyZmF1bHRmZF9hcm1lZCh2bWYtXHUwMDNldm1hKSkpIHx8XG5tbS9zaG1lbS5jOjIwNTM6XHQgICAgICF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG5tbS9zaG1lbS5jLTIwNTQtXHRcdG9yZGVyID0gMDtcbi0tXG5tbS96c3dhcC5jPTEyNT1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyOS1cbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xuLS1cbm1tL3pzd2FwLmM9MjQ1PXN0YXRpYyB2b2lkIGFjb21wX2N0eF9mcmVlKHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHgpXG4tLVxubW0venN3YXAuYy0yNzItXG5tbS96c3dhcC5jOjI3MzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG5tbS96c3dhcC5jLTI3NC17XG4tLVxubW0venN3YXAuYy0zNDUtXG5tbS96c3dhcC5jOjM0NjpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbm1tL3pzd2FwLmMtMzQ3LXtcbi0tXG5tbS96c3dhcC5jLTM2MS1cbm1tL3pzd2FwLmM6MzYyOlx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xubW0venN3YXAuYy0zNjMtfVxuLS1cbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTU3Mi1cdGlmICghcG9vbClcbm1tL3pzd2FwLmM6NTczOlx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTU3NC1cdGVsc2Uge1xuLS1cbm1tL3pzd2FwLmM9MTU5Nj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTYwNS1cbm1tL3pzd2FwLmM6MTYwNjpcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG5tbS96c3dhcC5jLTE2MDctXHRcdHJldHVybiAtRU5PRU5UO1xuLS1cbm1tL3pzd2FwLmM9MTc3Mz1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODA0LVxubW0venN3YXAuYzoxODA1Olx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbm1tL3pzd2FwLmMtMTgwNi1cdGlmIChwb29sKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2g6IEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgbW92ZWQgdGhlIGBzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZClgIGNhbGwgZnJvbSBgenN3YXBfc2V0dXAoKWAgdG8gYHpzd2FwX3Bvb2xfY3JlYXRlKClgLiBUaGUgcmF0aW9uYWxlIGlzIHRvIGVuc3VyZSB0aGUgc3RhdGljIGtleSBpcyBlbmFibGVkIHdoZW5ldmVyICphbnkqIHpzd2FwIHBvb2wgaXMgY3JlYXRlZCwgYWRkcmVzc2luZyBzY2VuYXJpb3Mgd2hlcmUgenN3YXAgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgZGVsYXllZCBvciB0cmlnZ2VyZWQgZHluYW1pY2FsbHkuIE1ha2VzIHNlbnNlLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2l0aCB0aGlzIG1vdmU/IFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrcy4gTm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgbm8gY2hhbmdlcyB0byBzdHJ1Y3QgZmllbGQgaW5pdGlhbGl6YXRpb24sIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBzdGF0aWMgYnJhbmNoIGVuYWJsZW1lbnQgaXMgcHVyZWx5IGEgYm9vbGVhbiBmbGFnLCBzbyBpdCYjMzk7cyBhIGp1bXAgdGFibGUgbW9kaWZpY2F0aW9uLgoKR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRob3NlIGtpbmRzIG9mIHByb2JsZW1zLiBUaGlzIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCB0aGUgKnNldHRpbmcqIG9mIGEgYm9vbGVhbiB0aGF0IGNvbnRyb2xzIGEganVtcC4gU3RhbmRhcmQgS0FTQU4gY292ZXJhZ2UgYW5kIGJ1ZyBkZXRlY3Rpb24gdG9vbHMgc2hvdWxkIGhhbmRsZSB0aGF0LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKVG8gc29saWRpZnkgdGhlIHJlYXNvbmluZywgbGV0JiMzOTtzIGNsYXJpZnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIEtBU0FOIGNhdGNoZXMgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZ2VhcmVkIHRvd2FyZHMgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IGRhdGEgYnVmZmVycywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLCBhbmQgaXQmIzM5O3Mgc2ltcGx5IGVuYWJsaW5nIGEgc3RhdGljIGJyYW5jaCBiYXNlZCBvbiB0aGUgc3VjY2VzcyBvZiBwb29sIGNyZWF0aW9uLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpBbHJpZ2h0LCB0aW1lIHRvIHRyaWdnZXIgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBzdGF0aWMga2V5IC8gYnJhbmNoIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBzdGF0aWMga2V5IC8gYnJhbmNoIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0My40NjkyOTUzMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzExNDQ4OTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9zZXR1cFwiLFxuICAgIFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0My40NjkzMDI4NzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMzc3NTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMzo0Mjo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMzI0LDYgKzMyNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4gXFxuIFxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImNyZWF0ZWRcXFwiLCBwb29sKTtcXG4gXFxuK1xcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbitcXG4gXFx0cmV0dXJuIHBvb2w7XFxuIFxcbiByZWZfZmFpbDpcXG5AQCAtMTgwNSw3ICsxODA3LDYgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbiBcXHRcXHRwcl9pbmZvKFxcXCJsb2FkZWQgdXNpbmcgcG9vbCAlc1xcXFxuXFxcIiwgcG9vbC1cXHUwMDNldGZtX25hbWUpO1xcbiBcXHRcXHRsaXN0X2FkZChcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFx0XFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xcbi1cXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJwb29sIGNyZWF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDI6NDQuMDc2NTcxMTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNzg4ODk1OTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9zZXR1cFwiLFxuICAgIFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzI0LDYgKzMyNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJjcmVhdGVkXCIsIHBvb2wpO1xuIFxuK1x0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbitcbiBcdHJldHVybiBwb29sO1xuIFxuIHJlZl9mYWlsOlxuQEAgLTE4MDUsNyArMTgwNyw2IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuLVx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfZXJyKFwicG9vbCBjcmVhdGlvbiBmYWlsZWRcXG5cIik7XG4gXHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjQ0LjA3NjU3NDAwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODAyMzIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcGF0Y2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgd2l0aGluIGBtbS96c3dhcC5jYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyBjZW50ZXJlZCBhcm91bmQgYHpzd2FwX2V2ZXJfZW5hYmxlZGAuXG5cbkxvb2tpbmcgYXQgdGhlIGRldGFpbHMsIGl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO2Agd2l0aGluIHRoZSBgenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilgIGZ1bmN0aW9uLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IHRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IFpzd2FwJ3MgaW5pdGlhbGl6YXRpb24gaW50ZXJhY3RzIHdpdGggc3RhdGljIGJyYW5jaGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO2AgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBgenN3YXBfc2V0dXAodm9pZClgIGZ1bmN0aW9uLiBUaGlzIHBvaW50cyB0b3dhcmQgYSBjaGFuZ2UgaW4gKndoZW4qIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBgbW0venN3YXAuY2AgaXRzZWxmLiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjYWxsIHRvIHF1aWNrbHkgc2NhbiB0aGUgZmlsZSwgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIHNlZSB3aGF0IHRoZSBpbnRlbnRpb25zIG9mIHRoZXNlIHNlZW1pbmdseSBjb250cmFyeSBhbHRlcmF0aW9ucyBhcmUuIEFyZSB0aGV5IGludGVuZGVkIHRvIGRlbGF5IGZlYXR1cmUgZW5hYmxlbWVudCB1bnRpbCByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciwgcGVyaGFwcywgZW5zdXJlIHRoYXQgYSB1c2VyIGNhbiB0dXJuIHRoZSBmZWF0dXJlIG9mZiBzYWZlbHkgYWZ0ZXIgYm9vdGluZywgb3IgaXMgdGhlcmUgYSBiaWdnZXIgY2hhbmdlIGhhcHBlbmluZyB0byB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmU/IEkgZXhwZWN0IGEgZnVsbGVyIHBpY3R1cmUgd2lsbCBhcHBlYXIgb25jZSBJIGdldCBtb3JlIGNvbnRleHQgZnJvbSB0aGUgY29kZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0Ny45NTY4MDk2OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzODMyNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2V2ZXJfZW5hYmxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9ODY9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4tLVxcbm1tL3pzd2FwLmMtODgtLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjg5OnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTkwLXN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTMwPWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG5tbS96c3dhcC5jOjEzMjpcXHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmMtMTMzLX1cXG4tLVxcbm1tL3pzd2FwLmM9MjczPXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4tLVxcbm1tL3pzd2FwLmMtMzI2LVxcbm1tL3pzd2FwLmM6MzI3OlxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbm1tL3pzd2FwLmMtMzI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo0OC4wNjA2NDk2ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI2NDE2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgWnN3YXAgUG9vbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYG1tL3pzd2FwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgenN3YXBfcG9vbF9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hvKiBjYWxscyBgenN3YXBfcG9vbF9jcmVhdGVgLCAqd2hlbiogaXQncyBjYWxsZWQsIGFuZCAqd2h5Ki4gSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0ZWQgZmxhZ3MgYW5kIHZhcmlhYmxlczogYHpzd2FwX2V2ZXJfZW5hYmxlZGAsIGFuZCBgenN3YXBfbmV2ZXJfZW5hYmxlZGAuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlc2UgZmxhZ3Mgd2lsbCBjb250cm9sIHRoZSBzdGF0ZSBvZiB0aGUgZmVhdHVyZTogd2hlbiBpdCBjYW4gYmUgY3JlYXRlZCBhbmQgaWYgaXQgaGFzIGJlZW4uIEhvdyBkb2VzIHRoZSBrZXJuZWwgZGVjaWRlIHdoZXRoZXIgdG8gaW5pdGlhbGl6ZSBhIFpzd2FwIHBvb2wgaW4gdGhlIGZpcnN0IHBsYWNlPyBBbmQgZG9lcyB0aGlzIGRlY2lzaW9uIGRlcGVuZCBvbiBib290IHBhcmFtZXRlcnMsIHN5c2ZzIHNldHRpbmdzLCBvciBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbnRyb2wgZmxvdy4gS25vd2luZyB0aGUgZW50cnkgcG9pbnRzIHdpbGwgcHJvdmlkZSBhIHdheSB0byBleGFtaW5lIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQvZGlzYWJsZWQgb3IgY29uZmlndXJlZC4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBvZiB0aGVzZSBmbGFncyB0aHJvdWdoIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBydW50aW1lIHN0YXRlIGFmZmVjdHMgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjUwLjU4NzA2OTgzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogenN3YXAuYyAtIHpzd2FwIGRyaXZlciBmaWxlXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogenN3YXAgaXMgYSBjYWNoZSB0aGF0IHRha2VzIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzXFxuICAgNjpcXHQgKiBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG8gY29tcHJlc3MgYW5kIHN0b3JlIHRoZW0gaW4gYVxcbiAgIDc6XFx0ICogUkFNLWJhc2VkIG1lbW9yeSBwb29sLiAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvblxcbiAgIDg6XFx0ICogdGhlIHN3YXAgZGV2aWNlIGFuZCwgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXJcXG4gICA5OlxcdCAqIHRoYW4gcmVhZGluZyBmcm9tIHRoZSBzd2FwIGRldmljZSwgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDEwOlxcdCAqXFxuICAxMTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTIgIFNldGggSmVubmluZ3MgXFx1MDAzY3NqZW5uaW5nQGxpbnV4LnZuZXQuaWJtLmNvbVxcdTAwM2VcXG4gIDEyOlxcdCovXFxuICAxMzpcXHRcXG4gIDE0OlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZ2htZW0uaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY3J5cHRvLmhcXHUwMDNlXFxuICAyNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb29sLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2Fjb21wcmVzcy5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2NyeXB0by9zY2F0dGVyd2Fsay5oXFx1MDAzZVxcbiAgMzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzd2FwLmhcXHUwMDNlXFxuICAzMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1fdHlwZXMuaFxcdTAwM2VcXG4gIDMyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcXHUwMDNlXFxuICAzMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZVxcbiAgMzQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbiAgMzU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gIDM2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gIDM3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiAgMzg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcXHUwMDNlXFxuICAzOTpcXHRcXG4gIDQwOlxcdCNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuICA0MTpcXHQjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gIDQyOlxcdFxcbiAgNDM6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgNDQ6XFx0KiBzdGF0aXN0aWNzXFxuICA0NTpcXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiAgNDY6XFx0LyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxuICA0NzpcXHRhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxuICA0ODpcXHQvKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG4gIDQ5OlxcdHN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdC8qXFxuICA1MjpcXHQgKiBUaGUgc3RhdGlzdGljcyBiZWxvdyBhcmUgbm90IHByb3RlY3RlZCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGZvclxcbiAgNTM6XFx0ICogcGVyZm9ybWFuY2UgcmVhc29ucyBzbyB0aGV5IG1heSBub3QgYmUgYSAxMDAlIGFjY3VyYXRlLiAgSG93ZXZlcixcXG4gIDU0OlxcdCAqIHRoZXkgZG8gcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gb24gcm91Z2hseSBob3cgbWFueSB0aW1lcyBhXFxuICA1NTpcXHQgKiBjZXJ0YWluIGV2ZW50IGlzIG9jY3VycmluZy5cXG4gIDU2OlxcdCovXFxuICA1NzpcXHRcXG4gIDU4OlxcdC8qIFBvb2wgbGltaXQgd2FzIGhpdCAoc2VlIHpzd2FwX21heF9wb29sX3BlcmNlbnQpICovXFxuICA1OTpcXHRzdGF0aWMgdTY0IHpzd2FwX3Bvb2xfbGltaXRfaGl0O1xcbiAgNjA6XFx0LyogUGFnZXMgd3JpdHRlbiBiYWNrIHdoZW4gcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xcbiAgNjE6XFx0c3RhdGljIHU2NCB6c3dhcF93cml0dGVuX2JhY2tfcGFnZXM7XFxuICA2MjpcXHQvKiBTdG9yZSBmYWlsZWQgZHVlIHRvIGEgcmVjbGFpbSBmYWlsdXJlIGFmdGVyIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cXG4gIDYzOlxcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X3JlY2xhaW1fZmFpbDtcXG4gIDY0OlxcdC8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gY29tcHJlc3Npb24gYWxnb3JpdGhtIGZhaWx1cmUgKi9cXG4gIDY1OlxcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX2ZhaWw7XFxuICA2NjpcXHQvKiBDb21wcmVzc2VkIHBhZ2Ugd2FzIHRvbyBiaWcgZm9yIHRoZSBhbGxvY2F0b3IgdG8gKG9wdGltYWxseSkgc3RvcmUgKi9cXG4gIDY3OlxcdHN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX3Bvb3I7XFxuICA2ODpcXHQvKiBMb2FkIG9yIHdyaXRlYmFjayBmYWlsZWQgZHVlIHRvIGRlY29tcHJlc3Npb24gZmFpbHVyZSAqL1xcbiAgNjk6XFx0c3RhdGljIHU2NCB6c3dhcF9kZWNvbXByZXNzX2ZhaWw7XFxuICA3MDpcXHQvKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB1bmRlcmx5aW5nIGFsbG9jYXRvciBjb3VsZCBub3QgZ2V0IG1lbW9yeSAqL1xcbiAgNzE6XFx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfYWxsb2NfZmFpbDtcXG4gIDcyOlxcdC8qIFN0b3JlIGZhaWxlZCBiZWNhdXNlIHRoZSBlbnRyeSBtZXRhZGF0YSBjb3VsZCBub3QgYmUgYWxsb2NhdGVkIChyYXJlKSAqL1xcbiAgNzM6XFx0c3RhdGljIHU2NCB6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWw7XFxuICA3NDpcXHRcXG4gIDc1OlxcdC8qIFNocmlua2VyIHdvcmsgcXVldWUgKi9cXG4gIDc2OlxcdHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2hyaW5rX3dxO1xcbiAgNzc6XFx0LyogUG9vbCBsaW1pdCB3YXMgaGl0LCB3ZSBuZWVkIHRvIGNhbG0gZG93biAqL1xcbiAgNzg6XFx0c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XFxuICA3OTpcXHRcXG4gIDgwOlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gIDgxOlxcdCogdHVuYWJsZXNcXG4gIDgyOlxcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuICA4MzpcXHRcXG4gIDg0OlxcdCNkZWZpbmUgWlNXQVBfUEFSQU1fVU5TRVQgXFxcIlxcXCJcXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4gIDg3OlxcdFxcbiAgODg6XFx0LyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG4gIDg5OlxcdHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG4gIDkwOlxcdHN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG4gIDkxOlxcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbiAgOTI6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG4gIDkzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9lbmFibGVkX3BhcmFtX29wcyA9IHtcXG4gIDk0OlxcdFxcdC5zZXQgPVxcdFxcdHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0LFxcbiAgOTU6XFx0XFx0LmdldCA9XFx0XFx0cGFyYW1fZ2V0X2Jvb2wsXFxuICA5NjpcXHR9O1xcbiAgOTc6XFx0bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFxcdTAwMjZ6c3dhcF9lbmFibGVkX3BhcmFtX29wcywgXFx1MDAyNnpzd2FwX2VuYWJsZWQsIDA2NDQpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHQvKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG4gMTAwOlxcdHN0YXRpYyBjaGFyICp6c3dhcF9jb21wcmVzc29yID0gQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDI6NTAuNTg3NDE1NzQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2MDIxMjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1tL3pzd2FwLmNgIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGFyZWFzIHRoYXQgZHJpdmUgenN3YXAncyBiZWhhdmlvciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY29udHJvbCBmbG93cy5cblxuKipac3dhcCBEZWVwIERpdmU6IEluaXRpYWxpemF0aW9uIGFuZCBDb250cm9sKipcblxuUmlnaHQsIHNvIEkgd2FudCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSB6c3dhcCBwb29sIGlzIGNyZWF0ZWQgYW5kIG1hbmFnZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgYHpzd2FwX3Bvb2xfY3JlYXRlYCBjYWxscyDigJMgd2hvJ3MgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHRoaXMgdGhpbmcgdG8gbGlmZT8gV2hhdCBhcmUgdGhlIHBhcmFtZXRlcnMgaW52b2x2ZWQsIGFuZCBob3cgZG8gdGhleSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzPyBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgY29udGVudGlvbiBwb2ludHMgd2l0aGluIHRoZSBwb29sJ3MgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMuXG5cbk5leHQsIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGVuYWJsaW5nIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBzY3J1dGluaXplIGB6c3dhcF9lbmFibGVkX3BhcmFtX3NldGAgdG8gcGlucG9pbnQgaG93IHpzd2FwJ3MgYmVoYXZpb3IgaXMgY29uZmlndXJlZCBhdCBydW50aW1lLiBBcmUgdGhlcmUgdHVuYWJsZSBwYXJhbWV0ZXJzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBzZXR0aW5ncyBvbiBzd2FwIGJlaGF2aW9yIGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZT8gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGNvbnNpZGVyYXRpb25zIGhlcmU/XG5cbkZpbmFsbHksIHRoZSBgenN3YXBfc2V0dXBgIGZ1bmN0aW9uIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24uIFRoaXMgaXMgcHJvYmFibHkgdGhlIG1hc3RlciBzd2l0Y2gsIHRoZSBwcmltYXJ5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgenN3YXAgc3lzdGVtLiBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgcGljdHVyZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGluY2x1ZGluZyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBXaGVyZSBpcyBpdCBjYWxsZWQ/IFdoYXQgcHJlcmVxdWlzaXRlcyBtdXN0IGJlIHNhdGlzZmllZCBiZWZvcmUgaXQgY2FuIHJ1bj8gV2hhdCBkb2VzIGl0IHNldCB1cD8gQW55IG5vbi1vYnZpb3VzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIE1NIHN1YnN5c3RlbXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcHJvYmxlbXMgcmVnYXJkaW5nIE5VTUEsIGFuZCBob3cgenN3YXAgaW50ZXJmYWNlcyB3aXRoIHRoYXQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjUzLjM0NzYzMjk0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHRhY29tcF9jdHgtXFx1MDAzZWJ1ZmZlciA9IE5VTEw7XFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG4gMjc0OlxcdHtcXG4gMjc1OlxcdFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiAyNzY6XFx0XFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFxcXDAgKi9cXG4gMjc3OlxcdFxcdGludCByZXQsIGNwdTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcXG4gMjgwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRwb29sID0ga3phbGxvY19vYmooKnBvb2wpO1xcbiAyODM6XFx0XFx0aWYgKCFwb29sKVxcbiAyODQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdC8qIHVuaXF1ZSBuYW1lIGZvciBlYWNoIHBvb2wgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IHpzbWFsbG9jICovXFxuIDI4NzpcXHRcXHRzbnByaW50ZihuYW1lLCAzOCwgXFxcInpzd2FwJXhcXFwiLCBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2enN3YXBfcG9vbHNfY291bnQpKTtcXG4gMjg4OlxcdFxcdHBvb2wtXFx1MDAzZXpzX3Bvb2wgPSB6c19jcmVhdGVfcG9vbChuYW1lKTtcXG4gMjg5OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlenNfcG9vbClcXG4gMjkwOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdHN0cnNjcHkocG9vbC1cXHUwMDNldGZtX25hbWUsIGNvbXByZXNzb3IsIHNpemVvZihwb29sLVxcdTAwM2V0Zm1fbmFtZSkpO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHQvKiBNYW55IHRoaW5ncyByZWx5IG9uIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uLiAqL1xcbiAyOTU6XFx0XFx0cG9vbC1cXHUwMDNlYWNvbXBfY3R4ID0gYWxsb2NfcGVyY3B1X2dmcCgqcG9vbC1cXHUwMDNlYWNvbXBfY3R4LFxcbiAyOTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiAyOTc6XFx0XFx0aWYgKCFwb29sLVxcdTAwM2VhY29tcF9jdHgpIHtcXG4gMjk4OlxcdFxcdFxcdHByX2VycihcXFwicGVyY3B1IGFsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuIDI5OTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiAzMDA6XFx0XFx0fVxcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHQvKlxcbiAzMDM6XFx0XFx0ICogVGhpcyBpcyBzZXJpYWxpemVkIGFnYWluc3QgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gSGVuY2UsIGNvcmVzXFxuIDMwNDpcXHRcXHQgKiBjYW5ub3QgYmUgb2ZmbGluZWQgdW50aWwgdGhpcyBmaW5pc2hlcy5cXG4gMzA1OlxcdFxcdCAqL1xcbiAzMDY6XFx0XFx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwb29sLVxcdTAwM2Vub2RlKTtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0LypcXG4gMzEwOlxcdFxcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxcbiAzMTE6XFx0XFx0ICogd2UgZG9uJ3QgcmVnaXN0ZXIgYSBob3R1bnBsdWcgY2FsbGJhY2suXFxuIDMxMjpcXHRcXHQgKi9cXG4gMzEzOlxcdFxcdGlmIChyZXQpXFxuIDMxNDpcXHRcXHRcXHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHQvKiBiZWluZyB0aGUgY3VycmVudCBwb29sIHRha2VzIDEgcmVmOyB0aGlzIGZ1bmMgZXhwZWN0cyB0aGVcXG4gMzE3OlxcdFxcdCAqIGNhbGxlciB0byBhbHdheXMgYWRkIHRoZSBuZXcgcG9vbCBhcyB0aGUgY3VycmVudCBwb29sXFxuIDMxODpcXHRcXHQgKi9cXG4gMzE5OlxcdFxcdHJldCA9IHBlcmNwdV9yZWZfaW5pdChcXHUwMDI2cG9vbC1cXHUwMDNlcmVmLCBfX3pzd2FwX3Bvb2xfZW1wdHksXFxuIDMyMDpcXHRcXHRcXHRcXHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XFxuIDMyMTpcXHRcXHRpZiAocmV0KVxcbiAzMjI6XFx0XFx0XFx0Z290byByZWZfZmFpbDtcXG4gMzIzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0KTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiY3JlYXRlZFxcXCIsIHBvb2wpO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG4gMzI4OlxcdFxcbiAzMjk6XFx0XFx0cmV0dXJuIHBvb2w7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdHJlZl9mYWlsOlxcbiAzMzI6XFx0XFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcXHUwMDI2cG9vbC1cXHUwMDNlbm9kZSk7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdGNwdWhwX2FkZF9mYWlsOlxcbiAzMzU6XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcXG4gMzM2OlxcdFxcdFxcdGFjb21wX2N0eF9mcmVlKHBlcl9jcHVfcHRyKHBvb2wtXFx1MDAzZWFjb21wX2N0eCwgY3B1KSk7XFxuIDMzNzpcXHRlcnJvcjpcXG4gMzM4OlxcdFxcdGlmIChwb29sLVxcdTAwM2VhY29tcF9jdHgpXFxuIDMzOTpcXHRcXHRcXHRmcmVlX3BlcmNwdShwb29sLVxcdTAwM2VhY29tcF9jdHgpO1xcbiAzNDA6XFx0XFx0aWYgKHBvb2wtXFx1MDAzZXpzX3Bvb2wpXFxuIDM0MTpcXHRcXHRcXHR6c19kZXN0cm95X3Bvb2wocG9vbC1cXHUwMDNlenNfcG9vbCk7XFxuIDM0MjpcXHRcXHRrZnJlZShwb29sKTtcXG4gMzQzOlxcdFxcdHJldHVybiBOVUxMO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcXG4gMzQ3OlxcdHtcXG4gMzQ4OlxcdFxcdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcXHUwMDI2XFx1MDAyNlxcbiAzNDk6XFx0XFx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mjo1My4zNDc5MTg2OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY2NTcwMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gZGlzYWJsaW5nIHpzd2FwIGF0IGJvb3QgYW5kIHRoZW4gZW5hYmxpbmcgaXQgbGF0ZXIgZHluYW1pY2FsbHksIHRoaW5raW5nIGxpa2UgdGhlIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXIgSSBhbTpcblxuKipBbmFseXppbmcgenN3YXAgSW5pdGlhbGl6YXRpb24gYW5kIER5bmFtaWMgQ29udHJvbCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXIuIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaG93IHRoZSB6c3dhcCBtZWNoYW5pc20gYmVoYXZlcyB3aGVuIGl0cyBpbml0aWFsIHN0YXRlIGlzIHNldCBkdXJpbmcgYm9vdCwgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIGVuYWJsaW5nIGl0IG9uLXRoZS1mbHksIHR5cGljYWxseSB0aHJvdWdoIHN5c2ZzIG9yIGEgbW9kdWxlIHBhcmFtZXRlciBjaGFuZ2UuIEZpcnN0IHVwLCBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJlYWQgdGhyb3VnaCB0aGUgYHpzd2FwX3NldHVwYCBmdW5jdGlvbiDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGZvdW5kYXRpb24gb2YgaG93IHpzd2FwIGdldHMgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBpdCB0YWtlcywgdGhlIHJlc291cmNlcyBpdCBhbGxvY2F0ZXMsIGFuZCBhbnkgZWFybHkgY2hlY2tzIGZvciBlbmFibGVkL2Rpc2FibGVkIHN0YXRlcy4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRvbmUgd2hlbiB6c3dhcCBpcyAqc3VwcG9zZWQqIHRvIGJlIGFjdGl2ZSBmcm9tIHRoZSBiZWdpbm5pbmcsIGFuZCBpZiB0aG9zZSBhY3Rpb25zIGFyZSBza2lwcGVkIG9yIGRlZmVycmVkIHdoZW4gZGlzYWJsZWQuXG5cblRoZW4sIEknbGwgbW92ZSBvbiB0byBgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXRgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBkeW5hbWljIGNvbnRyb2wuIFRoaXMgZnVuY3Rpb24gKm11c3QqIGhhbmRsZSB0aGUgdHJhbnNpdGlvbiBmcm9tIGRpc2FibGVkIHRvIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBsb2dpYzogRG9lcyBpdCBzaW1wbHkgcmUtZXhlY3V0ZSBwYXJ0cyBvZiB0aGUgc2V0dXA/IERvZXMgaXQgY2FsbCBhIHNlcGFyYXRlIGVuYWJsZSBmdW5jdGlvbj8gRG9lcyBpdCBzYWZlbHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBpZiB0aG9zZSB0aGluZ3MgYXJlIG5vdCBwZXJmb3JtZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Q/IEkgd2lsbCB3YW50IHRvIGNoZWNrIGhvdyBpdCBlbnN1cmVzIGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgdW5pbml0aWFsaXplZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uLiBJIHdpbGwgcGF5IHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQgc2FmZWx5LlxuXG5VbHRpbWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbmFibGluZyBwYXRoLiBEb2VzIGl0IHBlcmZvcm0gYSBmdWxsIHNldHVwIGVxdWl2YWxlbnQgdG8gYm9vdC10aW1lIGluaXRpYWxpemF0aW9uLCBvciBkb2VzIGl0IGNsZXZlcmx5IHNraXAgb3IgcmUtdXNlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlPyBXaGF0IHJlc291cmNlcyBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmFnZSwgYW5kIGhvdyBpcyBpdCBkb25lIGluIGEgdGhyZWFkLXNhZmUgbWFubmVyPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBvciBwb3RlbnRpYWwgZ290Y2hhcyB0aGF0IGFyaXNlIGZyb20gdGhpcyBkeW5hbWljIGFwcHJvYWNoPyBGaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBmb3IgZG9jdW1lbnRhdGlvbiBjb21tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDI6NTYuNDE0NDkxNTc4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3ODA6XFx0XFx0XFx0cHJfZXJyKFxcXCJlbnRyeSBjYWNoZSBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbjE3ODE6XFx0XFx0XFx0Z290byBjYWNoZV9mYWlsO1xcbjE3ODI6XFx0XFx0fVxcbjE3ODM6XFx0XFxuMTc4NDpcXHRcXHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSxcXG4xNzg1OlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJtbS96c3dhcF9wb29sOnByZXBhcmVcXFwiLFxcbjE3ODY6XFx0XFx0XFx0XFx0XFx0ICAgICAgenN3YXBfY3B1X2NvbXBfcHJlcGFyZSxcXG4xNzg3OlxcdFxcdFxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbjE3ODg6XFx0XFx0aWYgKHJldClcXG4xNzg5OlxcdFxcdFxcdGdvdG8gaHBfZmFpbDtcXG4xNzkwOlxcdFxcbjE3OTE6XFx0XFx0c2hyaW5rX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJ6c3dhcC1zaHJpbmtcXFwiLFxcbjE3OTI6XFx0XFx0XFx0XFx0V1FfVU5CT1VORHxXUV9NRU1fUkVDTEFJTSwgMSk7XFxuMTc5MzpcXHRcXHRpZiAoIXNocmlua193cSlcXG4xNzk0OlxcdFxcdFxcdGdvdG8gc2hyaW5rX3dxX2ZhaWw7XFxuMTc5NTpcXHRcXG4xNzk2OlxcdFxcdHpzd2FwX3Nocmlua2VyID0genN3YXBfYWxsb2Nfc2hyaW5rZXIoKTtcXG4xNzk3OlxcdFxcdGlmICghenN3YXBfc2hyaW5rZXIpXFxuMTc5ODpcXHRcXHRcXHRnb3RvIHNocmlua2VyX2ZhaWw7XFxuMTc5OTpcXHRcXHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZyhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHpzd2FwX3Nocmlua2VyKSlcXG4xODAwOlxcdFxcdFxcdGdvdG8gbHJ1X2ZhaWw7XFxuMTgwMTpcXHRcXHRzaHJpbmtlcl9yZWdpc3Rlcih6c3dhcF9zaHJpbmtlcik7XFxuMTgwMjpcXHRcXG4xODAzOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2enN3YXBfc2hyaW5rX3dvcmssIHNocmlua193b3JrZXIpO1xcbjE4MDQ6XFx0XFxuMTgwNTpcXHRcXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xcbjE4MDY6XFx0XFx0aWYgKHBvb2wpIHtcXG4xODA3OlxcdFxcdFxcdHByX2luZm8oXFxcImxvYWRlZCB1c2luZyBwb29sICVzXFxcXG5cXFwiLCBwb29sLVxcdTAwM2V0Zm1fbmFtZSk7XFxuMTgwODpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4xODA5OlxcdFxcdFxcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcXG4xODEwOlxcdFxcdH0gZWxzZSB7XFxuMTgxMTpcXHRcXHRcXHRwcl9lcnIoXFxcInBvb2wgY3JlYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4xODEyOlxcdFxcdFxcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcXG4xODEzOlxcdFxcdH1cXG4xODE0OlxcdFxcbjE4MTU6XFx0XFx0aWYgKHpzd2FwX2RlYnVnZnNfaW5pdCgpKVxcbjE4MTY6XFx0XFx0XFx0cHJfd2FybihcXFwiZGVidWdmcyBpbml0aWFsaXphdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbjE4MTc6XFx0XFx0enN3YXBfaW5pdF9zdGF0ZSA9IFpTV0FQX0lOSVRfU1VDQ0VFRDtcXG4xODE4OlxcdFxcdHJldHVybiAwO1xcbjE4MTk6XFx0XFxuMTgyMDpcXHRscnVfZmFpbDpcXG4xODIxOlxcdFxcdHNocmlua2VyX2ZyZWUoenN3YXBfc2hyaW5rZXIpO1xcbjE4MjI6XFx0c2hyaW5rZXJfZmFpbDpcXG4xODIzOlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNocmlua193cSk7XFxuMTgyNDpcXHRzaHJpbmtfd3FfZmFpbDpcXG4xODI1OlxcdFxcdGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSk7XFxuMTgyNjpcXHRocF9mYWlsOlxcbjE4Mjc6XFx0XFx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcXG4xODI4OlxcdGNhY2hlX2ZhaWw6XFxuMTgyOTpcXHRcXHQvKiBpZiBidWlsdC1pbiwgd2UgYXJlbid0IHVubG9hZGVkIG9uIGZhaWx1cmU7IGRvbid0IGFsbG93IHVzZSAqL1xcbjE4MzA6XFx0XFx0enN3YXBfaW5pdF9zdGF0ZSA9IFpTV0FQX0lOSVRfRkFJTEVEO1xcbjE4MzE6XFx0XFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xcbjE4MzI6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTgzMzpcXHR9XFxuMTgzNDpcXHRcXG4xODM1OlxcdHN0YXRpYyBpbnQgX19pbml0IHpzd2FwX2luaXQodm9pZClcXG4xODM2OlxcdHtcXG4xODM3OlxcdFxcdGlmICghenN3YXBfZW5hYmxlZClcXG4xODM4OlxcdFxcdFxcdHJldHVybiAwO1xcbjE4Mzk6XFx0XFx0cmV0dXJuIHpzd2FwX3NldHVwKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjU2LjQxNDYzMjYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTkwNzM3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YC4gV2hlbmV2ZXIgSSBlbmNvdW50ZXIgYSBwYXJhbWV0ZXIgd2l0aCBhIG5hbWUgbGlrZSB0aGF0LCBteSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBwYXJzaW5nIGl0LiBJIHNlZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBhc3N1bWUgdGhpcyByZWxhdGVzIHRvIHRoZSBgenN3YXBgIGtlcm5lbCBtb2R1bGUsIHNvIGl0J3MgcHJvYmFibHkgYSBib29sZWFuIHZhbHVlLCBhIGZsYWcuIFwiRW5hYmxlZFwiIGluIHRoZSBuYW1lIGltcGxpZXMgdGhhdCBzZXR0aW5nIGl0IHdpbGwgdG9nZ2xlIHNvbWUgc29ydCBvZiBmdW5jdGlvbmFsaXR5IG9uIG9yIG9mZiB3aXRoaW4gdGhlIHpzd2FwIHN1YnN5c3RlbS4gVGhlIHVzZSBvZiBcInBhcmFtX3NldFwiIHN1Z2dlc3RzIHRoaXMgbWlnaHQgYmUgYSBydW50aW1lIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXIuXG5cbkknbSBub3cgdGhpbmtpbmcgYWJvdXQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gSXMgdGhpcyBwYXJhbWV0ZXIgYSBzaW1wbGUgb24vb2ZmIHN3aXRjaCBmb3IgdGhlIGVudGlyZSB6c3dhcCBmdW5jdGlvbmFsaXR5LCBvciBkb2VzIGl0IGNvbnRyb2wgYSBzcGVjaWZpYyBhc3BlY3QsIHBlcmhhcHMgYSB0aHJlc2hvbGQsIG9yIGJlaGF2aW9yIHdpdGhpbiB0aGUgY29tcHJlc3NlZCBzd2FwIGNhY2hlPyBJZiBJIHdhbnRlZCB0byBpbnZlc3RpZ2F0ZSwgSSdkIHByb2JhYmx5IGxvb2sgYXQgdGhlIGNvbnRleHQgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBpcyB1c2VkLiBJJ2QgY2hlY2sgaG93IGl0J3MgZGVmaW5lZCAoZGF0YSB0eXBlLCBzY29wZSkgYW5kIGhvdyBpdCdzIGFjdHVhbGx5ICp1c2VkKiB0byB1bmRlcnN0YW5kIHdoYXQgaXQgYWN0dWFsbHkgY29udHJvbHMuXG5cbk5vdywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCBJ4oCZbSBtZW50YWxseSBtYXBwaW5nIG91dCBteSBnby10byBhcmVhcyBmb3IgdGhpcy4gSSdtIHRoaW5raW5nIG9mIGNoZWNraW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZXMsIG9yIHVzaW5nIGBncmVwYCBvciBgZ2l0IGdyZXBgIHRvIGZpbmQgYWxsIHVzYWdlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBhIGNvbXBpbGUtdGltZSBvcHRpb24gKGRvdWJ0ZnVsLCBnaXZlbiB0aGUgbmFtZSksIG9yIGlmIGl0J3MgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzIG9yIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBgc3lzY3RsYC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCwgYXMgaXQgY2hhbmdlcyBob3cgSSdkIGFwcHJvYWNoIG1vZGlmeWluZyBvciBkZWJ1Z2dpbmcgdGhlIHN5c3RlbS5cbkknbSBndWVzc2luZyBpdCByZWxhdGVzIHRvIGhvdyBtdWNoIHpzd2FwIGlzIGJlaW5nIHV0aWxpemVkLCBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgdGhlIHByZXNzdXJlIGJlaW5nIHB1dCBvbiB0aGUgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGNvdWxkIG1ha2UgbXkgc3lzdGVtIG1vcmUgcmVzcG9uc2l2ZSBpZiB0dW5lZCBjb3JyZWN0bHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjU5LjYwNTM3MjQ2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcCAqYWNvbXA7XFxuIDE0MTpcXHRcXHRzdHJ1Y3QgYWNvbXBfcmVxICpyZXE7XFxuIDE0MjpcXHRcXHRzdHJ1Y3QgY3J5cHRvX3dhaXQgd2FpdDtcXG4gMTQzOlxcdFxcdHU4ICpidWZmZXI7XFxuIDE0NDpcXHRcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XFxuIDE0NTpcXHR9O1xcbiAxNDY6XFx0XFxuIDE0NzpcXHQvKlxcbiAxNDg6XFx0ICogVGhlIGxvY2sgb3JkZXJpbmcgaXMgenN3YXBfdHJlZS5sb2NrIC1cXHUwMDNlIHpzd2FwX3Bvb2wubHJ1X2xvY2suXFxuIDE0OTpcXHQgKiBUaGUgb25seSBjYXNlIHdoZXJlIGxydV9sb2NrIGlzIG5vdCBhY3F1aXJlZCB3aGlsZSBob2xkaW5nIHRyZWUubG9jayBpc1xcbiAxNTA6XFx0ICogd2hlbiBhIHpzd2FwX2VudHJ5IGlzIHRha2VuIG9mZiB0aGUgbHJ1IGZvciB3cml0ZWJhY2ssIGluIHRoYXQgY2FzZSBpdFxcbiAxNTE6XFx0ICogbmVlZHMgdG8gYmUgdmVyaWZpZWQgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGluIHRoZSB0cmVlLlxcbiAxNTI6XFx0ICovXFxuIDE1MzpcXHRzdHJ1Y3QgenN3YXBfcG9vbCB7XFxuIDE1NDpcXHRcXHRzdHJ1Y3QgenNfcG9vbCAqenNfcG9vbDtcXG4gMTU1OlxcdFxcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XFxuIDE1NzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDE1ODpcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xcbiAxNTk6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcXG4gMTYwOlxcdFxcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XFxuIDE2MTpcXHR9O1xcbiAxNjI6XFx0XFxuIDE2MzpcXHQvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXFxuIDE2NDpcXHRzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xcbiAxNjU6XFx0XFxuIDE2NjpcXHQvKiBUaGUgbG9jayBwcm90ZWN0cyB6c3dhcF9uZXh0X3NocmluayB1cGRhdGVzLiAqL1xcbiAxNjc6XFx0c3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9zaHJpbmtfbG9jayk7XFxuIDE2ODpcXHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnpzd2FwX25leHRfc2hyaW5rO1xcbiAxNjk6XFx0c3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCB6c3dhcF9zaHJpbmtfd29yaztcXG4gMTcwOlxcdHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHQvKlxcbiAxNzM6XFx0ICogc3RydWN0IHpzd2FwX2VudHJ5XFxuIDE3NDpcXHQgKlxcbiAxNzU6XFx0ICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIG1ldGFkYXRhIGZvciB0cmFja2luZyBhIHNpbmdsZSBjb21wcmVzc2VkXFxuIDE3NjpcXHQgKiBwYWdlIHdpdGhpbiB6c3dhcC5cXG4gMTc3OlxcdCAqXFxuIDE3ODpcXHQgKiBzd3BlbnRyeSAtIGFzc29jaWF0ZWQgc3dhcCBlbnRyeSwgdGhlIG9mZnNldCBpbmRleGVzIGludG8gdGhlIHhhcnJheVxcbiAxNzk6XFx0ICogbGVuZ3RoIC0gdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGEuICBOZWVkZWQgZHVyaW5nXFxuIDE4MDpcXHQgKiAgICAgICAgICBkZWNvbXByZXNzaW9uLlxcbiAxODE6XFx0ICogcmVmZXJlbmNlZCAtIHRydWUgaWYgdGhlIGVudHJ5IHJlY2VudGx5IGVudGVyZWQgdGhlIHpzd2FwIHBvb2wuIFVuc2V0IGJ5IHRoZVxcbiAxODI6XFx0ICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcXG4gMTgzOlxcdCAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXFxuIDE4NDpcXHQgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cXG4gMTg1OlxcdCAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXFxuIDE4NjpcXHQgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcXG4gMTg3OlxcdCAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xcbiAxODg6XFx0ICogbHJ1IC0gaGFuZGxlIHRvIHRoZSBwb29sJ3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXFxuIDE4OTpcXHQgKi9cXG4gMTkwOlxcdHN0cnVjdCB6c3dhcF9lbnRyeSB7XFxuIDE5MTpcXHRcXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcXG4gMTkyOlxcdFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuIDE5MzpcXHRcXHRib29sIHJlZmVyZW5jZWQ7XFxuIDE5NDpcXHRcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4gMTk1OlxcdFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiAxOTY6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAxOTc6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XFxuIDE5ODpcXHR9O1xcbiAxOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQyOjU5LjYwNTUwOTA2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQ5ODE4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWnN3YXAgTGFieXJpbnRoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGhvdyB6c3dhcCBpcyBjb25maWd1cmVkLCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBlbmFibGluZyBvZiBpdC4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHNldHRpbmcsIHRoaXMgYHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0YCwgaXMgbGlrZWx5IGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIHpzd2FwIGltcGxlbWVudGF0aW9uLiBTbywgbXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IGBtbS96c3dhcC5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uLCB2YXJpYWJsZSwgb3Igd2hhdGV2ZXIgaXQgaXMgdGhhdCBtYW5hZ2VzIHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHRoaXMgaW1wb3J0YW50IGZlYXR1cmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJ20gZ29pbmcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMS4xNTUzMzA5ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTQ4MjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9lbmFibGVkX3BhcmFtX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTA9c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xcbm1tL3pzd2FwLmM6OTE6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy05Mi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopO1xcbm1tL3pzd2FwLmM9OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xcbm1tL3pzd2FwLmM6OTQ6XFx0LnNldCA9XFx0XFx0enN3YXBfZW5hYmxlZF9wYXJhbV9zZXQsXFxubW0venN3YXAuYy05NS1cXHQuZ2V0ID1cXHRcXHRwYXJhbV9nZXRfYm9vbCxcXG4tLVxcbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNjE4LVxcbm1tL3pzd2FwLmM6NjE5OnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxcbm1tL3pzd2FwLmMtNjIwLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMS41MTQ4MTkwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxODA2Njk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZWFkaW5nIGxpbmVzIDYxNS02NjAgb2YgYG1tL3pzd2FwLmNgOlxuXG4qKkRpdmluZyBpbnRvIHpzd2FwLmMncyBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYxNS02NjAuIFRoZSBjb250ZXh0IGhlcmUsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgbGlrZWx5IGdvaW5nIHRvIGRlYWwgd2l0aCB0aGUgaGVhcnQgb2YgenN3YXAncyBvcGVyYXRpb24g4oCTIGxpa2VseSBob3cgaXQncyAqY2hvb3NpbmcqIHRoZSBwYWdlcyB0byBzd2FwIG91dCwgb3IgbWF5YmUgbWFuYWdpbmcgdGhlIHpwb29sIGl0c2VsZi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVycywgSSdkIGd1ZXNzIHdlJ3JlIHBhc3QgdGhlIGluaXRpYWwgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24sIGFuZCBub3cgYXQgdGhlIG1vcmUgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGxvb3BzIHRoYXQgbWlnaHQgYmUgZXhwZW5zaXZlLCBvciBhbnkgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbi4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjb21wcmVzc2VkIGRhdGEgc3RvcmUsIGFuZCB3aGV0aGVyIGl0IGhhbmRsZXMgbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW50bHkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggcGFnZSBmYXVsdHMgaGVyZSwgb3IgYXJlIHRoZXNlIHByb2FjdGl2ZSBzd2Fwcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG1haW4gZGVjaXNpb24gcG9pbnRzIHdpdGhpbiB0aGlzIGJsb2NrIG9mIGNvZGU6IFdoYXQgYXJlIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBzZWxlY3RpbmcgcGFnZXM/IElzIHRoZSBkYXRhIGJlaW5nIGNvbXByZXNzZWQgZWZmaWNpZW50bHk/IEFuZCBob3cgaXMgdGhpcyBzZWxlY3Rpb24gYWZmZWN0ZWQgYnkgZ2xvYmFsIG9yIGxvY2FsIG1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gdGhlIHN5c3RlbT8gSSdtIGFudGljaXBhdGluZyBzb21lIGNyaXRpY2FsIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgY29tcHJlc3NlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IGV4cGVjdGF0aW9ucywgYW5kIHdoZXJlIHRoZSBjb2RlIGFjdHVhbGx5IHN0YXJ0cyB0byAqZG8qIHNvbWV0aGluZyBjb25jcmV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMy44MzI4OTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxNTpcXHRcXG4gNjE2OlxcdFxcdHJldHVybiByZXQ7XFxuIDYxNzpcXHR9XFxuIDYxODpcXHRcXG4gNjE5OlxcdHN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxcbiA2MjA6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuIDYyMTpcXHR7XFxuIDYyMjpcXHRcXHRpbnQgcmV0ID0gLUVOT0RFVjtcXG4gNjIzOlxcdFxcbiA2MjQ6XFx0XFx0LyogaWYgdGhpcyBpcyBsb2FkLXRpbWUgKHByZS1pbml0KSBwYXJhbSBzZXR0aW5nLCBvbmx5IHNldCBwYXJhbS4gKi9cXG4gNjI1OlxcdFxcdGlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpXFxuIDYyNjpcXHRcXHRcXHRyZXR1cm4gcGFyYW1fc2V0X2Jvb2wodmFsLCBrcCk7XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpzd2FwX2luaXRfbG9jayk7XFxuIDYyOTpcXHRcXHRzd2l0Y2ggKHpzd2FwX2luaXRfc3RhdGUpIHtcXG4gNjMwOlxcdFxcdGNhc2UgWlNXQVBfVU5JTklUOlxcbiA2MzE6XFx0XFx0XFx0aWYgKHpzd2FwX3NldHVwKCkpXFxuIDYzMjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNjMzOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiA2MzQ6XFx0XFx0Y2FzZSBaU1dBUF9JTklUX1NVQ0NFRUQ6XFxuIDYzNTpcXHRcXHRcXHRpZiAoIXpzd2FwX2hhc19wb29sKVxcbiA2MzY6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjYW4ndCBlbmFibGUsIG5vIHBvb2wgY29uZmlndXJlZFxcXFxuXFxcIik7XFxuIDYzNzpcXHRcXHRcXHRlbHNlXFxuIDYzODpcXHRcXHRcXHRcXHRyZXQgPSBwYXJhbV9zZXRfYm9vbCh2YWwsIGtwKTtcXG4gNjM5OlxcdFxcdFxcdGJyZWFrO1xcbiA2NDA6XFx0XFx0Y2FzZSBaU1dBUF9JTklUX0ZBSUxFRDpcXG4gNjQxOlxcdFxcdFxcdHByX2VycihcXFwiY2FuJ3QgZW5hYmxlLCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbiA2NDI6XFx0XFx0fVxcbiA2NDM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6c3dhcF9pbml0X2xvY2spO1xcbiA2NDQ6XFx0XFxuIDY0NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2NDY6XFx0fVxcbiA2NDc6XFx0XFxuIDY0ODpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuIDY0OTpcXHQqIGxydSBmdW5jdGlvbnNcXG4gNjUwOlxcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDY1MTpcXHRcXG4gNjUyOlxcdC8qIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgUkNVICovXFxuIDY1MzpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDY1NDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4gNjU1OlxcdHtcXG4gNjU2OlxcdFxcdHJldHVybiBlbnRyeS1cXHUwMDNlb2JqY2cgPyBvYmpfY2dyb3VwX21lbWNnKGVudHJ5LVxcdTAwM2VvYmpjZykgOiBOVUxMO1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0I2Vsc2VcXG4gNjU5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY2MjpcXHR9XFxuIDY2MzpcXHQjZW5kaWZcXG4gNjY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowMy44MzMxMTU4OTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwODU0ODE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYHpzd2FwX3Bvb2xfY3JlYXRlYCBDYWxscyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgenN3YXBfcG9vbF9jcmVhdGVgIHdpdGhpbiB0aGUgYG1tL3pzd2FwLmNgIGZpbGUuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgYW5kIGhvdyB0aGUgenN3YXAgcG9vbCBpbml0aWFsaXphdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaXNuJ3QgdXN1YWxseSBzb21ldGhpbmcgSSBoYXZlIHRvIHJldmlzaXQgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZSBvZiB0aGUgenN3YXAgZGVzaWduLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGRlcGVuZGVuY2llcyBhbmQgd2hlbiB0aGUgcG9vbCBpcyBicm91Z2h0IG9ubGluZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSBlbHNlIGl0J3MgYWN0dWFsbHkgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGNsYXJpZnkgdGhlIHN5c3RlbSdzIHJ1bnRpbWUgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MDUuNDQxNjY4MDQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3ODM2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfcG9vbF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTI0NT1zdGF0aWMgdm9pZCBhY29tcF9jdHhfZnJlZShzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4KVxcbi0tXFxubW0venN3YXAuYy0yNzItXFxubW0venN3YXAuYzoyNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbm1tL3pzd2FwLmMtMjc0LXtcXG4tLVxcbm1tL3pzd2FwLmMtMzQ1LVxcbm1tL3pzd2FwLmM6MzQ2OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbm1tL3pzd2FwLmMtMzQ3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMzYxLVxcbm1tL3pzd2FwLmM6MzYyOlxcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jLTM2My19XFxuLS1cXG5tbS96c3dhcC5jPTUzMD1zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS96c3dhcC5jLTU3Mi1cXHRpZiAoIXBvb2wpXFxubW0venN3YXAuYzo1NzM6XFx0XFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xcbm1tL3pzd2FwLmMtNTc0LVxcdGVsc2Uge1xcbi0tXFxubW0venN3YXAuYz0xNzczPXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTgwNC1cXG5tbS96c3dhcC5jOjE4MDU6XFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcXG5tbS96c3dhcC5jLTE4MDYtXFx0aWYgKHBvb2wpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MDUuNjA5NDU4MjAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzAwODY5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgenN3YXBfbmV2ZXJfZW5hYmxlZGAgcGFyYW1ldGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kLCBjcnVjaWFsbHksIHdoZXJlIGluIHRoZSBrZXJuZWwgaXQncyBiZWluZyB1c2VkLiBJJ20gYXNzdW1pbmcgaXQncyBhIHN5c2N0bCBvciBrZXJuZWwgbW9kdWxlIHBhcmFtZXRlciwgZ2l2ZW4gdGhlIG5hbWUsIHNvIHRoZSBmb2N1cyBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZSBpbnRlcmFjdGlvbnMgYXJvdW5kIHRoYXQgdmFyaWFibGUuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBzaW1pbGFyIHRvIGZpbmQgdGhlIGRlY2xhcmF0aW9uIGFuZCB0aGUgYXNzaWdubWVudHMuIFRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBsb2dpYyBkZXBlbmRzIG9uIGl0cyB2YWx1ZS4gSXMgaXQgYSBjb21waWxlLXRpbWUgb3B0aW9uLCBvciBydW50aW1lIGNvbmZpZ3VyYWJsZT8gSXMgaXQgYSBib29sZWFuIG9yIHNvbWUga2luZCBvZiBlbnVtZXJhdGVkIHZhbHVlPyBLbm93aW5nIGhvdyB0aGUgY29uZmlndXJhdGlvbiBpbXBhY3RzIHpzd2FwIGJlaGF2aW9yIGlzIHRoZSBrZXkuIElzIHRoaXMgdG8gZGlzYWJsZSBvciBwcmV2ZW50IHpzd2FwIGZyb20gKmV2ZXIqIGJlaW5nIGFjdGl2ZT8gT3IgcGVyaGFwcyBhIHBhcmFtZXRlciB0byBpbmZsdWVuY2UgaW5pdGlhbCBzZXR1cCBidXQgcGVybWl0IGVuYWJsaW5nIHZpYSBvdGhlciBtZWNoYW5pc21zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgcHJvdmlkZXMgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB6c3dhcCBiZWhhdmlvci4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGV4cGxvcmF0aW9uIHdpbGwgbGlrZWx5IGludm9sdmUgbG9va2luZyBhdCB0aGUgYHpzd2FwYCBkcml2ZXIgY29kZSwgcHJvYmFibHkgd2l0aGluIHRoZSBgbW1gIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IGRlY2lzaW9ucyBhcmUgbWFkZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24gZm9yIGFueSBleHBsYW5hdGlvbiBvZiB0aGUgcGFyYW1ldGVyIGFuZCBpdHMgaW50ZW5kZWQgdXNlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzowNy45Mzk1NDk4MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzI2Mjk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3pzd2FwLmg9MzY9Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaDozNzpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTM4LSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9NjI9c3RhdGljIGlubGluZSBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC02Ni1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Njc6c3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjgte1xcbi0tXFxubW0vbWVtb3J5LmM9NDc5NT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4MTYtXFx0ICovXFxubW0vbWVtb3J5LmM6NDgxNzpcXHRpZiAoIXpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS9tZW1vcnkuYy00ODE4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vc2htZW0uYz0yMDQzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL3NobWVtLmMtMjA1Mi1cXHRpZiAoKHZtZiBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSh1c2VyZmF1bHRmZF9hcm1lZCh2bWYtXFx1MDAzZXZtYSkpKSB8fFxcbm1tL3NobWVtLmM6MjA1MzpcXHQgICAgICF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0vc2htZW0uYy0yMDU0LVxcdFxcdG9yZGVyID0gMDtcXG4tLVxcbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjktXFxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzEte1xcbi0tXFxubW0venN3YXAuYz0xNTk2PWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE2MDUtXFxubW0venN3YXAuYzoxNjA2OlxcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0venN3YXAuYy0xNjA3LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzoxMS4wNzIxODY3MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk1NzI3NDk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBac3dhcCBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB6c3dhcCBzZXR1cC4gSSBzZWUgdGhhdCB0aGUgYHpzd2FwX3Bvb2xfY3JlYXRlYCBmdW5jdGlvbiBpcyBrZXk7IGl0J3MgY2FsbGVkIGluIHR3byBzaWduaWZpY2FudCBwbGFjZXM6IGVpdGhlciB3aGVuIGEgdXNlciBzZXRzIHVwIGEgbmV3IGNvbXByZXNzb3IgdmlhIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIG9yIGR1cmluZyBpbml0aWFsIGB6c3dhcF9zZXR1cGAuIFRoZSB0cmlja3kgcGFydCB1c2VkIHRvIGJlIHRoZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKWAgY2FsbCwgd2hpY2ggd2FzIHByZXZpb3VzbHkgb25seSBpbiBgenN3YXBfc2V0dXBgLiBUaGUgcHJvYmxlbSBJIHNlZSB3aXRoIHRoaXMgaXMgdGhhdCBpZiB0aGUgcG9vbCBjcmVhdGlvbiBoYXBwZW5zICphZnRlciogdGhlIGluaXRpYWwgc2V0dXDigJRsZXQncyBzYXkgdGhyb3VnaCBhIGxhdGVyIGNvbXByZXNzb3IgY29uZmlndXJhdGlvbuKAlG9yIGlmIGB6c3dhcF9wb29sX2NyZWF0ZWAgc3VjY2VlZHMgaW5kZXBlbmRlbnRseSwgdGhlbiB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgc3RhdGljIGtleSBub3QgYmVpbmcgZW5hYmxlZCB3aGVuIGl0IHNob3VsZCBiZS5cblxuVGhlIHNvbHV0aW9uIGlzIGNsZXZlcjogbW92ZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKWAgKmludG8qIGB6c3dhcF9wb29sX2NyZWF0ZWAuIFRoaXMgZ3VhcmFudGVlcyB0aGF0ICpldmVyeSogdGltZSBhIHpzd2FwIHBvb2wgaXMgYWN0dWFsbHkgY3JlYXRlZOKAlG5vIG1hdHRlciB0aGUgdHJpZ2dlcuKAlHRoZSBzdGF0aWMga2V5IHdpbGwgYmUgZW5hYmxlZC4gVGhpcyBwcm92aWRlcyBhIG1vcmUgcm9idXN0IGFuZCBwcmVkaWN0YWJsZSB6c3dhcCBiZWhhdmlvciwgZXNwZWNpYWxseSBkdXJpbmcgcnVudGltZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuIEl0J3MgYSBuaWNlLCBjbGVhbiB3YXkgdG8gZW5zdXJlIHRoYXQgdGhlIHpzd2FwIGZlYXR1cmUgaXMgY29ycmVjdGx5IGFjdGl2YXRlZCB3aGVuIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlcyBhcmUgYWN0dWFsbHkgcmVhZHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzoxNC4wMjk0NjUzMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDY1Mzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjE0LjIxNDEyODU2NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDE4OTk1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfWlNXQVBgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBDT05GSUdfWlNXQVBgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGp1bXAgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdtIGJldHRpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBmb3IgYFpTV0FQYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgY29uZmxpY3Qgd2l0aCB0aGlzIG9uZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MTUuNjMzMTI5NjczWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxcbiAgMTg6XFx0XFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXFxuICAxOTpcXHRcXHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxcbiAgMjA6XFx0XFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuICAzMjpcXHRcXHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcXG4gIDMzOlxcdFxcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuICAzNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxcbiAgNDA6XFx0XFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXFxuICA0MzpcXHRcXHQgIGNvbW1hbmQgbGluZSAnenN3YXAuZW5hYmxlZD0nIG9wdGlvbi5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG4gIDQ2OlxcdFxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICA0ODpcXHRcXHRkZWZhdWx0IG5cXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcXG4gIDUxOlxcdFxcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXFxuICA1MjpcXHRcXHQgIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSkgb24gbWVtb3J5IHByZXNzdXJlLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MTUuNjMzMzMxMTAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDQxOTgzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBac3dhcDogQSBXb3J0aHkgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLiBGaXJzdCwgcmVhY2hhYmlsaXR5IGlzIGtleS4gVGhpcyBjb2RlIGRpdmVzIHJpZ2h0IGludG8gYG1tL3pzd2FwLmNgLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRlcnJpdG9yeS4gVGhhdCdzIGEgZ29vZCBzdGFydCwgYW5kIHRoZSBmYWN0IHRoYXQgaXQncyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyIGlzIGFub3RoZXIgc3Ryb25nIHBvaW50LiBEeW5hbWljIGNvbmZpZ3VyYXRpb24gb2YgenN3YXAgdGhyb3VnaCBzeXNmcyBpcyBwcmFjdGljYWxseSBiZWdnaW5nIHRvIGJlIGZ1enplZCwgYW5kIHRoZW4gd2UgaGF2ZSBzdGF0aWMgYnJhbmNoIGZsaXBwaW5nIGFzIHdlbGwuIFRoYXQgYWZmZWN0cyBrZXkgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX25ldmVyX2VuYWJsZWQoKWAgYW5kIGB6c3dhcF9sb2FkKClgLlxuXG5HaXZlbiB0aGF0IHJlYWNoYWJpbGl0eSBhbmQgdGhlIGltcGFjdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGhhcyBzdHJvbmcgcG90ZW50aWFsLiBUaGUgdmVyZGljdDogZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHBpbiBkb3duIHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluOiBgenN3YXBfcG9vbF9jcmVhdGVgLCBgenN3YXBfc2V0dXBgLCBgenN3YXBfbmV2ZXJfZW5hYmxlZGAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF9lbmFibGVkX3BhcmFtX3NldGAsIGB6c3dhcF9sb2FkYCwgYW5kIGB6c3dhcF9zdG9yZWAuIEkgc2hvdWxkIHByb2JhYmx5IHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYW5kIGRlZmluaXRpb25zIGRpcmVjdGx5IGluIGBtbS96c3dhcC5jYCB0byBiZSBwcmVjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyMiwiT3V0cHV0VG9rZW5zIjo5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjE4LjQ3NzUzMjc1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNjYyNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgXFxcXCp6c3dhcF9wb29sX2NyZWF0ZXxec3RhdGljIGludCB6c3dhcF9zZXR1cHxeYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkfF5zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0fF5zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0fF5ib29sIHpzd2FwX3N0b3JlfF5pbnQgenN3YXBfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9Nzg9c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XFxuLS1cXG5tbS96c3dhcC5jLTg1LVxcbm1tL3pzd2FwLmM6ODY6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG5tbS96c3dhcC5jLTg3LVxcbi0tXFxubW0venN3YXAuYz05MD1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XFxubW0venN3YXAuYzo5MTpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcXG5tbS96c3dhcC5jLTkyLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XFxuLS1cXG5tbS96c3dhcC5jPTEwMD1zdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYzoxMDE6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy0xMDItXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTI1PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjktXFxubW0venN3YXAuYzoxMzA6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzEte1xcbi0tXFxubW0venN3YXAuYz0yNDU9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcXG4tLVxcbm1tL3pzd2FwLmMtMjcyLVxcbm1tL3pzd2FwLmM6MjczOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTI3NC17XFxuLS1cXG5tbS96c3dhcC5jPTUxMT1zdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtNTI5LVxcbm1tL3pzd2FwLmM6NTMwOnN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS96c3dhcC5jLTUzMS17XFxuLS1cXG5tbS96c3dhcC5jLTYxOC1cXG5tbS96c3dhcC5jOjYxOTpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG5tbS96c3dhcC5jLTYyMC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmM9MTQxMD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNDg5LVxcbm1tL3pzd2FwLmM6MTQ5MDpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNDkxLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTU5NS0gKi9cXG5tbS96c3dhcC5jOjE1OTY6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTE1OTcte1xcbi0tXFxubW0venN3YXAuYz0xNzY0PXN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE3NzItKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjE3NzM6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjE4LjY1MDIwMzA2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTYxNDI0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxldmFudCB0byB6c3dhcC4gRmlyc3QsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBgQ09ORklHX1NXQVBgIGlzIGVuYWJsZWQsIGFzIGBaU1dBUGAgaW5oZXJlbnRseSBkZXBlbmRzIG9uIGl0LiBUaGVuLCBvZiBjb3Vyc2UsIGBDT05GSUdfWlNXQVBgIGl0c2VsZiBtdXN0IGJlIHNldC4gSSdsbCBuZWVkIHRvIHJ1biBhIGNoZWNrIHRvIGVuc3VyZSBubyBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgbWlzc2luZy5cblxuQWxyaWdodCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBgWlNXQVBgIGFsc28gcmVsaWVzIG9uIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBTbywgSSdsbCBhZGQgdGhvc2UgdG8gbXkgZW5hYmxlbWVudCBsaXN0LiBNeSBFbmFibGVDb25maWdzIGFyZTogYFtcIlNXQVBcIiwgXCJaU1dBUFwiXWAuXG5cbk5vdywgSSdsbCBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhlIHpzd2FwIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZDogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3NldHVwYCwgYHpzd2FwX25ldmVyX2VuYWJsZWRgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX2xvYWRgLlxuXG5GaW5hbGx5LCBpdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI0NiwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjEuODExNjMxNDU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzODkzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9zZXR1cFwiLFxuICAgIFwienN3YXBfbmV2ZXJfZW5hYmxlZFwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0venN3YXAuYywgbW92aW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSB6c3dhcF9ldmVyX2VuYWJsZWQgc3RhdGljIGtleSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHpzd2FwX25ldmVyX2VuYWJsZWQoKSBhbmQgYWZmZWN0cyBydW50aW1lIGNoZWNrcyBkdXJpbmcgc3dhcCBvcGVyYXRpb25zIGFuZCBzeXNmcyBwYXJhbWV0ZXIgcmVjb25maWd1cmF0aW9uLiBJdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfcG9vbF9jcmVhdGVcIixcbiAgICBcInpzd2FwX3NldHVwXCIsXG4gICAgXCJ6c3dhcF9uZXZlcl9lbmFibGVkXCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfZW5hYmxlZF9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX2xvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCBtb3ZpbmcgdGhlIGFjdGl2YXRpb24gb2YgdGhlIHpzd2FwX2V2ZXJfZW5hYmxlZCBzdGF0aWMga2V5IGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCkuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgenN3YXBfbmV2ZXJfZW5hYmxlZCgpIGFuZCBhZmZlY3RzIHJ1bnRpbWUgY2hlY2tzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMgYW5kIHN5c2ZzIHBhcmFtZXRlciByZWNvbmZpZ3VyYXRpb24uIEl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjIxLjk2NTUzNTc4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MTgyMzE5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzoyMS45NjY0Njk0NDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODYxNzI5MDY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgc3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCkgZnJvbSB6c3dhcF9zZXR1cCgpIGludG8genN3YXBfcG9vbF9jcmVhdGUoKSwgZW5zdXJpbmcgdGhhdCB0aGUgc3RhdGljIGJyYW5jaCB0cmFja2luZyB3aGV0aGVyIHpzd2FwIHdhcyBldmVyIGVuYWJsZWQgaXMgYWN0aXZhdGVkIHdoZW5ldmVyIGEgenN3YXAgcG9vbCBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCAoZS5nLiwgd2hlbiBkeW5hbWljYWxseSBjb25maWd1cmVkIHZpYSBzeXNmcy9wYXJhbWV0ZXJzKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBzdGF0aWMga2V5IC8gYnJhbmNoIG1hbmFnZW1lbnQgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIChLQVNBTikgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3OTVhZGM5NWYyMWFiYzBjMzYxNGYxZDdlMzdjMzliNzgzMThlZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjNhYmNkODQzMzQyNWIgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzI0LDYgKzMyNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJjcmVhdGVkXCIsIHBvb2wpO1xuIFxuK1x0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbitcbiBcdHJldHVybiBwb29sO1xuIFxuIHJlZl9mYWlsOlxuQEAgLTE4MDUsNyArMTgwNyw2IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuLVx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfZXJyKFwicG9vbCBjcmVhdGlvbiBmYWlsZWRcXG5cIik7XG4gXHRcdHpzd2FwX2VuYWJsZWQgPSBmYWxzZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjIxLjk2NjQ3MTU5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDI0NTIwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGRpdmUgaW50byBhIHBhdGNoIHdpdGhpbiB0aGUgYG1tL3pzd2FwLmNgIGZpbGUuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgKmludGVyZXN0aW5nKi4gWnN3YXAsIGFzIGEgY29tcHJlc3NlZCBzd2FwIGNhY2hlLCBjYW4gYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhbmQgYW55IG1vZGlmaWNhdGlvbiB0aGVyZSB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGl0c2VsZi5cblxuSSdsbCBzdGFydCBieSBwdWxsaW5nIHVwIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiBgbW0venN3YXAuY2AgZGlyZWN0bHkuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlOyB0aGUgbGluZSBudW1iZXJzIGFyZSBhIGdvb2Qgc3RhcnQsIGJ1dCB0aGV5IGRvbid0IHRlbGwgdGhlIHdob2xlIHN0b3J5LiBJJ2xsIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIG15IHByZWZlcnJlZCBmaWxlIHJlYWRpbmcgdG9vbCAobGlrZWx5IHNvbWV0aGluZyBsaWtlIGBsZXNzYCBvciBhbiBlZGl0b3Igd2l0aCBnb29kIHNlYXJjaCBjYXBhYmlsaXRpZXMpIHRvIGxvb2sgYXJvdW5kIGxpbmVzIDMyNCBhbmQgMTgwNSBpbiBgbW0venN3YXAuY2AuIEkgbmVlZCBjb250ZXh0ISBXaGF0IGZ1bmN0aW9ucyBhcmUgYXJvdW5kIHRob3NlIGxpbmVzPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gV2hhdCdzIHRoZSBnZW5lcmFsIGZsb3cgb2YgZXhlY3V0aW9uIGluIHRoYXQgYXJlYSBvZiB0aGUgY29kZT8gSXMgdGhpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUsIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGNvZGUsIG9yIGEgbW9yZSBwZXJpcGhlcmFsIGZ1bmN0aW9uPyBUaGF0IGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0IGFuZCBpdHMgbGlrZWx5IGludGVudC4gVGhlIGdvYWwgYXQgdGhpcyBzdGFnZSBpcyB0byBpZGVudGlmeSB3aGVyZSB0aGUgY2hhbmdlIGlzIGJlaW5nIG1hZGUgYW5kIHdoeS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MSwiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjYuOTkwOTk4MjAyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxMDpcXHRcXHQgKiBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoKSB3aWxsIG5vdCBjbGVhbnVwIG9uIGZhaWx1cmUgc2luY2VcXG4gMzExOlxcdFxcdCAqIHdlIGRvbid0IHJlZ2lzdGVyIGEgaG90dW5wbHVnIGNhbGxiYWNrLlxcbiAzMTI6XFx0XFx0ICovXFxuIDMxMzpcXHRcXHRpZiAocmV0KVxcbiAzMTQ6XFx0XFx0XFx0Z290byBjcHVocF9hZGRfZmFpbDtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0LyogYmVpbmcgdGhlIGN1cnJlbnQgcG9vbCB0YWtlcyAxIHJlZjsgdGhpcyBmdW5jIGV4cGVjdHMgdGhlXFxuIDMxNzpcXHRcXHQgKiBjYWxsZXIgdG8gYWx3YXlzIGFkZCB0aGUgbmV3IHBvb2wgYXMgdGhlIGN1cnJlbnQgcG9vbFxcbiAzMTg6XFx0XFx0ICovXFxuIDMxOTpcXHRcXHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZiwgX196c3dhcF9wb29sX2VtcHR5LFxcbiAzMjA6XFx0XFx0XFx0XFx0ICAgICAgUEVSQ1BVX1JFRl9BTExPV19SRUlOSVQsIEdGUF9LRVJORUwpO1xcbiAzMjE6XFx0XFx0aWYgKHJldClcXG4gMzIyOlxcdFxcdFxcdGdvdG8gcmVmX2ZhaWw7XFxuIDMyMzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCk7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImNyZWF0ZWRcXFwiLCBwb29sKTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XFxuIDMyODpcXHRcXG4gMzI5OlxcdFxcdHJldHVybiBwb29sO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRyZWZfZmFpbDpcXG4gMzMyOlxcdFxcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXFx1MDAyNnBvb2wtXFx1MDAzZW5vZGUpO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRjcHVocF9hZGRfZmFpbDpcXG4gMzM1OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuIDMzNjpcXHRcXHRcXHRhY29tcF9jdHhfZnJlZShwZXJfY3B1X3B0cihwb29sLVxcdTAwM2VhY29tcF9jdHgsIGNwdSkpO1xcbiAzMzc6XFx0ZXJyb3I6XFxuIDMzODpcXHRcXHRpZiAocG9vbC1cXHUwMDNlYWNvbXBfY3R4KVxcbiAzMzk6XFx0XFx0XFx0ZnJlZV9wZXJjcHUocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gMzQwOlxcdFxcdGlmIChwb29sLVxcdTAwM2V6c19wb29sKVxcbiAzNDE6XFx0XFx0XFx0enNfZGVzdHJveV9wb29sKHBvb2wtXFx1MDAzZXpzX3Bvb2wpO1xcbiAzNDI6XFx0XFx0a2ZyZWUocG9vbCk7XFxuIDM0MzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzQ0OlxcdH1cXG4gMzQ1OlxcdFxcbiAzNDY6XFx0c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXFxuIDM0NzpcXHR7XFxuIDM0ODpcXHRcXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXFx1MDAyNlxcdTAwMjZcXG4gMzQ5OlxcdFxcdCAgICBzdHJjbXAoenN3YXBfY29tcHJlc3NvciwgQ09ORklHX1pTV0FQX0NPTVBSRVNTT1JfREVGQVVMVCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjYuOTkxMjgwNzAyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3OTA6XFx0XFxuMTc5MTpcXHRcXHRzaHJpbmtfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcInpzd2FwLXNocmlua1xcXCIsXFxuMTc5MjpcXHRcXHRcXHRcXHRXUV9VTkJPVU5EfFdRX01FTV9SRUNMQUlNLCAxKTtcXG4xNzkzOlxcdFxcdGlmICghc2hyaW5rX3dxKVxcbjE3OTQ6XFx0XFx0XFx0Z290byBzaHJpbmtfd3FfZmFpbDtcXG4xNzk1OlxcdFxcbjE3OTY6XFx0XFx0enN3YXBfc2hyaW5rZXIgPSB6c3dhcF9hbGxvY19zaHJpbmtlcigpO1xcbjE3OTc6XFx0XFx0aWYgKCF6c3dhcF9zaHJpbmtlcilcXG4xNzk4OlxcdFxcdFxcdGdvdG8gc2hyaW5rZXJfZmFpbDtcXG4xNzk5OlxcdFxcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgenN3YXBfc2hyaW5rZXIpKVxcbjE4MDA6XFx0XFx0XFx0Z290byBscnVfZmFpbDtcXG4xODAxOlxcdFxcdHNocmlua2VyX3JlZ2lzdGVyKHpzd2FwX3Nocmlua2VyKTtcXG4xODAyOlxcdFxcbjE4MDM6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZ6c3dhcF9zaHJpbmtfd29yaywgc2hyaW5rX3dvcmtlcik7XFxuMTgwNDpcXHRcXG4xODA1OlxcdFxcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XFxuMTgwNjpcXHRcXHRpZiAocG9vbCkge1xcbjE4MDc6XFx0XFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXFxcblxcXCIsIHBvb2wtXFx1MDAzZXRmbV9uYW1lKTtcXG4xODA4OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0LCBcXHUwMDI2enN3YXBfcG9vbHMpO1xcbjE4MDk6XFx0XFx0XFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xcbjE4MTA6XFx0XFx0fSBlbHNlIHtcXG4xODExOlxcdFxcdFxcdHByX2VycihcXFwicG9vbCBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbjE4MTI6XFx0XFx0XFx0enN3YXBfZW5hYmxlZCA9IGZhbHNlO1xcbjE4MTM6XFx0XFx0fVxcbjE4MTQ6XFx0XFxuMTgxNTpcXHRcXHRpZiAoenN3YXBfZGVidWdmc19pbml0KCkpXFxuMTgxNjpcXHRcXHRcXHRwcl93YXJuKFxcXCJkZWJ1Z2ZzIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuMTgxNzpcXHRcXHR6c3dhcF9pbml0X3N0YXRlID0gWlNXQVBfSU5JVF9TVUNDRUVEO1xcbjE4MTg6XFx0XFx0cmV0dXJuIDA7XFxuMTgxOTpcXHRcXG4xODIwOlxcdGxydV9mYWlsOlxcbjE4MjE6XFx0XFx0c2hyaW5rZXJfZnJlZSh6c3dhcF9zaHJpbmtlcik7XFxuMTgyMjpcXHRzaHJpbmtlcl9mYWlsOlxcbjE4MjM6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoc2hyaW5rX3dxKTtcXG4xODI0OlxcdHNocmlua193cV9mYWlsOlxcbjE4MjU6XFx0XFx0Y3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFKTtcXG4xODI2OlxcdGhwX2ZhaWw6XFxuMTgyNzpcXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koenN3YXBfZW50cnlfY2FjaGUpO1xcbjE4Mjg6XFx0Y2FjaGVfZmFpbDpcXG4xODI5OlxcdFxcdC8qIGlmIGJ1aWx0LWluLCB3ZSBhcmVuJ3QgdW5sb2FkZWQgb24gZmFpbHVyZTsgZG9uJ3QgYWxsb3cgdXNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjQzOjI2Ljk5MTUzMjE4MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDk4MTQ5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHpzd2FwIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHpzd2FwX2V2ZXJfZW5hYmxlZGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEl0J3MgYSBrZXkgdmFyaWFibGUsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgenN3YXAgKG9yIGxhY2sgdGhlcmVvZikgaW4gdGhpcyBjb250ZXh0LiBUaW1lIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyByZWFkIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllZC4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MjguNDg5Njg3MDI4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3NTEwODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2V2ZXJfZW5hYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTg2PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCk7XFxuLS1cXG5tbS96c3dhcC5jLTg4LS8qIEVuYWJsZS9kaXNhYmxlIHpzd2FwICovXFxubW0venN3YXAuYzo4OTpzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIHpzd2FwX2V2ZXJfZW5hYmxlZCk7XFxubW0venN3YXAuYy05MC1zdGF0aWMgYm9vbCB6c3dhcF9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfWlNXQVBfREVGQVVMVF9PTik7XFxuLS1cXG5tbS96c3dhcC5jPTEzMD1ib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxubW0venN3YXAuYzoxMzI6XFx0cmV0dXJuICFzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19aU1dBUF9ERUZBVUxUX09OLCBcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTEzMy19XFxuLS1cXG5tbS96c3dhcC5jPTI3Mz1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxuLS1cXG5tbS96c3dhcC5jLTMyNi1cXG5tbS96c3dhcC5jOjMyNzpcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jLTMyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MzEuNDQ3MjA5MTkxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NjEzNjIzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBac3dhcCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB6c3dhcCBpcyBiZWluZyBpbml0aWFsaXplZCwgb3IgbW9yZSBzcGVjaWZpY2FsbHksIHdoZXJlIHRoZSBkZWNpc2lvbiB0byAqbm90KiBlbmFibGUgaXQgaXMgbWFkZS4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBwb2ludHMgaW4gdGhlIGNvZGUgcmVsYXRlZCB0byB6c3dhcC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gdW5kZXJzdGFuZCB1bmRlciB3aGljaCBjb25kaXRpb25zIGB6c3dhcF9uZXZlcl9lbmFibGVkYCBpcyBzZXQgb3IsIGNvbnZlcnNlbHksIHdoZW4gdGhlIHpzd2FwIHBvb2wgaXMgY3JlYXRlZCBieSBjYWxscyB0byBgenN3YXBfcG9vbF9jcmVhdGVgLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBob3cgdGhlIHNldHRpbmcgb2YgdGhpcyB2YXJpYWJsZSBpbmZsdWVuY2VzIHN1YnNlcXVlbnQgYWN0aW9ucy4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGEgYml0IG9mIGBncmVwYCBvciBzaW1pbGFyLCB0byBmaW5kIGFsbCBjYWxsIHNpdGVzLCB0aGVuIGp1bXBpbmcgaW50byB0aGUgbW9zdCByZWxldmFudCB0byB0cmFjayBkb3duIHRoZSBpc3N1ZS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6NDM6MzMuMTA4NTc1NDY1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTExOTE5MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX25ldmVyX2VuYWJsZWR8enN3YXBfcG9vbF9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTM2PWJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzc6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTYyPXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNjYtXFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjY3OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTY4LXtcXG4tLVxcbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODE2LVxcdCAqL1xcbm1tL21lbW9yeS5jOjQ4MTc6XFx0aWYgKCF6c3dhcF9uZXZlcl9lbmFibGVkKCkpXFxubW0vbWVtb3J5LmMtNDgxOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3NobWVtLmM9MjA0Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTIwNTItXFx0aWYgKCh2bWYgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkodXNlcmZhdWx0ZmRfYXJtZWQodm1mLVxcdTAwM2V2bWEpKSkgfHxcXG5tbS9zaG1lbS5jOjIwNTM6XFx0ICAgICAhenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbm1tL3NobWVtLmMtMjA1NC1cXHRcXHRvcmRlciA9IDA7XFxuLS1cXG5tbS96c3dhcC5jPTEyNT1ib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI5LVxcbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbm1tL3pzd2FwLmMtMTMxLXtcXG4tLVxcbm1tL3pzd2FwLmM9MjQ1PXN0YXRpYyB2b2lkIGFjb21wX2N0eF9mcmVlKHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHgpXFxuLS1cXG5tbS96c3dhcC5jLTI3Mi1cXG5tbS96c3dhcC5jOjI3MzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxubW0venN3YXAuYy0yNzQte1xcbi0tXFxubW0venN3YXAuYy0zNDUtXFxubW0venN3YXAuYzozNDY6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXFxubW0venN3YXAuYy0zNDcte1xcbi0tXFxubW0venN3YXAuYy0zNjEtXFxubW0venN3YXAuYzozNjI6XFx0cmV0dXJuIHpzd2FwX3Bvb2xfY3JlYXRlKHpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmMtMzYzLX1cXG4tLVxcbm1tL3pzd2FwLmM9NTMwPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNTcyLVxcdGlmICghcG9vbClcXG5tbS96c3dhcC5jOjU3MzpcXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxubW0venN3YXAuYy01NzQtXFx0ZWxzZSB7XFxuLS1cXG5tbS96c3dhcC5jPTE1OTY9aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTYwNS1cXG5tbS96c3dhcC5jOjE2MDY6XFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG5tbS96c3dhcC5jLTE2MDctXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLS1cXG5tbS96c3dhcC5jPTE3NzM9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xODA0LVxcbm1tL3pzd2FwLmM6MTgwNTpcXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xcbm1tL3pzd2FwLmMtMTgwNi1cXHRpZiAocG9vbCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0MzozNi4yMjA1MDE1MTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM2MzIxNDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoOiBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIG1vdmVkIHRoZSBgc3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKWAgY2FsbCBmcm9tIGB6c3dhcF9zZXR1cCgpYCB0byBgenN3YXBfcG9vbF9jcmVhdGUoKWAuIFRoZSByYXRpb25hbGUgaXMgdG8gZW5zdXJlIHRoZSBzdGF0aWMga2V5IGlzIGVuYWJsZWQgd2hlbmV2ZXIgKmFueSogenN3YXAgcG9vbCBpcyBjcmVhdGVkLCBhZGRyZXNzaW5nIHNjZW5hcmlvcyB3aGVyZSB6c3dhcCBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBkZWxheWVkIG9yIHRyaWdnZXJlZCBkeW5hbWljYWxseS4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBtb3ZlPyBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrcy4gTm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgbm8gY2hhbmdlcyB0byBzdHJ1Y3QgZmllbGQgaW5pdGlhbGl6YXRpb24sIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBzdGF0aWMgYnJhbmNoIGVuYWJsZW1lbnQgaXMgcHVyZWx5IGEgYm9vbGVhbiBmbGFnLCBzbyBpdCdzIGEganVtcCB0YWJsZSBtb2RpZmljYXRpb24uXG5cbkdpdmVuIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoZSBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRob3NlIGtpbmRzIG9mIHByb2JsZW1zLiBUaGlzIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCB0aGUgKnNldHRpbmcqIG9mIGEgYm9vbGVhbiB0aGF0IGNvbnRyb2xzIGEganVtcC4gU3RhbmRhcmQgS0FTQU4gY292ZXJhZ2UgYW5kIGJ1ZyBkZXRlY3Rpb24gdG9vbHMgc2hvdWxkIGhhbmRsZSB0aGF0LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cblRvIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcsIGxldCdzIGNsYXJpZnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIEtBU0FOIGNhdGNoZXMgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZ2VhcmVkIHRvd2FyZHMgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgZGF0YSBidWZmZXJzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2Vyc3BhY2UsIGFuZCBpdCdzIHNpbXBseSBlbmFibGluZyBhIHN0YXRpYyBicmFuY2ggYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb2YgcG9vbCBjcmVhdGlvbiwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cbkFscmlnaHQsIHRpbWUgdG8gdHJpZ2dlciBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA1LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzo0Mzo0MC41ODM3MTk5NDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpIGZyb20genN3YXBfc2V0dXAoKSBpbnRvIHpzd2FwX3Bvb2xfY3JlYXRlKCksIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpYyBicmFuY2ggdHJhY2tpbmcgd2hldGhlciB6c3dhcCB3YXMgZXZlciBlbmFibGVkIGlzIGFjdGl2YXRlZCB3aGVuZXZlciBhIHpzd2FwIHBvb2wgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGUuZy4sIHdoZW4gZHluYW1pY2FsbHkgY29uZmlndXJlZCB2aWEgc3lzZnMvcGFyYW1ldGVycykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgc3RhdGljIGtleSAvIGJyYW5jaCBtYW5hZ2VtZW50IGFuZCBkb2VzIG5vdCBhbGxvY2F0ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2Ugb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgc2FuaXRpemVycyAoS0FTQU4pIGFyZSBzdWZmaWNpZW50LCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKSBmcm9tIHpzd2FwX3NldHVwKCkgaW50byB6c3dhcF9wb29sX2NyZWF0ZSgpLCBlbnN1cmluZyB0aGF0IHRoZSBzdGF0aWMgYnJhbmNoIHRyYWNraW5nIHdoZXRoZXIgenN3YXAgd2FzIGV2ZXIgZW5hYmxlZCBpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYSB6c3dhcCBwb29sIGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChlLmcuLCB3aGVuIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgdmlhIHN5c2ZzL3BhcmFtZXRlcnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHN0YXRpYyBrZXkgLyBicmFuY2ggbWFuYWdlbWVudCBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgKEtBU0FOKSBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows9g24[1] Phase: Succeeded StartedAt: 2026-09-06 23:43:46 +0000 UTC FinishedAt: 2026-09-06 23:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 23:43:46 +0000 UTC FinishedAt: 2026-09-06 23:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2] Phase: Succeeded StartedAt: 2026-09-06 23:43:46 +0000 UTC FinishedAt: 2026-09-07 03:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 23:43:46 +0000 UTC FinishedAt: 2026-09-07 03:28:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 23:43:46 +0000 UTC FinishedAt: 2026-09-06 23:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 23:43:46 +0000 UTC FinishedAt: 2026-09-06 23:43:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflows9g24/series-workflows9g24-convert-artifact-4056525907/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 23:43:56 +0000 UTC FinishedAt: 2026-09-07 00:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 23:43:56 +0000 UTC FinishedAt: 2026-09-07 00:07:08 +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:*5556c57f-788a-4016-9ca5-0cc1478e7b3c,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-workflows9g24/series-workflows9g24-convert-artifact-4056525907/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": "746b09fe-8ab3-4659-88bd-9889cf350028", "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-workflows9g24/series-workflows9g24-build-action-3250122625/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 23:43:56 +0000 UTC FinishedAt: 2026-09-07 00:06:58 +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:*5556c57f-788a-4016-9ca5-0cc1478e7b3c,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-workflows9g24/series-workflows9g24-convert-artifact-4056525907/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": "746b09fe-8ab3-4659-88bd-9889cf350028", "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-workflows9g24/series-workflows9g24-build-action-3250122625/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 00:07:08 +0000 UTC FinishedAt: 2026-09-07 00:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 00:07:08 +0000 UTC FinishedAt: 2026-09-07 00:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 00:07:08 +0000 UTC FinishedAt: 2026-09-07 00:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 00:07:08 +0000 UTC FinishedAt: 2026-09-07 00:07:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflows9g24/series-workflows9g24-convert-artifact-3704389706/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 00:07:18 +0000 UTC FinishedAt: 2026-09-07 00:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 00:07:18 +0000 UTC FinishedAt: 2026-09-07 00:09:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*746b09fe-8ab3-4659-88bd-9889cf350028,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-workflows9g24/series-workflows9g24-build-action-3250122625/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-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 00:09:15 +0000 UTC FinishedAt: 2026-09-07 00:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 00:09:15 +0000 UTC FinishedAt: 2026-09-07 00:09:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 00:09:15 +0000 UTC FinishedAt: 2026-09-07 00:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 00:09:15 +0000 UTC FinishedAt: 2026-09-07 00:25:02 +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:*5556c57f-788a-4016-9ca5-0cc1478e7b3c,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-workflows9g24/series-workflows9g24-convert-artifact-3704389706/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": "83a403cd-d173-4311-b45b-1008f20aa8a5", "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-workflows9g24/series-workflows9g24-build-action-237298798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 00:09:15 +0000 UTC FinishedAt: 2026-09-07 00:24:52 +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:*5556c57f-788a-4016-9ca5-0cc1478e7b3c,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-workflows9g24/series-workflows9g24-convert-artifact-3704389706/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": "83a403cd-d173-4311-b45b-1008f20aa8a5", "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-workflows9g24/series-workflows9g24-build-action-237298798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 00:25:02 +0000 UTC FinishedAt: 2026-09-07 00:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 00:25:02 +0000 UTC FinishedAt: 2026-09-07 00:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 00:25:02 +0000 UTC FinishedAt: 2026-09-07 00:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 00:25:02 +0000 UTC FinishedAt: 2026-09-07 00:26:59 +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:*83a403cd-d173-4311-b45b-1008f20aa8a5,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-workflows9g24/series-workflows9g24-build-action-237298798/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-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 00:27:09 +0000 UTC FinishedAt: 2026-09-07 03:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 00:27:09 +0000 UTC FinishedAt: 2026-09-07 03:28:29 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},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:*746b09fe-8ab3-4659-88bd-9889cf350028,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83a403cd-d173-4311-b45b-1008f20aa8a5,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-workflows9g24/series-workflows9g24-build-action-3250122625/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-workflows9g24/series-workflows9g24-build-action-237298798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 00:27:09 +0000 UTC FinishedAt: 2026-09-07 00:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 00:27:09 +0000 UTC FinishedAt: 2026-09-07 00:27:14 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},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-workflows9g24/series-workflows9g24-convert-artifact-860396511/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 00:27:09 +0000 UTC FinishedAt: 2026-09-07 00:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 00:27:09 +0000 UTC FinishedAt: 2026-09-07 00:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 00:27:09 +0000 UTC FinishedAt: 2026-09-07 00:27:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 00:27:19 +0000 UTC FinishedAt: 2026-09-07 03:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9g24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_pool_create","zswap_setup","zswap_never_enabled","zswap_compressor_param_set","zswap_enabled_param_set","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9e52420889a26d87ac7a92eb579cf18d7b516397","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"b5895d91-4540-4bba-8d73-9bf77b8fd8ef","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 00:27:19 +0000 UTC FinishedAt: 2026-09-07 03:28:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*746b09fe-8ab3-4659-88bd-9889cf350028,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83a403cd-d173-4311-b45b-1008f20aa8a5,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-workflows9g24/series-workflows9g24-build-action-3250122625/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-workflows9g24/series-workflows9g24-build-action-237298798/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-workflows9g24/series-workflows9g24-convert-artifact-860396511/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,}