Name: series-workflow464wp Phase: Succeeded StartedAt: 2026-08-19 07:28:12 +0000 UTC FinishedAt: 2026-08-19 08:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[0] Phase: Succeeded StartedAt: 2026-08-19 07:28:12 +0000 UTC FinishedAt: 2026-08-19 07:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 07:28:12 +0000 UTC FinishedAt: 2026-08-19 07:30:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "df7dce2090342170b7643d36f694204cae7792a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "df7dce2090342170b7643d36f694204cae7792a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "6a418438-7234-4744-b150-9bd2917b4eab" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_mapping_pairs_decompress" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSB3aGVyZSBhbiBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5IGluIGEgbm9uLXJlc2lkZW50IGF0dHJpYnV0ZSBjb3VsZCBiZSBpbXByb3Blcmx5IHByb2Nlc3NlZC4gVGhlIGZpZWxkcyBiZWluZyBhY2Nlc3NlZCAoYGhpZ2hlc3RfdmNuYCwgYGFsbG9jYXRlZF9zaXplYCwgYGRhdGFfc2l6ZWAsIGBpbml0aWFsaXplZF9zaXplYCkgYXJlIHBhcnQgb2YgdGhlIG9uLWRpc2sgYGF0dHJfcmVjb3JkYCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gcmVhZCBmcm9tIHRoZSBkaXNrL2ltYWdlLiBUaGUgYnVnIGxpa2VseSBsZWFkcyB0byBhbiBlbXB0eSBvciBpbnZhbGlkIHJ1bmxpc3QsIGNhdXNpbmcgYSBjcmFzaCAoc3VjaCBhcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQtb2YtYm91bmRzIGFjY2VzcykgbGF0ZXIgaW4gdGhlIGV4ZWN1dGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyYmYzYWM4YjZiYTNhYmVkNzNkYzEwNWU1YTJmZjFjYjNlZWRlNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL3J1bmxpc3QuYyBiL2ZzL250ZnMvcnVubGlzdC5jXG5pbmRleCA5ZWFhZGJjMGVmNDdmLi5jNzc1YjdkZjA3NGY4IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9ydW5saXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvcnVubGlzdC5jXG5AQCAtNzYzLDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0LyogU3RhcnQgYXQgdmNuID0gbG93ZXN0X3ZjbiBhbmQgbGNuIDAuICovXG4gXHR2Y24gPSBsb3dlc3RfdmNuO1xuIFx0bGNuID0gMDtcbiYjNDM7XHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIFx0LyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xuIFx0YnVmID0gKHU4ICopYXR0ciAmIzQzO1xuIFx0XHRsZTE2X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTtcbkBAIC03NzIsNiAmIzQzOzc3MywyMyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXkgaXMgdmFsaWQgb25seSBmb3IgYSB6ZXJvLWxlbmd0aFxuJiM0MztcdCAqIGF0dHJpYnV0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChkZWx0YXhjbiAhPSAtMSB8fFxuJiM0MztcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcbiYjNDM7XHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKSB8fFxuJiM0MztcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHtcbiYjNDM7XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0IFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdC1cdTAwM2VybCkge1xuJiM0MztcdFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVx1MDAzZWNvdW50O1xuJiM0MztcdFx0cmV0dXJuIG9sZF9ydW5saXN0LVx1MDAzZXJsO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBDdXJyZW50IHBvc2l0aW9uIGluIHJ1bmxpc3QgYXJyYXkuICovXG4gXHRybHBvcyA9IDA7XG4gXHQvKiBBbGxvY2F0ZSBmaXJzdCBwYWdlIGFuZCBzZXQgY3VycmVudCBydW5saXN0IHNpemUgdG8gb25lIHBhZ2UuICovXG5AQCAtOTQyLDcgJiM0Mzs5NjAsNiBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0ICogSWYgdGhlcmUgaXMgYSBoaWdoZXN0X3ZjbiBzcGVjaWZpZWQsIGl0IG11c3QgYmUgZXF1YWwgdG8gdGhlIGZpbmFsXG4gXHQgKiB2Y24gaW4gdGhlIHJ1bmxpc3QgLSAxLCBvciBzb21ldGhpbmcgaGFzIGdvbmUgYmFkbHkgd3JvbmcuXG4gXHQgKi9cbi1cdGRlbHRheGNuID0gbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XG4gXHRpZiAodW5saWtlbHkoZGVsdGF4Y24gXHUwMDI2XHUwMDI2IHZjbiAtIDEgIT0gZGVsdGF4Y24pKSB7XG4gbXBhX2VycjpcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0NvcnJ1cHQgbWFwcGluZyBwYWlycyBhcnJheSBpbiBub24tcmVzaWRlbnQgYXR0cmlidXRlLlwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyYmYzYWM4YjZiYTNhYmVkNzNkYzEwNWU1YTJmZjFjYjNlZWRlNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvcnVubGlzdC5jIGIvZnMvbnRmcy9ydW5saXN0LmMKaW5kZXggOWVhYWRiYzBlZjQ3Zi4uYzc3NWI3ZGYwNzRmOCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9ydW5saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9ydW5saXN0LmMKQEAgLTc2Myw2ICYjNDM7NzYzLDcgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICoKIAkvKiBTdGFydCBhdCB2Y24gPSBsb3dlc3RfdmNuIGFuZCBsY24gMC4gKi8KIAl2Y24gPSBsb3dlc3RfdmNuOwogCWxjbiA9IDA7CiYjNDM7CWRlbHRheGNuID0gbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pOwogCS8qIEdldCBzdGFydCBvZiB0aGUgbWFwcGluZyBwYWlycyBhcnJheS4gKi8KIAlidWYgPSAodTggKilhdHRyICYjNDM7CiAJCWxlMTZfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTsKQEAgLTc3Miw2ICYjNDM7NzczLDIzIEBAIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqCiAJCXJldHVybiBFUlJfUFRSKC1FSU8pOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGgKJiM0MzsJICogYXR0cmlidXRlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZGVsdGF4Y24gIT0gLTEgfHwKJiM0MzsJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHwKJiM0MzsJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8CiYjNDM7CSAgICAgbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7CiYjNDM7CQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7SW52YWxpZCBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LiYjMzQ7KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU8pOwomIzQzOwl9CiYjNDM7CWlmICghdmNuICZhbXA7JmFtcDsgISpidWYgJmFtcDsmYW1wOyBvbGRfcnVubGlzdCAmYW1wOyZhbXA7IG9sZF9ydW5saXN0LSZndDtybCkgewomIzQzOwkJKm5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LSZndDtjb3VudDsKJiM0MzsJCXJldHVybiBvbGRfcnVubGlzdC0mZ3Q7cmw7CiYjNDM7CX0KJiM0MzsKIAkvKiBDdXJyZW50IHBvc2l0aW9uIGluIHJ1bmxpc3QgYXJyYXkuICovCiAJcmxwb3MgPSAwOwogCS8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi8KQEAgLTk0Miw3ICYjNDM7OTYwLDYgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICoKIAkgKiBJZiB0aGVyZSBpcyBhIGhpZ2hlc3RfdmNuIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmluYWwKIAkgKiB2Y24gaW4gdGhlIHJ1bmxpc3QgLSAxLCBvciBzb21ldGhpbmcgaGFzIGdvbmUgYmFkbHkgd3JvbmcuCiAJICovCi0JZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7CiAJaWYgKHVubGlrZWx5KGRlbHRheGNuICZhbXA7JmFtcDsgdmNuIC0gMSAhPSBkZWx0YXhjbikpIHsKIG1wYV9lcnI6CiAJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtDb3JydXB0IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gbm9uLXJlc2lkZW50IGF0dHJpYnV0ZS4mIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy9udGZzL3J1bmxpc3QuY2AsIHNwZWNpZmljYWxseSB0aGUgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBjaGVjayBmb3IgYW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSB3b25kZXIgd2h5IHRoZXkgYWRkZWQgdGhhdC4gRW1wdHkgYXJyYXkgY2hlY2tzIGFyZSB1c3VhbGx5IGFib3V0IHByZXZlbnRpbmcgZWRnZS1jYXNlIGVycm9ycyBvciBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYnV0IHdpdGhvdXQga25vd2luZyB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGFyZCB0byBzYXkgZGVmaW5pdGl2ZWx5LgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgTlRGUyBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgcGVlayBpbiBgZnMvbnRmcy9LY29uZmlnYCB0byB2ZXJpZnkgYENPTkZJR19OVEZTX0ZTYCBpcyBlbmFibGVkLiBNYWtlcyBzdXJlIGl0IGlzIGV2ZW4gY29tcGlsZWQgaW4uCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRvIGdhaW4gYSBiZXR0ZXIgYXBwcmVjaWF0aW9uIGZvciBpdHMgaW1wYWN0IGFuZCBob3cgdGhpcyBuZXcgY2hlY2sgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggZGF0YSB0aGF0IG1heSBoYXZlIGJlZW4gaW50ZW50aW9uYWxseSBjb3JydXB0ZWQuIFRoYXQgY291bGQgZXhwbGFpbiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9ODY9aW50IG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xODctXHQgKiB3ZSB0aGVuIHRyeSB0byBtYXAgdGhlIGFscmVhZHkgbWFwcGVkIHJ1bmxpc3QgZnJhZ21lbnQgYW5kXG5mcy9udGZzL2F0dHJpYi5jOjE4ODpcdCAqIG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKCkgZmFpbHMuXG5mcy9udGZzL2F0dHJpYi5jLTE4OS1cdCAqL1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMTk0LVx0fVxuZnMvbnRmcy9hdHRyaWIuYzoxOTU6XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVx1MDAzZXZvbCwgYSwgXHUwMDI2bmktXHUwMDNlcnVubGlzdCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbmZzL250ZnMvYXR0cmliLmMtMTk2LVx0aWYgKElTX0VSUihybCkpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0yNjUyPWludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMjczMC1cbmZzL250ZnMvYXR0cmliLmM6MjczMTpcdFx0XHRhbF9ybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGJhc2VfbmktXHUwMDNldm9sLFxuZnMvbnRmcy9hdHRyaWIuYy0yNzMyLVx0XHRcdFx0XHRjdHgtXHUwMDNlYXR0ciwgTlVMTCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTMyNzI9aW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zMzE5LVx0XHRcdC8qIERlY29kZSB0aGUgcnVubGlzdC4gKi9cbmZzL250ZnMvYXR0cmliLmM6MzMyMDpcdFx0XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVx1MDAzZXZvbCwgYSwgXHUwMDI2bmktXHUwMDNlcnVubGlzdCxcbmZzL250ZnMvYXR0cmliLmMtMzMyMS1cdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm5ld19ybF9jb3VudCk7XG4tLVxuZnMvbnRmcy9pbm9kZS5jPTMyMz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0zNTEtXG5mcy9udGZzL2lub2RlLmM6MzUyOlx0XHRcdHJsID0gbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MobmktXHUwMDNldm9sLCBhY3R4LVx1MDAzZWF0dHIsIE5VTEwsXG5mcy9udGZzL2lub2RlLmMtMzUzLVx0XHRcdFx0XHRcdTAwMjZuZXdfcmxfY291bnQpO1xuLS1cbmZzL250ZnMvaW5vZGUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbWZ0X25pX3J1bmxpc3RfbG9ja19rZXksIG1mdF9uaV9tcmVjX2xvY2tfa2V5O1xuLS1cbmZzL250ZnMvaW5vZGUuYy0xODI5LSAqIGVsc2UgYW5kIGl0ZXJhdGluZyB1c2luZyBudGZzX2F0dHJfbG9va3VwKCREQVRBKSBvdmVyIGFsbCBleHRlbnRzLiAgQXMgZWFjaFxuZnMvbnRmcy9pbm9kZS5jOjE4MzA6ICogZXh0ZW50IGlzIGZvdW5kLCB3ZSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcygpIGluY2x1ZGluZyB0aGUgaW1wbGllZFxuZnMvbnRmcy9pbm9kZS5jLTE4MzEtICogbnRmc19ydW5saXN0c19tZXJnZSgpLiAgRWFjaCBzdGVwIG9mIHRoZSBpdGVyYXRpb24gbmVjZXNzYXJpbHkgcHJvdmlkZXNcbi0tXG5mcy9udGZzL2lub2RlLmM9MTgzNz1pbnQgbnRmc19yZWFkX2lub2RlX21vdW50KHN0cnVjdCBpbm9kZSAqdmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTE5ODctXG5mcy9udGZzL2lub2RlLmM6MTk4ODpcdFx0XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKHZvbCwgYSwgTlVMTCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbmZzL250ZnMvaW5vZGUuYy0xOTg5LVx0XHRcdGlmIChJU19FUlIocmwpKSB7XG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIwODQtXHRcdCAqL1xuZnMvbnRmcy9pbm9kZS5jOjIwODU6XHRcdG5ybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKHZvbCwgYSwgXHUwMDI2bmktXHUwMDNlcnVubGlzdCxcbmZzL250ZnMvaW5vZGUuYy0yMDg2LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZuZXdfcmxfY291bnQpO1xuLS1cbmZzL250ZnMvaW5vZGUuYy0yMDg4LVx0XHRcdG50ZnNfZXJyb3Ioc2IsXG5mcy9udGZzL2lub2RlLmM6MjA4OTpcdFx0XHRcdFwmIzM0O250ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKCkgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlbGQuXCYjMzQ7LFxuZnMvbnRmcy9pbm9kZS5jLTIwOTAtXHRcdFx0XHRQVFJfRVJSKG5ybCkpO1xuLS1cbmZzL250ZnMvcnVubGlzdC5jPTUyMj1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXG4tLVxuZnMvbnRmcy9ydW5saXN0LmMtNzE3LS8qXG5mcy9udGZzL3J1bmxpc3QuYzo3MTg6ICogbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MgLSBjb252ZXJ0IG1hcHBpbmcgcGFpcnMgYXJyYXkgdG8gcnVubGlzdFxuZnMvbnRmcy9ydW5saXN0LmMtNzE5LSAqIEB2b2w6IG50ZnMgdm9sdW1lXG4tLVxuZnMvbnRmcy9ydW5saXN0LmMtNzM0LSAqL1xuZnMvbnRmcy9ydW5saXN0LmM6NzM1OnN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9ydW5saXN0LmMtNzM2LVx0XHRjb25zdCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIsIHN0cnVjdCBydW5saXN0ICpvbGRfcnVubGlzdCxcbi0tXG5mcy9udGZzL3J1bmxpc3QuaD02OD1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXG4tLVxuZnMvbnRmcy9ydW5saXN0LmgtNzAtXHRcdHNpemVfdCAqbmV3X3JsX2NvdW50KTtcbmZzL250ZnMvcnVubGlzdC5oOjcxOnN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9ydW5saXN0LmgtNzItXHRcdGNvbnN0IHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0ciwgc3RydWN0IHJ1bmxpc3QgKm9sZF9ydW5saXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgTlRGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2Agd2l0aGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgcHJldHR5IGNydWNpYWw7IGl0JiMzOTtzIHVzZWQgYnkgc2V2ZXJhbCBrZXkgTlRGUyBmdW5jdGlvbnM6IGBudGZzX21hcF9ydW5saXN0X25vbG9ja2AsIGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCwgYW5kIGBudGZzX3JlYWRfaW5vZGVfbW91bnRgLiBUaGVzZSBhcmUgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTlRGUyBpbXBsZW1lbnRhdGlvbiwgc28gYW55IGNoYW5nZSBoZXJlIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjaGVjayBmb3IgYW4gZW1wdHkgYG1hcHBpbmdfcGFpcnNgIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3Igd2hhdCAqbG9va3MqIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSDigJMgbGlrZWx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBhIHNpbWlsYXIgdHlwZSBvZiBidWcgd2hlbiB0aGUgY29kZSYjMzk7cyB0cnlpbmcgdG8gcGFyc2Ugc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IGFjdHVhbGx5IHRoZXJlLiBBIHNpbXBsZSBjaGVjayBsaWtlIHRoaXMgY291bGQgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgZG93biB0aGUgcm9hZC4KCkdpdmVuIHRoZSBzY29wZSBhbmQgdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aG9zZSBmdW5jdGlvbnMsIEkgdGhpbmsgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBhZGRpdGlvbiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGV4cG9zZSBhbnkgb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHVuZGVyIHVuZXhwZWN0ZWQgaW5wdXRzLgoKQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHBhdGgsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZy4gSSBiZWxpZXZlIGBDT05GSUdfTlRGU19GU2AgaXMgdGhlIHJlbGV2YW50IG9wdGlvbiBoZXJlLiBJJiMzOTtsbCBtYWtlIHN1cmUgaXQmIzM5O3MgZW5hYmxlZCB0byBtYWtlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSBjb2RlIGluIHRoZSBwcm9wZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5URlMgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGNydWNpYWwgTlRGUyBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgYENPTkZJR19OVEZTX0ZTYCBpcyBzZXQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggZG91YmxlLWNoZWNraW5nLiBOb3csIHdhaXQgYSBtaW51dGUuLi4gaXMgdGhlcmUgYW55IG90aGVyIE5URlMtcmVsYXRlZCBjb25maWd1cmF0aW9uIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyPyBBaCwgeWVzLCB0aGVyZSYjMzk7cyBgTlRGUzNfRlNgLCBidXQgaXNuJiMzOTt0IHRoYXQgcGFydCBvZiB0aGUgbGVnYWN5IE5URlMgZHJpdmVyIGluIGBmcy9udGZzL2A/IFllcywgSSYjMzk7bSBwcmV0dHkgc3VyZSBgZnMvbnRmcy9gIGlzIHdoZXJlIHRoZSBvbGRlciBjb2RlIHJlc2lkZXMuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGlzIHN5c3RlbSBidWlsZCwgbGV0JiMzOTtzIHZlcmlmeSBhZ2FpbiB0aGF0IGBOVEZTX0ZTYCBpbiBpc29sYXRpb24gcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG5mcy9udGZzL0tjb25maWctMTQtXHRib29sIFwmIzM0O05URlMgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbmZzL250ZnMvS2NvbmZpZzoxNTpcdGRlcGVuZHMgb24gTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTE2LVx0aGVscFxuLS1cbmZzL250ZnMvS2NvbmZpZz0zNT1jb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuZnMvbnRmcy9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMzgtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0IGxvb2tzIGxpa2UgYE5URlNfRlNgIHJlbGllcyBvbiBgQkxPQ0tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZGVwZW5kZW5jeS4gVG8gZ2V0IGEgaGFuZGxlIG9uIGl0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciBOVEZTLCBzcGVjaWZpY2FsbHkgYGZzL250ZnMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhvc2UgZGVwZW5kZW5jeSBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBmcy9udGZzL0tjb25maWdgIHJldmVhbHMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBOVEZTX0ZTYCBhbmQgYEJMT0NLYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfREVCVUdcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqCgpPa2F5LCB3YWl0IGEgbWludXRlLi4uIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGBOVEZTX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBoYWQgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgQkxPQ0tgLCBidXQgbm93IEkmIzM5O20gc2Vjb25kLWd1ZXNzaW5nIG15c2VsZi4gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBJdCYjMzk7cyB1bnVzdWFsIGZvciBhIGZpbGVzeXN0ZW0gbm90IHRvIGRlcGVuZCBvbiBhIGJsb2NrIGRldmljZSBpbiBzb21lIHdheS4KCkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBxdWlja2x5LiBMZXQgbWUgcHVsbCB1cCBgZnMvS2NvbmZpZ2AuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBpdCB0byBzZWUgaWYgYGZzL250ZnMvS2NvbmZpZ2AgaXMgaW5jbHVkZWQgY29uZGl0aW9uYWxseSDigJMgcGVyaGFwcyBpdCYjMzk7cyBuZXN0ZWQgdW5kZXIgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGluZGlyZWN0bHkgaW1wbGllcyBgQkxPQ0tgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbW9yZSBjb21wbGV4IGRlcGVuZGVuY3kgdHJlZSB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZWQuIFRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCB0byB0cmFjZSB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7ZnMvbnRmcy9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTE1ND1zb3VyY2UgXCYjMzQ7ZnMvZXhmYXQvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZzoxNTU6c291cmNlIFwmIzM0O2ZzL250ZnMvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy0xNTYtc291cmNlIFwmIzM0O2ZzL250ZnMzL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA3NQoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTlRGUyBDb21wcmVzc2lvbioqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBOVEZTX0ZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZTsgdGhhdCYjMzk7cyBhbGwgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBub3cuIE5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gZmxhZ2dlZCBhcyBtb2RpZmllZCBpcyBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgLiBHb29kLiBOb3csIGxldCBtZSBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrYCwgYG50ZnNfYXR0cl9yZWNvcmRfcm1gLCBgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0YCwgYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLCBhbmQgYG50ZnNfcmVhZF9pbm9kZV9tb3VudGAgYXJlIGFsbCBjb25zdW1lcnMgb2YgdGhpcyBkZWNvbXByZXNzaW9uIGZ1bmN0aW9uLiBUaGF0IGdpdmVzIG1lIGEgY2xlYXIgcGF0aCBmb3J3YXJkOyBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhvcm91Z2hseSBhbmFseXppbmcgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBpdHNlbGYgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aGluIHRob3NlIHNwZWNpZmljIGNhbGwgY29udGV4dHMuIFRoaXMgbmFycm93ZWQgc2NvcGUgd2lsbCBtYWtlIGZvciBhbiBlZmZpY2llbnQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTlRGUyBmdW5jdGlvbiBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIHRvIGFkZCBhIGNoZWNrIGZvciBhbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIG9yIG1hbGljaW91cyBOVEZTIGltYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gd2hlcmUgYW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSBpbiBhIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUgY291bGQgYmUgaW1wcm9wZXJseSBwcm9jZXNzZWQuIFRoZSBmaWVsZHMgYmVpbmcgYWNjZXNzZWQgKGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBgaW5pdGlhbGl6ZWRfc2l6ZWApIGFyZSBwYXJ0IG9mIHRoZSBvbi1kaXNrIGBhdHRyX3JlY29yZGAgc3RydWN0dXJlLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlYWQgZnJvbSB0aGUgZGlzay9pbWFnZS4gVGhlIGJ1ZyBsaWtlbHkgbGVhZHMgdG8gYW4gZW1wdHkgb3IgaW52YWxpZCBydW5saXN0LCBjYXVzaW5nIGEgY3Jhc2ggKHN1Y2ggYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGxhdGVyIGluIHRoZSBleGVjdXRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJiZjNhYzhiNmJhM2FiZWQ3M2RjMTA1ZTVhMmZmMWNiM2VlZGU1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDA3OjI5OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuYwppbmRleCA5ZWFhZGJjMGVmNDdmLi5jNzc1YjdkZjA3NGY4IDEwMDY0NAotLS0gYS9mcy9udGZzL3J1bmxpc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL3J1bmxpc3QuYwpAQCAtNzYzLDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKgogCS8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqLwogCXZjbiA9IGxvd2VzdF92Y247CiAJbGNuID0gMDsKJiM0MzsJZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7CiAJLyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqLwogCWJ1ZiA9ICh1OCAqKWF0dHIgJiM0MzsKIAkJbGUxNl90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpOwpAQCAtNzcyLDYgJiM0Mzs3NzMsMjMgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICoKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIEFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXkgaXMgdmFsaWQgb25seSBmb3IgYSB6ZXJvLWxlbmd0aAomIzQzOwkgKiBhdHRyaWJ1dGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXZjbiAmYW1wOyZhbXA7ICEqYnVmICZhbXA7JmFtcDsKJiM0MzsJICAgIChkZWx0YXhjbiAhPSAtMSB8fAomIzQzOwkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fAomIzQzOwkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHwKJiM0MzsJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHsKJiM0MzsJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuJiMzNDspOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiYjNDM7CX0KJiM0MzsJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7IG9sZF9ydW5saXN0ICZhbXA7JmFtcDsgb2xkX3J1bmxpc3QtJmd0O3JsKSB7CiYjNDM7CQkqbmV3X3JsX2NvdW50ID0gb2xkX3J1bmxpc3QtJmd0O2NvdW50OwomIzQzOwkJcmV0dXJuIG9sZF9ydW5saXN0LSZndDtybDsKJiM0MzsJfQomIzQzOwogCS8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi8KIAlybHBvcyA9IDA7CiAJLyogQWxsb2NhdGUgZmlyc3QgcGFnZSBhbmQgc2V0IGN1cnJlbnQgcnVubGlzdCBzaXplIHRvIG9uZSBwYWdlLiAqLwpAQCAtOTQyLDcgJiM0Mzs5NjAsNiBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKgogCSAqIElmIHRoZXJlIGlzIGEgaGlnaGVzdF92Y24gc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBmaW5hbAogCSAqIHZjbiBpbiB0aGUgcnVubGlzdCAtIDEsIG9yIHNvbWV0aGluZyBoYXMgZ29uZSBiYWRseSB3cm9uZy4KIAkgKi8KLQlkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTsKIAlpZiAodW5saWtlbHkoZGVsdGF4Y24gJmFtcDsmYW1wOyB2Y24gLSAxICE9IGRlbHRheGNuKSkgewogbXBhX2VycjoKIAkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0NvcnJ1cHQgbWFwcGluZyBwYWlycyBhcnJheSBpbiBub24tcmVzaWRlbnQgYXR0cmlidXRlLiYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBSdW5saXN0IERlY29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgZnVuY3Rpb24gd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGZzL250ZnMvcnVubGlzdC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXlzIGFyZSBoYW5kbGVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHJlbG9jYXRpb24gb2YgdGhlIGBkZWx0YXhjbmAgaW5pdGlhbGl6YXRpb246IGBkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtgLiBJbnRlcmVzdGluZywgbW92aW5nIGl0IHVwLiBJIHdvbmRlciBpZiB0aGlzIHJlbGF0ZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBzb21ldGhpbmcgSSYjMzk7bSBhbHdheXMgd2FyeSBvZi4KClRoZSBhZGRlZCBjaGVjayBpcyBjcml0aWNhbDoKCmBgYGMKCS8qCgkgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGgKCSAqIGF0dHJpYnV0ZS4KCSAqLwoJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7CgkgICAgKGRlbHRheGNuICE9IC0xIHx8CgkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fAoJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8CgkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmluaXRpYWxpemVkX3NpemUpKSkgewoJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuJiMzNDspOwoJCXJldHVybiBFUlJfUFRSKC1FSU8pOwoJfQoJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7IG9sZF9ydW5saXN0ICZhbXA7JmFtcDsgb2xkX3J1bmxpc3QtJmd0O3JsKSB7CgkJKm5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LSZndDtjb3VudDsKCQlyZXR1cm4gb2xkX3J1bmxpc3QtJmd0O3JsOwoJfQpgYGAKClRoaXMgc2VlbXMgdG8gYmUgYSBkZWZlbnNpdmUgbWVhc3VyZS4gQW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSAoYCEqYnVmYCkgc2hvdWxkIG9ubHkgYmUgdmFsaWQgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgemVybyBsZW5ndGguIFRoZSBjaGVjayBleGFtaW5lcyBpZiBgIXZjbmAgYW5kIGAhKmJ1ZmAgYXJlIHNpbXVsdGFuZW91c2x5IHRydWUsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNvbmRpdGlvbnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkICYjMzQ7emVybyBsZW5ndGgmIzM0Oy4gTXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgLSB0aGlzIHNtZWxscyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBoYW5kbGluZyBlZGdlIGNhc2VzLiBMb29raW5nIGF0IHRoZSBjb25kaXRpb25zIGl0IGNoZWNrcyB3aGV0aGVyIHRoZSBgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgb3IgYGluaXRpYWxpemVkX3NpemVgIGFyZSBub24temVyby4gIFRoZXNlIGFyZSBhbGwgdmFsdWVzIHJlYWQgZnJvbSB0aGUgb24tZGlzayBOVEZTIG1ldGFkYXRhLiBXaGlsZSB0aGlzIGRhdGEgKnNob3VsZCogYmUgaW5pdGlhbGl6ZWQsIHRoZSBmaWxlc3lzdGVtIGNvdWxkIGJlIGNvcnJ1cHQsIG9yIGV2ZW4gbWFsaWNpb3VzbHkgY3JhZnRlZC4gVGhlIGNvZGUgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgb3Igc2ltaWxhciBwcm9ibGVtIGlmIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5IGlzIGVtcHR5IGluIGFuIHVuZXhwZWN0ZWQgc2NlbmFyaW8uIElmIGAhKmJ1ZmAgaXMgdHJ1ZSwgdGhlIG1hcHBpbmcgcGFpcnMgYXJyYXkgaXMgZW1wdHkuIFRoZSBgISpidWZgIGNvbmRpdGlvbiBtaWdodCBieXBhc3MgdGhlIGxvb3AgdGhhdCBwYXJzZXMgdGhlIGFycmF5LCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIEl0IHNlZW1zIHRoYXQgdGhpcyBjb2RlIG1heSBub3QgZXhlY3V0ZSB1bmRlciB0aGUgY29uZGl0aW9uIGAhKmJ1ZmAsIHdoaWNoIG1pZ2h0IGNhdXNlIGFuIGVtcHR5IHJ1bmxpc3QuIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaW4gc29tZSBlZGdlIGNhc2VzIGFuIG9sZGVyIGBydW5saXN0YCBtaWdodCBiZSByZXR1cm5lZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgcmV0dXJuaW5nIGFuIG9sZCBydW5saXN0IHdoZW4gYCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZmAuIE5lZWQgdG8gY2hlY2sgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9ydW5saXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9ydW5saXN0LmM9NTIyPXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfcnVubGlzdHNfbWVyZ2Uoc3RydWN0IHJ1bmxpc3QgKmRfcnVubGlzdCxcbi0tXG5mcy9udGZzL3J1bmxpc3QuYy03MTctLypcbmZzL250ZnMvcnVubGlzdC5jOjcxODogKiBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyAtIGNvbnZlcnQgbWFwcGluZyBwYWlycyBhcnJheSB0byBydW5saXN0XG5mcy9udGZzL3J1bmxpc3QuYy03MTktICogQHZvbDogbnRmcyB2b2x1bWVcbi0tXG5mcy9udGZzL3J1bmxpc3QuYy03MzQtICovXG5mcy9udGZzL3J1bmxpc3QuYzo3MzU6c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG5mcy9udGZzL3J1bmxpc3QuYy03MzYtXHRcdGNvbnN0IHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0ciwgc3RydWN0IHJ1bmxpc3QgKm9sZF9ydW5saXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBSdW5saXN0IENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIE5URlMgZHJpdmVyIGhhbmRsZXMgcnVubGlzdHMsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3MzUgaW4gYGZzL250ZnMvcnVubGlzdC5jYC4gVGhhdCBhcmVhIHByb2JhYmx5IGRlYWxzIHdpdGggYSBjcml0aWNhbCBhc3BlY3Qgb2YgaG93IGZpbGUgZGF0YSBpcyBtYXBwZWQgb24gdGhlIGRpc2suIEkgc3VzcGVjdCBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBldmVuIHJ1bmxpc3QgY29tcHJlc3Npb24vZXhwYW5zaW9uLiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiBOVEZTJiMzOTtzIGZyYWdtZW50ZWQgZmlsZSBzeXN0ZW0gYW5kIGl0cyB1c2Ugb2YgcnVubGlzdHMsIHRoaXMgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyaXNlISBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvcnVubGlzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzM1Olx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG4gNzM2Olx0XHRcdGNvbnN0IHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0ciwgc3RydWN0IHJ1bmxpc3QgKm9sZF9ydW5saXN0LFxuIDczNzpcdFx0XHRzaXplX3QgKm5ld19ybF9jb3VudClcbiA3Mzg6XHR7XG4gNzM5Olx0XHRzNjQgdmNuO1x0XHQvKiBDdXJyZW50IHZjbi4gKi9cbiA3NDA6XHRcdHM2NCBsY247XHRcdC8qIEN1cnJlbnQgbGNuLiAqL1xuIDc0MTpcdFx0czY0IGRlbHRheGNuO1x0XHQvKiBDaGFuZ2UgaW4gW3ZsXWNuLiAqL1xuIDc0MjpcdFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwsICpuZXdfcmw7XHQvKiBUaGUgb3V0cHV0IHJ1bmxpc3QuICovXG4gNzQzOlx0XHR1OCAqYnVmO1x0XHQvKiBDdXJyZW50IHBvc2l0aW9uIGluIG1hcHBpbmcgcGFpcnMgYXJyYXkuICovXG4gNzQ0Olx0XHR1OCAqYXR0cl9lbmQ7XHRcdC8qIEVuZCBvZiBhdHRyaWJ1dGUuICovXG4gNzQ1Olx0XHRpbnQgcmxzaXplO1x0XHQvKiBTaXplIG9mIHJ1bmxpc3QgYnVmZmVyLiAqL1xuIDc0NjpcdFx0dTE2IHJscG9zO1x0XHQvKiBDdXJyZW50IHJ1bmxpc3QgcG9zaXRpb24gaW4gdW5pdHMgb2Ygc3RydWN0IHJ1bmxpc3RfZWxlbWVudHMuICovXG4gNzQ3Olx0XHR1OCBiO1x0XHRcdC8qIEN1cnJlbnQgYnl0ZSBvZmZzZXQgaW4gYnVmLiAqL1xuIDc0ODpcdFx0dTY0IGxvd2VzdF92Y247XHRcdC8qIFJhdyBvbi1kaXNrIGxvd2VzdF92Y24uICovXG4gNzQ5Olx0XG4gNzUwOlx0I2lmZGVmIERFQlVHXG4gNzUxOlx0XHQvKiBNYWtlIHN1cmUgYXR0ciBleGlzdHMgYW5kIGlzIG5vbi1yZXNpZGVudC4gKi9cbiA3NTI6XHRcdGlmICghYXR0ciB8fCAhYXR0ci1cdTAwM2Vub25fcmVzaWRlbnQpIHtcbiA3NTM6XHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ludmFsaWQgYXJndW1lbnRzLlwmIzM0Oyk7XG4gNzU0Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDc1NTpcdFx0fVxuIDc1NjpcdCNlbmRpZlxuIDc1NzpcdFx0bG93ZXN0X3ZjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQubG93ZXN0X3Zjbik7XG4gNzU4Olx0XHQvKiBWYWxpZGF0ZSBsb3dlc3RfdmNuIGZyb20gb24tZGlzayBtZXRhZGF0YSB0byBlbnN1cmUgaXQgaXMgc2FuZS4gKi9cbiA3NTk6XHRcdGlmIChvdmVyZmxvd3NfdHlwZShsb3dlc3RfdmNuLCB2Y24pKSB7XG4gNzYwOlx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtJbnZhbGlkIGxvd2VzdF92Y24gaW4gbWFwcGluZyBwYWlycy5cJiMzNDspO1xuIDc2MTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiA3NjI6XHRcdH1cbiA3NjM6XHRcdC8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqL1xuIDc2NDpcdFx0dmNuID0gbG93ZXN0X3ZjbjtcbiA3NjU6XHRcdGxjbiA9IDA7XG4gNzY2Olx0XHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIDc2NzpcdFx0LyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xuIDc2ODpcdFx0YnVmID0gKHU4ICopYXR0ciAmIzQzO1xuIDc2OTpcdFx0XHRsZTE2X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTtcbiA3NzA6XHRcdGF0dHJfZW5kID0gKHU4ICopYXR0ciAmIzQzOyBsZTMyX3RvX2NwdShhdHRyLVx1MDAzZWxlbmd0aCk7XG4gNzcxOlx0XHRpZiAodW5saWtlbHkoYnVmIFx1MDAzYyAodTggKilhdHRyIHx8IGJ1ZiBcdTAwM2U9IGF0dHJfZW5kKSkge1xuIDc3MjpcdFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7Q29ycnVwdCBhdHRyaWJ1dGUuXCYjMzQ7KTtcbiA3NzM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gNzc0Olx0XHR9XG4gNzc1Olx0XG4gNzc2Olx0XHQvKlxuIDc3NzpcdFx0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXG4gNzc4Olx0XHQgKiBhdHRyaWJ1dGUuXG4gNzc5Olx0XHQgKi9cbiA3ODA6XHRcdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjZcbiA3ODE6XHRcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcbiA3ODI6XHRcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcbiA3ODM6XHRcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XG4gNzg0Olx0XHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XG4gNzg1Olx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXCYjMzQ7KTtcbiA3ODY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gNzg3Olx0XHR9XG4gNzg4Olx0XHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0IFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdC1cdTAwM2VybCkge1xuIDc4OTpcdFx0XHQqbmV3X3JsX2NvdW50ID0gb2xkX3J1bmxpc3QtXHUwMDNlY291bnQ7XG4gNzkwOlx0XHRcdHJldHVybiBvbGRfcnVubGlzdC1cdTAwM2VybDtcbiA3OTE6XHRcdH1cbiA3OTI6XHRcbiA3OTM6XHRcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cbiA3OTQ6XHRcdHJscG9zID0gMDtcbiA3OTU6XHRcdC8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi9cbiA3OTY6XHRcdHJsID0ga3Z6YWxsb2MocmxzaXplID0gUEFHRV9TSVpFLCBHRlBfTk9GUyk7XG4gNzk3Olx0XHRpZiAodW5saWtlbHkoIXJsKSlcbiA3OTg6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gNzk5Olx0XHQvKiBJbnNlcnQgdW5tYXBwZWQgc3RhcnRpbmcgZWxlbWVudCBpZiBuZWNlc3NhcnkuICovXG4gODAwOlx0XHRpZiAodmNuKSB7XG4gODAxOlx0XHRcdHJsLVx1MDAzZXZjbiA9IDA7XG4gODAyOlx0XHRcdHJsLVx1MDAzZWxjbiA9IExDTl9STF9OT1RfTUFQUEVEO1xuIDgwMzpcdFx0XHRybC1cdTAwM2VsZW5ndGggPSB2Y247XG4gODA0Olx0XHRcdHJscG9zJiM0MzsmIzQzOztcbiA4MDU6XHRcdH1cbiA4MDY6XHRcdHdoaWxlIChidWYgXHUwMDNjIGF0dHJfZW5kIFx1MDAyNlx1MDAyNiAqYnVmKSB7XG4gODA3Olx0XHRcdC8qXG4gODA4Olx0XHRcdCAqIEFsbG9jYXRlIG1vcmUgbWVtb3J5IGlmIG5lZWRlZCwgaW5jbHVkaW5nIHNwYWNlIGZvciB0aGVcbiA4MDk6XHRcdFx0ICogbm90LW1hcHBlZCBhbmQgdGVybWluYXRvciBlbGVtZW50cy4ga3Z6YWxsb2MoKVxuIDgxMDpcdFx0XHQgKiBvcGVyYXRlcyBvbiB3aG9sZSBwYWdlcyBvbmx5LlxuIDgxMTpcdFx0XHQgKi9cbiA4MTI6XHRcdFx0aWYgKCgocmxwb3MgJiM0MzsgMykgKiBzaXplb2YoKnJsKSkgXHUwMDNlIHJsc2l6ZSkge1xuIDgxMzpcdFx0XHRcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsMjtcbiA4MTQ6XHRcbiA4MTU6XHRcdFx0XHRybDIgPSBrdnphbGxvYyhybHNpemUgJiM0MzsgUEFHRV9TSVpFLCBHRlBfTk9GUyk7XG4gODE2Olx0XHRcdFx0aWYgKHVubGlrZWx5KCFybDIpKSB7XG4gODE3Olx0XHRcdFx0XHRrdmZyZWUocmwpO1xuIDgxODpcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gODE5Olx0XHRcdFx0fVxuIDgyMDpcdFx0XHRcdG1lbWNweShybDIsIHJsLCBybHNpemUpO1xuIDgyMTpcdFx0XHRcdGt2ZnJlZShybCk7XG4gODIyOlx0XHRcdFx0cmwgPSBybDI7XG4gODIzOlx0XHRcdFx0cmxzaXplICYjNDM7PSBQQUdFX1NJWkU7XG4gODI0Olx0XHRcdH1cbiA4MjU6XHRcdFx0LyogRW50ZXIgdGhlIGN1cnJlbnQgdmNuIGludG8gdGhlIGN1cnJlbnQgcnVubGlzdCBlbGVtZW50LiAqL1xuIDgyNjpcdFx0XHRybFtybHBvc10udmNuID0gdmNuO1xuIDgyNzpcdFx0XHQvKlxuIDgyODpcdFx0XHQgKiBHZXQgdGhlIGNoYW5nZSBpbiB2Y24sIGkuZS4gdGhlIHJ1biBsZW5ndGggaW4gY2x1c3RlcnMuXG4gODI5Olx0XHRcdCAqIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdCB3ZSBzaWduZXh0ZW5kIG5lZ2F0aXZlIHZhbHVlcy5cbiA4MzA6XHRcdFx0ICogQSBuZWdhdGl2ZSBydW4gbGVuZ3RoIGRvZXNuJiMzOTt0IG1ha2UgYW55IHNlbnNlLCBidXQgaGV5LCBJXG4gODMxOlx0XHRcdCAqIGRpZG4mIzM5O3QgbWFrZSB1cCB0aGUgTlRGUyBzcGVjcyBhbmQgV2luZG93cyBOVDQgdHJlYXRzIHRoZSBydW5cbiA4MzI6XHRcdFx0ICogbGVuZ3RoIGFzIGEgc2lnbmVkIHZhbHVlIHNvIHRoYXQmIzM5O3MgaG93IGl0IGlzLi4uXG4gODMzOlx0XHRcdCAqL1xuIDgzNDpcdFx0XHRiID0gKmJ1ZiBcdTAwMjYgMHhmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZpeCBmb3IgYSBQb3RlbnRpYWxseSBNYWxmb3JtZWQgTlRGUyBBdHRyaWJ1dGUgUmVjb3JkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgY2xlYXJseSBhZGRyZXNzaW5nIGEgcHJvYmxlbSByZWxhdGVkIHRvIGhvdyBhbiBOVEZTIGF0dHJpYnV0ZSByZWNvcmQgKGBhdHRyYCkgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWFwcGluZyBwYWlycy4gVGhlIGNvZGUgaXMgcmVhZGluZyBzZXZlcmFsIGZpZWxkcyBmcm9tIHRoZSBgYXR0cmAgc3RydWN0dXJlOiBgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYW5kIGBpbml0aWFsaXplZF9zaXplYC4gVGhlc2UgYXJlIGFsbCBwYXJ0IG9mIGFuIG9uLWRpc2sgc3RydWN0dXJlLCBzbyB0aGUgZGF0YSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgc3lzdGVtIHJlYWRzIGZyb20gdGhlIGRpc2suCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gc3RlbSBmcm9tIGFuICplbXB0eSogbWFwcGluZyBwYWlycyBhcnJheS4gVGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdhczogaWYgdGhlIGxvb3AgYHdoaWxlIChidWYgJmx0OyBhdHRyX2VuZCAmYW1wOyZhbXA7ICpidWYpYCBpcyBza2lwcGVkIGJlY2F1c2UgYCEqYnVmYCBpcyB0cnVlLCBhIGNvbmRpdGlvbiBsYXRlciBkb3duIHRoZSBsaW5lIG1heSBlcnJvciBvdXQuIE5hbWVseSwgaWYgYHZjbmAgaXMgYGxvd2VzdF92Y25gLCB3aGljaCBtYXkgYmUgMCwgdGhlbiBgdmNuIC0gMWAgd291bGQgYmUgYC0xYC4gSWYgYGRlbHRheGNuYCBpcyBub3QgMCwgdGhlbiBgdmNuIC0gMSAhPSBkZWx0YXhjbmAgY291bGQgYmUgdHJ1ZSwgcmVzdWx0aW5nIGluIGFuIGVycm9yLiBIb3dldmVyLCB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGNhdGNoIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW86CgpgYGBjCglpZiAoIXZjbiAmYW1wOyZhbXA7ICEqYnVmICZhbXA7JmFtcDsKCSAgICAoZGVsdGF4Y24gIT0gLTEgfHwKCSAgICAgbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpIHx8CgkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHwKCSAgICAgbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7CgkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0ludmFsaWQgZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheS4mIzM0Oyk7CgkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7Cgl9CmBgYAoKVGhpcyBtYWtlcyBpdCBjbGVhciB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZSBjYXNlIG9mIGFuICplbXB0eSogbWFwcGluZyBwYWlycyBhcnJheSBpbiBhbiBOVEZTIGltYWdlLiBJZiBpdOKAmXMgcHJvY2Vzc2VkLCBpdCBtaWdodCByZXR1cm4gYW4gZW1wdHkgcnVubGlzdC4gVGhlIGxvZ2ljIG1ha2VzIHNlbnNlLiBJIGhhZCBicmllZmx5IGNvbnNpZGVyZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYXMgdGhlIHJvb3QgY2F1c2UsIGJ1dCBuby4gVGhlIGBhdHRyYCBzdHJ1Y3R1cmUgaXMgcmVhZCBmcm9tIGRpc2ssIHNvIGl0IHNob3VsZCBiZSBpbml0aWFsaXplZC4gVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2NgLCB3aGljaCB6ZXJvcyBpdCBpbml0aWFsbHkuCgpUaGUgaXNzdWUgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IsIHBlcmhhcHMgc3RlbW1pbmcgZnJvbSBhbiBlbXB0eSBydW5saXN0IGJlaW5nIHJldHVybmVkIGR1ZSB0byBhIG1hbGZvcm1lZCBpbWFnZSwgd2hpY2ggY291bGQgdGhlbiBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBsYXRlciBvbiB3aGVuIHRoZSBydW5saXN0IGlzIHVzZWQuIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBmaWxlc3lzdGVtIGZ1enppbmcgYnVnIHRoYXQgS0FTQU4gb3IgYSBnZW5lcmFsIGNyYXNoIGNvdWxkIGVhc2lseSBjYXRjaC4gR2l2ZW4gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZTsgS01TQU4gd291bGRuJiMzOTt0IGJlIHJlbGV2YW50LiBUaGUgYnVnIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBzdWJ0bGUgZmFpbHVyZSB0byBoYW5kbGUgYSBwZXJmZWN0bHkgdmFsaWQgTlRGUyBmb3JtYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBhdHRyX3JlY29yZCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2xheW91dC5oPTc2Mj1lbnVtIHtcbi0tXG5mcy9udGZzL2xheW91dC5oLTgyNi0gKi9cbmZzL250ZnMvbGF5b3V0Lmg6ODI3OnN0cnVjdCBhdHRyX3JlY29yZCB7XG5mcy9udGZzL2xheW91dC5oLTgyOC1cdF9fbGUzMiB0eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBNZXRhZGF0YSBTdHJ1Y3R1cmVzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBmcy9udGZzL2xheW91dC5oYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZSA4MjcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgbGF5b3V0IG9mIHRoZSBOVEZTIG1ldGFkYXRhIHN0cnVjdHVyZXMuIE15IGd1dCBmZWVsaW5nIGlzIEkmIzM5O20gbG9va2luZyBmb3IgYSBzcGVjaWZpYyBhdHRyaWJ1dGUgdHlwZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBmaWxlIHJlY29yZCBzZWdtZW50IChGUlMpIGluZGV4aW5nLCBvciBwZXJoYXBzIGV2ZW4gdGhlIGFsbG9jYXRpb24gYml0bWFwIHN0cnVjdHVyZSB1c2VkIGZvciB2b2x1bWUgbWFuYWdlbWVudCB3aXRoaW4gdGhlICRCaXRtYXAgYXR0cmlidXRlLiBLbm93aW5nIHRoZSBudWFuY2VzIG9mIHRoaXMgaGVhZGVyIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIG9uLWRpc2sgZGF0YSBvcmdhbml6YXRpb24gaW4gYSBsaXZlIHNjZW5hcmlvLCBub3QganVzdCB0aGVvcml6aW5nIGFib3V0IGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSBhbnRpY2lwYXRlIGl0IGNvdWxkIHJlbGF0ZSB0byBzb21lIG9mIG15IHByZXZpb3VzIHJlc2VhcmNoIG9uIE1hc3RlciBGaWxlIFRhYmxlIChNRlQpIGluZGV4aW5nIGFuZCBhdHRyaWJ1dGUgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBvciBwb3RlbnRpYWxseSB0byB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIG9uIHRoYXQgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL2xheW91dC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4Mjc6XHRzdHJ1Y3QgYXR0cl9yZWNvcmQge1xuIDgyODpcdFx0X19sZTMyIHR5cGU7XG4gODI5Olx0XHRfX2xlMzIgbGVuZ3RoO1xuIDgzMDpcdFx0dTggbm9uX3Jlc2lkZW50O1xuIDgzMTpcdFx0dTggbmFtZV9sZW5ndGg7XG4gODMyOlx0XHRfX2xlMTYgbmFtZV9vZmZzZXQ7XG4gODMzOlx0XHRfX2xlMTYgZmxhZ3M7XG4gODM0Olx0XHRfX2xlMTYgaW5zdGFuY2U7XG4gODM1Olx0XHR1bmlvbiB7XG4gODM2Olx0XHRcdHN0cnVjdCB7XG4gODM3Olx0XHRcdFx0X19sZTMyIHZhbHVlX2xlbmd0aDtcbiA4Mzg6XHRcdFx0XHRfX2xlMTYgdmFsdWVfb2Zmc2V0O1xuIDgzOTpcdFx0XHRcdHU4IGZsYWdzO1xuIDg0MDpcdFx0XHRcdHM4IHJlc2VydmVkO1xuIDg0MTpcdFx0XHR9IF9fcGFja2VkIHJlc2lkZW50O1xuIDg0MjpcdFx0XHRzdHJ1Y3Qge1xuIDg0MzpcdFx0XHRcdF9fbGU2NCBsb3dlc3RfdmNuO1xuIDg0NDpcdFx0XHRcdF9fbGU2NCBoaWdoZXN0X3ZjbjtcbiA4NDU6XHRcdFx0XHRfX2xlMTYgbWFwcGluZ19wYWlyc19vZmZzZXQ7XG4gODQ2Olx0XHRcdFx0dTggY29tcHJlc3Npb25fdW5pdDtcbiA4NDc6XHRcdFx0XHR1OCByZXNlcnZlZFs1XTtcbiA4NDg6XHRcdFx0XHRfX2xlNjQgYWxsb2NhdGVkX3NpemU7XG4gODQ5Olx0XHRcdFx0X19sZTY0IGRhdGFfc2l6ZTtcbiA4NTA6XHRcdFx0XHRfX2xlNjQgaW5pdGlhbGl6ZWRfc2l6ZTtcbiA4NTE6XHRcdFx0XHRfX2xlNjQgY29tcHJlc3NlZF9zaXplO1xuIDg1MjpcdFx0XHR9IF9fcGFja2VkIG5vbl9yZXNpZGVudDtcbiA4NTM6XHRcdH0gX19wYWNrZWQgZGF0YTtcbiA4NTQ6XHR9IF9fcGFja2VkO1xuIDg1NTpcdFxuIDg1NjpcdC8qXG4gODU3Olx0ICogZW51bSAtIE5URlMgZmlsZSBhdHRyaWJ1dGUgZmxhZ3MgKDMyLWJpdClcbiA4NTg6XHQgKlxuIDg1OTpcdCAqIEZpbGUgYXR0cmlidXRlIGZsYWdzICgzMi1iaXQpIGFwcGVhcmluZyBpbiB0aGUgZmlsZV9hdHRyaWJ1dGVzIGZpZWxkcyBvZiB0aGVcbiA4NjA6XHQgKiBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMgYW5kIHRoZSBGSUxFTkFNRV9BVFRSXG4gODYxOlx0ICogYXR0cmlidXRlcyBvZiBNRlRfUkVDT1JEcyBhbmQgZGlyZWN0b3J5IGluZGV4IGVudHJpZXMuXG4gODYyOlx0ICpcbiA4NjM6XHQgKiBBbGwgb2YgdGhlIGJlbG93IGZsYWdzIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IGluZGV4IGVudHJpZXMgYnV0IG9ubHkgc29tZVxuIDg2NDpcdCAqIGFwcGVhciBpbiB0aGUgU1RBTkRBUkRfSU5GT1JNQVRJT04gYXR0cmlidXRlIHdoaWxzdCBvbmx5IHNvbWUgb3RoZXJzIGFwcGVhclxuIDg2NTpcdCAqIGluIHRoZSBGSUxFTkFNRV9BVFRSIGF0dHJpYnV0ZSBvZiBNRlRfUkVDT1JEcy4gIFVubGVzcyBvdGhlcndpc2Ugc3RhdGVkIHRoZVxuIDg2NjpcdCAqIGZsYWdzIGFwcGVhciBpbiBhbGwgb2YgdGhlIGFib3ZlLlxuIDg2NzpcdCAqXG4gODY4Olx0ICogRklMRV9BVFRSX1JFQURPTkxZOiAgICAgICAgIEZpbGUgaXMgcmVhZC1vbmx5LlxuIDg2OTpcdCAqIEZJTEVfQVRUUl9ISURERU46ICAgICAgICAgICBGaWxlIGlzIGhpZGRlbiAobm90IHNob3duIGJ5IGRlZmF1bHQpLlxuIDg3MDpcdCAqIEZJTEVfQVRUUl9TWVNURU06ICAgICAgICAgICBTeXN0ZW0gZmlsZSAocHJvdGVjdGVkIGJ5IE9TKS5cbiA4NzE6XHQgKiBGSUxFX0FUVFJfRElSRUNUT1JZOiAgICAgICAgRGlyZWN0b3J5IGZsYWcgKHJlc2VydmVkIGluIE5UOyB1c2UgTUZUIGZsYWcgaW5zdGVhZCkuXG4gODcyOlx0ICogRklMRV9BVFRSX0FSQ0hJVkU6ICAgICAgICAgIEZpbGUgbmVlZHMgYXJjaGl2aW5nIChiYWNrdXAgZmxhZykuXG4gODczOlx0ICogRklMRV9BVFRSX0RFVklDRTogICAgICAgICAgIERldmljZSBmaWxlIChyYXJlbHkgdXNlZCkuXG4gODc0Olx0ICogRklMRV9BVFRSX05PUk1BTDogICAgICAgICAgIE5vcm1hbCBmaWxlIChubyBzcGVjaWFsIGF0dHJpYnV0ZXMpLlxuIDg3NTpcdCAqIEZJTEVfQVRUUl9URU1QT1JBUlk6ICAgICAgICBUZW1wb3JhcnkgZmlsZSAoZGVsZXRlIG9uIGNsb3NlKS5cbiA4NzY6XHQgKiBGSUxFX0FUVFJfU1BBUlNFX0ZJTEU6ICAgICAgU3BhcnNlIGZpbGUgKGNvbnRhaW5zIGhvbGVzKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1OQoJCQkJCQkJb3V0cHV0OiAxOTYKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5URlMgQXR0cmlidXRlIFJlY29yZCBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIE5URlMgYXR0cmlidXRlIHJlY29yZCBpc3N1ZSwgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZpZWxkczogYGhpZ2hlc3RfdmNuYCwgYGFsbG9jYXRlZF9zaXplYCwgYGRhdGFfc2l6ZWAsIGFuZCBgaW5pdGlhbGl6ZWRfc2l6ZWAuIFRoZXkgYWxsIGxpdmUgd2l0aGluIHRoZSBgbm9uX3Jlc2lkZW50YCBzdHJ1Y3QsIG5lc3RlZCBpbnNpZGUgdGhlIGBkYXRhYCB1bmlvbiBvZiB0aGUgYGF0dHJfcmVjb3JkYC4gVGhpcyBpcyBhbiBvbi1kaXNrIHN0cnVjdHVyZSwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSB2b2x1bWUgYWN0dWFsbHkgbGl2ZXMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhlcmUmIzM5O3Mgbm8gcHJvYmxlbSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlIOKAkyB0aGF0JiMzOTtzIGEgcmVsaWVmLiBUaGUgaGVhcnQgb2YgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBhIGxvZ2ljIGVycm9yLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzbiYjMzk7dCBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhbiBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYW4gZW1wdHkgYXJyYXkgbGlrZWx5IG1lYW5zIHdlIGVuZCB1cCB3aXRoIGVpdGhlciBhbiBlbXB0eSBydW5saXN0LCBvciwgd29yc2UsIGFuIGludmFsaWQgb25lLiBUaGF0JiMzOTtzIGEgdGlja2luZyB0aW1lIGJvbWIhIEl0JiMzOTtzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gdHJpZ2dlciBhIGNyYXNoIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgcG9zc2libHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBldmVuIGFuIGVuZGxlc3MgbG9vcC4KClRoYW5rZnVsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLCBLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIgKEtBU0FOKSBvciBldmVuIHN0YW5kYXJkIGZ1enppbmcgc2hvdWxkIGJlIHBlcmZlY3RseSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgY3Jhc2guIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNBTml0aXplcikgaXMgdW5uZWNlc3NhcnksIGFzIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZmxhZyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBhbmQgSSYjMzk7bGwgbGF5IG91dCB0aGlzIHJhdGlvbmFsZSBjbGVhcmx5LiBUaGlzIGlzIGFsbCBhYm91dCBwaW5wb2ludGluZyBhIGxvZ2ljIGJ1ZyB0aGF0IHJlc3VsdHMgaW4gYSBiYWQgcnVubGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gd2hlcmUgYW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSBpbiBhIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUgY291bGQgYmUgaW1wcm9wZXJseSBwcm9jZXNzZWQuIFRoZSBmaWVsZHMgYmVpbmcgYWNjZXNzZWQgKGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBgaW5pdGlhbGl6ZWRfc2l6ZWApIGFyZSBwYXJ0IG9mIHRoZSBvbi1kaXNrIGBhdHRyX3JlY29yZGAgc3RydWN0dXJlLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlYWQgZnJvbSB0aGUgZGlzay9pbWFnZS4gVGhlIGJ1ZyBsaWtlbHkgbGVhZHMgdG8gYW4gZW1wdHkgb3IgaW52YWxpZCBydW5saXN0LCBjYXVzaW5nIGEgY3Jhc2ggKHN1Y2ggYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGxhdGVyIGluIHRoZSBleGVjdXRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6MzMuNjUyODA3MzY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMTg4NjcxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gd2hlcmUgYW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSBpbiBhIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUgY291bGQgYmUgaW1wcm9wZXJseSBwcm9jZXNzZWQuIFRoZSBmaWVsZHMgYmVpbmcgYWNjZXNzZWQgKGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBgaW5pdGlhbGl6ZWRfc2l6ZWApIGFyZSBwYXJ0IG9mIHRoZSBvbi1kaXNrIGBhdHRyX3JlY29yZGAgc3RydWN0dXJlLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlYWQgZnJvbSB0aGUgZGlzay9pbWFnZS4gVGhlIGJ1ZyBsaWtlbHkgbGVhZHMgdG8gYW4gZW1wdHkgb3IgaW52YWxpZCBydW5saXN0LCBjYXVzaW5nIGEgY3Jhc2ggKHN1Y2ggYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGxhdGVyIGluIHRoZSBleGVjdXRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6MzMuNjUyODE0OTU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzNzU0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDJiZjNhYzhiNmJhM2FiZWQ3M2RjMTA1ZTVhMmZmMWNiM2VlZGU1N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzL3J1bmxpc3QuYyBiL2ZzL250ZnMvcnVubGlzdC5jXFxuaW5kZXggOWVhYWRiYzBlZjQ3Zi4uYzc3NWI3ZGYwNzRmOCAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL3J1bmxpc3QuY1xcbisrKyBiL2ZzL250ZnMvcnVubGlzdC5jXFxuQEAgLTc2Myw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxcbiBcXHQvKiBTdGFydCBhdCB2Y24gPSBsb3dlc3RfdmNuIGFuZCBsY24gMC4gKi9cXG4gXFx0dmNuID0gbG93ZXN0X3ZjbjtcXG4gXFx0bGNuID0gMDtcXG4rXFx0ZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XFxuIFxcdC8qIEdldCBzdGFydCBvZiB0aGUgbWFwcGluZyBwYWlycyBhcnJheS4gKi9cXG4gXFx0YnVmID0gKHU4ICopYXR0ciArXFxuIFxcdFxcdGxlMTZfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTtcXG5AQCAtNzcyLDYgKzc3MywyMyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXFxuK1xcdCAqIGF0dHJpYnV0ZS5cXG4rXFx0ICovXFxuK1xcdGlmICghdmNuIFxcdTAwMjZcXHUwMDI2ICEqYnVmIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcXG4rXFx0ICAgICBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcXG4rXFx0ICAgICBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XFxuK1xcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XFxuK1xcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkludmFsaWQgZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheS5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuK1xcdH1cXG4rXFx0aWYgKCF2Y24gXFx1MDAyNlxcdTAwMjYgISpidWYgXFx1MDAyNlxcdTAwMjYgb2xkX3J1bmxpc3QgXFx1MDAyNlxcdTAwMjYgb2xkX3J1bmxpc3QtXFx1MDAzZXJsKSB7XFxuK1xcdFxcdCpuZXdfcmxfY291bnQgPSBvbGRfcnVubGlzdC1cXHUwMDNlY291bnQ7XFxuK1xcdFxcdHJldHVybiBvbGRfcnVubGlzdC1cXHUwMDNlcmw7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cXG4gXFx0cmxwb3MgPSAwO1xcbiBcXHQvKiBBbGxvY2F0ZSBmaXJzdCBwYWdlIGFuZCBzZXQgY3VycmVudCBydW5saXN0IHNpemUgdG8gb25lIHBhZ2UuICovXFxuQEAgLTk0Miw3ICs5NjAsNiBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxcbiBcXHQgKiBJZiB0aGVyZSBpcyBhIGhpZ2hlc3RfdmNuIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmluYWxcXG4gXFx0ICogdmNuIGluIHRoZSBydW5saXN0IC0gMSwgb3Igc29tZXRoaW5nIGhhcyBnb25lIGJhZGx5IHdyb25nLlxcbiBcXHQgKi9cXG4tXFx0ZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XFxuIFxcdGlmICh1bmxpa2VseShkZWx0YXhjbiBcXHUwMDI2XFx1MDAyNiB2Y24gLSAxICE9IGRlbHRheGNuKSkge1xcbiBtcGFfZXJyOlxcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJDb3JydXB0IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gbm9uLXJlc2lkZW50IGF0dHJpYnV0ZS5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6MzUuMDQ3MzAwMTYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzY1MzQ4NzM1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTlRGUyBmdW5jdGlvbiBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIHRvIGFkZCBhIGNoZWNrIGZvciBhbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIG9yIG1hbGljaW91cyBOVEZTIGltYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyYmYzYWM4YjZiYTNhYmVkNzNkYzEwNWU1YTJmZjFjYjNlZWRlNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvcnVubGlzdC5jIGIvZnMvbnRmcy9ydW5saXN0LmNcbmluZGV4IDllYWFkYmMwZWY0N2YuLmM3NzViN2RmMDc0ZjggMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3J1bmxpc3QuY1xuKysrIGIvZnMvbnRmcy9ydW5saXN0LmNcbkBAIC03NjMsNiArNzYzLDcgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICpcbiBcdC8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqL1xuIFx0dmNuID0gbG93ZXN0X3ZjbjtcbiBcdGxjbiA9IDA7XG4rXHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIFx0LyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xuIFx0YnVmID0gKHU4ICopYXR0ciArXG4gXHRcdGxlMTZfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpO1xuQEAgLTc3Miw2ICs3NzMsMjMgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICpcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXG4rXHQgKiBhdHRyaWJ1dGUuXG4rXHQgKi9cbitcdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjZcbitcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcbitcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcbitcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XG4rXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XG4rXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkludmFsaWQgZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheS5cIik7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0fVxuK1x0aWYgKCF2Y24gXHUwMDI2XHUwMDI2ICEqYnVmIFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdCBcdTAwMjZcdTAwMjYgb2xkX3J1bmxpc3QtXHUwMDNlcmwpIHtcbitcdFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVx1MDAzZWNvdW50O1xuK1x0XHRyZXR1cm4gb2xkX3J1bmxpc3QtXHUwMDNlcmw7XG4rXHR9XG4rXG4gXHQvKiBDdXJyZW50IHBvc2l0aW9uIGluIHJ1bmxpc3QgYXJyYXkuICovXG4gXHRybHBvcyA9IDA7XG4gXHQvKiBBbGxvY2F0ZSBmaXJzdCBwYWdlIGFuZCBzZXQgY3VycmVudCBydW5saXN0IHNpemUgdG8gb25lIHBhZ2UuICovXG5AQCAtOTQyLDcgKzk2MCw2IEBAIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqXG4gXHQgKiBJZiB0aGVyZSBpcyBhIGhpZ2hlc3RfdmNuIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmluYWxcbiBcdCAqIHZjbiBpbiB0aGUgcnVubGlzdCAtIDEsIG9yIHNvbWV0aGluZyBoYXMgZ29uZSBiYWRseSB3cm9uZy5cbiBcdCAqL1xuLVx0ZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtcbiBcdGlmICh1bmxpa2VseShkZWx0YXhjbiBcdTAwMjZcdTAwMjYgdmNuIC0gMSAhPSBkZWx0YXhjbikpIHtcbiBtcGFfZXJyOlxuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCJDb3JydXB0IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gbm9uLXJlc2lkZW50IGF0dHJpYnV0ZS5cIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzoyOTozNS4wNDczMDE4NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc1OTU5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5URlMgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL250ZnMvcnVubGlzdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBhIGNoZWNrIGZvciBhbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5LiBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoeSB0aGV5IGFkZGVkIHRoYXQuIEVtcHR5IGFycmF5IGNoZWNrcyBhcmUgdXN1YWxseSBhYm91dCBwcmV2ZW50aW5nIGVkZ2UtY2FzZSBlcnJvcnMgb3IgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRleHQsIGl0J3MgaGFyZCB0byBzYXkgZGVmaW5pdGl2ZWx5LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBOVEZTIGNvbmZpZ3VyYXRpb24uIEknbGwgdGFrZSBhIHF1aWNrIHBlZWsgaW4gYGZzL250ZnMvS2NvbmZpZ2AgdG8gdmVyaWZ5IGBDT05GSUdfTlRGU19GU2AgaXMgZW5hYmxlZC4gTWFrZXMgc3VyZSBpdCBpcyBldmVuIGNvbXBpbGVkIGluLlxuXG5UaGVuLCBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZ2FpbiBhIGJldHRlciBhcHByZWNpYXRpb24gZm9yIGl0cyBpbXBhY3QgYW5kIGhvdyB0aGlzIG5ldyBjaGVjayBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGRhdGEgdGhhdCBtYXkgaGF2ZSBiZWVuIGludGVudGlvbmFsbHkgY29ycnVwdGVkLiBUaGF0IGNvdWxkIGV4cGxhaW4gdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzoyOTozOS41MjMyNjUzNzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NjY0NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz04Nj1pbnQgbnRmc19tYXBfcnVubGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTg3LVxcdCAqIHdlIHRoZW4gdHJ5IHRvIG1hcCB0aGUgYWxyZWFkeSBtYXBwZWQgcnVubGlzdCBmcmFnbWVudCBhbmRcXG5mcy9udGZzL2F0dHJpYi5jOjE4ODpcXHQgKiBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcygpIGZhaWxzLlxcbmZzL250ZnMvYXR0cmliLmMtMTg5LVxcdCAqL1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xOTQtXFx0fVxcbmZzL250ZnMvYXR0cmliLmM6MTk1OlxcdHJsID0gbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MobmktXFx1MDAzZXZvbCwgYSwgXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LCBcXHUwMDI2bmV3X3JsX2NvdW50KTtcXG5mcy9udGZzL2F0dHJpYi5jLTE5Ni1cXHRpZiAoSVNfRVJSKHJsKSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MjY1Mj1pbnQgbnRmc19hdHRyX3JlY29yZF9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjczMC1cXG5mcy9udGZzL2F0dHJpYi5jOjI3MzE6XFx0XFx0XFx0YWxfcmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhiYXNlX25pLVxcdTAwM2V2b2wsXFxuZnMvbnRmcy9hdHRyaWIuYy0yNzMyLVxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYXR0ciwgTlVMTCwgXFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTMyNzI9aW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTMzMTktXFx0XFx0XFx0LyogRGVjb2RlIHRoZSBydW5saXN0LiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MzMyMDpcXHRcXHRcXHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVxcdTAwM2V2b2wsIGEsIFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdCxcXG5mcy9udGZzL2F0dHJpYi5jLTMzMjEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MzIzPXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMzUxLVxcbmZzL250ZnMvaW5vZGUuYzozNTI6XFx0XFx0XFx0cmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhuaS1cXHUwMDNldm9sLCBhY3R4LVxcdTAwM2VhdHRyLCBOVUxMLFxcbmZzL250ZnMvaW5vZGUuYy0zNTMtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MTgwOT1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG1mdF9uaV9ydW5saXN0X2xvY2tfa2V5LCBtZnRfbmlfbXJlY19sb2NrX2tleTtcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0xODI5LSAqIGVsc2UgYW5kIGl0ZXJhdGluZyB1c2luZyBudGZzX2F0dHJfbG9va3VwKCREQVRBKSBvdmVyIGFsbCBleHRlbnRzLiAgQXMgZWFjaFxcbmZzL250ZnMvaW5vZGUuYzoxODMwOiAqIGV4dGVudCBpcyBmb3VuZCwgd2UgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoKSBpbmNsdWRpbmcgdGhlIGltcGxpZWRcXG5mcy9udGZzL2lub2RlLmMtMTgzMS0gKiBudGZzX3J1bmxpc3RzX21lcmdlKCkuICBFYWNoIHN0ZXAgb2YgdGhlIGl0ZXJhdGlvbiBuZWNlc3NhcmlseSBwcm92aWRlc1xcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTE4Mzc9aW50IG50ZnNfcmVhZF9pbm9kZV9tb3VudChzdHJ1Y3QgaW5vZGUgKnZpKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTE5ODctXFxuZnMvbnRmcy9pbm9kZS5jOjE5ODg6XFx0XFx0XFx0cmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyh2b2wsIGEsIE5VTEwsIFxcdTAwMjZuZXdfcmxfY291bnQpO1xcbmZzL250ZnMvaW5vZGUuYy0xOTg5LVxcdFxcdFxcdGlmIChJU19FUlIocmwpKSB7XFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjA4NC1cXHRcXHQgKi9cXG5mcy9udGZzL2lub2RlLmM6MjA4NTpcXHRcXHRucmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyh2b2wsIGEsIFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdCxcXG5mcy9udGZzL2lub2RlLmMtMjA4Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjA4OC1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLFxcbmZzL250ZnMvaW5vZGUuYzoyMDg5OlxcdFxcdFxcdFxcdFxcXCJudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWxkLlxcXCIsXFxuZnMvbnRmcy9pbm9kZS5jLTIwOTAtXFx0XFx0XFx0XFx0UFRSX0VSUihucmwpKTtcXG4tLVxcbmZzL250ZnMvcnVubGlzdC5jPTUyMj1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuYy03MTctLypcXG5mcy9udGZzL3J1bmxpc3QuYzo3MTg6ICogbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MgLSBjb252ZXJ0IG1hcHBpbmcgcGFpcnMgYXJyYXkgdG8gcnVubGlzdFxcbmZzL250ZnMvcnVubGlzdC5jLTcxOS0gKiBAdm9sOiBudGZzIHZvbHVtZVxcbi0tXFxuZnMvbnRmcy9ydW5saXN0LmMtNzM0LSAqL1xcbmZzL250ZnMvcnVubGlzdC5jOjczNTpzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG5mcy9udGZzL3J1bmxpc3QuYy03MzYtXFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyLCBzdHJ1Y3QgcnVubGlzdCAqb2xkX3J1bmxpc3QsXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuaD02OD1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuaC03MC1cXHRcXHRzaXplX3QgKm5ld19ybF9jb3VudCk7XFxuZnMvbnRmcy9ydW5saXN0Lmg6NzE6c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuZnMvbnRmcy9ydW5saXN0LmgtNzItXFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyLCBzdHJ1Y3QgcnVubGlzdCAqb2xkX3J1bmxpc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjI5OjM5LjU3NDczNzEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTc4MTM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgTlRGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2Agd2l0aGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoYXQgZnVuY3Rpb24ncyBwcmV0dHkgY3J1Y2lhbDsgaXQncyB1c2VkIGJ5IHNldmVyYWwga2V5IE5URlMgZnVuY3Rpb25zOiBgbnRmc19tYXBfcnVubGlzdF9ub2xvY2tgLCBgbnRmc19hdHRyX3JlY29yZF9ybWAsIGBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3RgLCBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AsIGFuZCBgbnRmc19yZWFkX2lub2RlX21vdW50YC4gVGhlc2UgYXJlIGFsbCBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIE5URlMgaW1wbGVtZW50YXRpb24sIHNvIGFueSBjaGFuZ2UgaGVyZSB3YXJyYW50cyBhIGNsb3NlciBsb29rLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIGNoZWNrIGZvciBhbiBlbXB0eSBgbWFwcGluZ19wYWlyc2AgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciB3aGF0ICpsb29rcyogbGlrZSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IOKAkyBsaWtlbHkgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGEgc2ltaWxhciB0eXBlIG9mIGJ1ZyB3aGVuIHRoZSBjb2RlJ3MgdHJ5aW5nIHRvIHBhcnNlIHNvbWV0aGluZyB0aGF0IGlzbid0IGFjdHVhbGx5IHRoZXJlLiBBIHNpbXBsZSBjaGVjayBsaWtlIHRoaXMgY291bGQgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgZG93biB0aGUgcm9hZC5cblxuR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRob3NlIGZ1bmN0aW9ucywgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBleHBvc2UgYW55IG90aGVyIHZ1bG5lcmFiaWxpdGllcyB1bmRlciB1bmV4cGVjdGVkIGlucHV0cy5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHBhdGgsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnLiBJIGJlbGlldmUgYENPTkZJR19OVEZTX0ZTYCBpcyB0aGUgcmVsZXZhbnQgb3B0aW9uIGhlcmUuIEknbGwgbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCB0byBtYWtlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSBjb2RlIGluIHRoZSBwcm9wZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzoyOTo0OC44MzI1NTMyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYyNjgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xcbmZzL250ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0zNC1cXG5mcy9udGZzL0tjb25maWc6MzU6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjI5OjQ4Ljg5MTE4Njk5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjUxNDI3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlRGUyBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGNydWNpYWwgTlRGUyBjb25maWd1cmF0aW9ucy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgQ09ORklHX05URlNfRlNgIGlzIHNldCwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy4gTm93LCB3YWl0IGEgbWludXRlLi4uIGlzIHRoZXJlIGFueSBvdGhlciBOVEZTLXJlbGF0ZWQgY29uZmlndXJhdGlvbiB0aGF0IEkgbmVlZCB0byBjb25zaWRlcj8gQWgsIHllcywgdGhlcmUncyBgTlRGUzNfRlNgLCBidXQgaXNuJ3QgdGhhdCBwYXJ0IG9mIHRoZSBsZWdhY3kgTlRGUyBkcml2ZXIgaW4gYGZzL250ZnMvYD8gWWVzLCBJJ20gcHJldHR5IHN1cmUgYGZzL250ZnMvYCBpcyB3aGVyZSB0aGUgb2xkZXIgY29kZSByZXNpZGVzLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHRoaXMgc3lzdGVtIGJ1aWxkLCBsZXQncyB2ZXJpZnkgYWdhaW4gdGhhdCBgTlRGU19GU2AgaW4gaXNvbGF0aW9uIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjI5OjU2LjkxNjMzMzM0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY5ODA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcXG5mcy9udGZzL0tjb25maWctMTQtXFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG5mcy9udGZzL0tjb25maWc6MTU6XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0zNT1jb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5mcy9udGZzL0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTM4LVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6NTYuOTg3MDM2NDg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzMwMzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBJdCBsb29rcyBsaWtlIGBOVEZTX0ZTYCByZWxpZXMgb24gYEJMT0NLYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIGRlcGVuZGVuY3kuIFRvIGdldCBhIGhhbmRsZSBvbiBpdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgTlRGUywgc3BlY2lmaWNhbGx5IGBmcy9udGZzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBjcml0aWNhbGx5LCB0aG9zZSBkZXBlbmRlbmN5IGRlZmluaXRpb25zLiBMZXQncyBzZWUgd2hhdCBgZnMvbnRmcy9LY29uZmlnYCByZXZlYWxzIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTlRGU19GU2AgYW5kIGBCTE9DS2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDowMS42MDQzNDM4NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTlRGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA1OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXFxuICAgODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMTE6XFx0XFx0ICBudGZzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTlRGU19ERUJVR1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDowMS42MDQ0NDUzODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDI0ODA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHdhaXQgYSBtaW51dGUuLi4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgYE5URlNfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhZCBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBCTE9DS2AsIGJ1dCBub3cgSSdtIHNlY29uZC1ndWVzc2luZyBteXNlbGYuIFRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0LiBJdCdzIHVudXN1YWwgZm9yIGEgZmlsZXN5c3RlbSBub3QgdG8gZGVwZW5kIG9uIGEgYmxvY2sgZGV2aWNlIGluIHNvbWUgd2F5LlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgcXVpY2tseS4gTGV0IG1lIHB1bGwgdXAgYGZzL0tjb25maWdgLiBJJ2xsIHNjYW4gdGhyb3VnaCBpdCB0byBzZWUgaWYgYGZzL250ZnMvS2NvbmZpZ2AgaXMgaW5jbHVkZWQgY29uZGl0aW9uYWxseSDigJMgcGVyaGFwcyBpdCdzIG5lc3RlZCB1bmRlciBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgaW5kaXJlY3RseSBpbXBsaWVzIGBCTE9DS2AuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIG1vcmUgY29tcGxleCBkZXBlbmRlbmN5IHRyZWUgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQgdG8gdHJhY2UgdGhyb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MDUuODA4Njk3OTkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc1NjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcImZzL250ZnMvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTE1ND1zb3VyY2UgXFxcImZzL2V4ZmF0L0tjb25maWdcXFwiXFxuZnMvS2NvbmZpZzoxNTU6c291cmNlIFxcXCJmcy9udGZzL0tjb25maWdcXFwiXFxuZnMvS2NvbmZpZy0xNTYtc291cmNlIFxcXCJmcy9udGZzMy9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDowNS44ODU0NjE1NzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MTMyNzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBOVEZTIENvbXByZXNzaW9uKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgTlRGU19GU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmU7IHRoYXQncyBhbGwgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBub3cuIE5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGUgb25lIHRoYXQncyBiZWVuIGZsYWdnZWQgYXMgbW9kaWZpZWQgaXMgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYC4gR29vZC4gTm93LCBsZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGBudGZzX21hcF9ydW5saXN0X25vbG9ja2AsIGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCwgYW5kIGBudGZzX3JlYWRfaW5vZGVfbW91bnRgIGFyZSBhbGwgY29uc3VtZXJzIG9mIHRoaXMgZGVjb21wcmVzc2lvbiBmdW5jdGlvbi4gVGhhdCBnaXZlcyBtZSBhIGNsZWFyIHBhdGggZm9yd2FyZDsgbXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRob3JvdWdobHkgYW5hbHl6aW5nIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgaXRzZWxmIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGhpbiB0aG9zZSBzcGVjaWZpYyBjYWxsIGNvbnRleHRzLiBUaGlzIG5hcnJvd2VkIHNjb3BlIHdpbGwgbWFrZSBmb3IgYW4gZWZmaWNpZW50IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc1LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoxMS40MjY3OTM2OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzNzU0NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE5URlMgZnVuY3Rpb24gYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCB0byBhZGQgYSBjaGVjayBmb3IgYW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgTlRGUyBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBmaWxlc3lzdGVtIHBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE5URlMgZnVuY3Rpb24gYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCB0byBhZGQgYSBjaGVjayBmb3IgYW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgTlRGUyBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBmaWxlc3lzdGVtIHBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoxMS41ODIxNzg2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyODk0ODYzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoxMS41ODI3NTUzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjI4ODkwNTA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDJiZjNhYzhiNmJhM2FiZWQ3M2RjMTA1ZTVhMmZmMWNiM2VlZGU1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA3OjI5OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuY1xuaW5kZXggOWVhYWRiYzBlZjQ3Zi4uYzc3NWI3ZGYwNzRmOCAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvcnVubGlzdC5jXG4rKysgYi9mcy9udGZzL3J1bmxpc3QuY1xuQEAgLTc2Myw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0LyogU3RhcnQgYXQgdmNuID0gbG93ZXN0X3ZjbiBhbmQgbGNuIDAuICovXG4gXHR2Y24gPSBsb3dlc3RfdmNuO1xuIFx0bGNuID0gMDtcbitcdGRlbHRheGNuID0gbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XG4gXHQvKiBHZXQgc3RhcnQgb2YgdGhlIG1hcHBpbmcgcGFpcnMgYXJyYXkuICovXG4gXHRidWYgPSAodTggKilhdHRyICtcbiBcdFx0bGUxNl90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5tYXBwaW5nX3BhaXJzX29mZnNldCk7XG5AQCAtNzcyLDYgKzc3MywyMyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGhcbitcdCAqIGF0dHJpYnV0ZS5cbitcdCAqL1xuK1x0aWYgKCF2Y24gXHUwMDI2XHUwMDI2ICEqYnVmIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChkZWx0YXhjbiAhPSAtMSB8fFxuK1x0ICAgICBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fFxuK1x0ICAgICBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHxcbitcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHtcbitcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiSW52YWxpZCBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LlwiKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4rXHR9XG4rXHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0IFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdC1cdTAwM2VybCkge1xuK1x0XHQqbmV3X3JsX2NvdW50ID0gb2xkX3J1bmxpc3QtXHUwMDNlY291bnQ7XG4rXHRcdHJldHVybiBvbGRfcnVubGlzdC1cdTAwM2VybDtcbitcdH1cbitcbiBcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cbiBcdHJscG9zID0gMDtcbiBcdC8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi9cbkBAIC05NDIsNyArOTYwLDYgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICpcbiBcdCAqIElmIHRoZXJlIGlzIGEgaGlnaGVzdF92Y24gc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBmaW5hbFxuIFx0ICogdmNuIGluIHRoZSBydW5saXN0IC0gMSwgb3Igc29tZXRoaW5nIGhhcyBnb25lIGJhZGx5IHdyb25nLlxuIFx0ICovXG4tXHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIFx0aWYgKHVubGlrZWx5KGRlbHRheGNuIFx1MDAyNlx1MDAyNiB2Y24gLSAxICE9IGRlbHRheGNuKSkge1xuIG1wYV9lcnI6XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkNvcnJ1cHQgbWFwcGluZyBwYWlycyBhcnJheSBpbiBub24tcmVzaWRlbnQgYXR0cmlidXRlLlwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjExLjU4Mjc1NjgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MDk1NzM5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlRGUyBSdW5saXN0IERlY29tcHJlc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5cyBhcmUgaGFuZGxlZC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSByZWxvY2F0aW9uIG9mIHRoZSBgZGVsdGF4Y25gIGluaXRpYWxpemF0aW9uOiBgZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtgLiBJbnRlcmVzdGluZywgbW92aW5nIGl0IHVwLiBJIHdvbmRlciBpZiB0aGlzIHJlbGF0ZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBzb21ldGhpbmcgSSdtIGFsd2F5cyB3YXJ5IG9mLlxuXG5UaGUgYWRkZWQgY2hlY2sgaXMgY3JpdGljYWw6XG5cbmBgYGNcblx0Lypcblx0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXG5cdCAqIGF0dHJpYnV0ZS5cblx0ICovXG5cdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjZcblx0ICAgIChkZWx0YXhjbiAhPSAtMSB8fFxuXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpIHx8XG5cdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XG5cdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHtcblx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCJJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXCIpO1xuXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuXHR9XG5cdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjYgb2xkX3J1bmxpc3QgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0LVx1MDAzZXJsKSB7XG5cdFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVx1MDAzZWNvdW50O1xuXHRcdHJldHVybiBvbGRfcnVubGlzdC1cdTAwM2VybDtcblx0fVxuYGBgXG5cblRoaXMgc2VlbXMgdG8gYmUgYSBkZWZlbnNpdmUgbWVhc3VyZS4gQW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSAoYCEqYnVmYCkgc2hvdWxkIG9ubHkgYmUgdmFsaWQgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgemVybyBsZW5ndGguIFRoZSBjaGVjayBleGFtaW5lcyBpZiBgIXZjbmAgYW5kIGAhKmJ1ZmAgYXJlIHNpbXVsdGFuZW91c2x5IHRydWUsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNvbmRpdGlvbnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkIFwiemVybyBsZW5ndGhcIi4gTXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgLSB0aGlzIHNtZWxscyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBoYW5kbGluZyBlZGdlIGNhc2VzLiBMb29raW5nIGF0IHRoZSBjb25kaXRpb25zIGl0IGNoZWNrcyB3aGV0aGVyIHRoZSBgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgb3IgYGluaXRpYWxpemVkX3NpemVgIGFyZSBub24temVyby4gIFRoZXNlIGFyZSBhbGwgdmFsdWVzIHJlYWQgZnJvbSB0aGUgb24tZGlzayBOVEZTIG1ldGFkYXRhLiBXaGlsZSB0aGlzIGRhdGEgKnNob3VsZCogYmUgaW5pdGlhbGl6ZWQsIHRoZSBmaWxlc3lzdGVtIGNvdWxkIGJlIGNvcnJ1cHQsIG9yIGV2ZW4gbWFsaWNpb3VzbHkgY3JhZnRlZC4gVGhlIGNvZGUgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgb3Igc2ltaWxhciBwcm9ibGVtIGlmIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5IGlzIGVtcHR5IGluIGFuIHVuZXhwZWN0ZWQgc2NlbmFyaW8uIElmIGAhKmJ1ZmAgaXMgdHJ1ZSwgdGhlIG1hcHBpbmcgcGFpcnMgYXJyYXkgaXMgZW1wdHkuIFRoZSBgISpidWZgIGNvbmRpdGlvbiBtaWdodCBieXBhc3MgdGhlIGxvb3AgdGhhdCBwYXJzZXMgdGhlIGFycmF5LCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIEl0IHNlZW1zIHRoYXQgdGhpcyBjb2RlIG1heSBub3QgZXhlY3V0ZSB1bmRlciB0aGUgY29uZGl0aW9uIGAhKmJ1ZmAsIHdoaWNoIG1pZ2h0IGNhdXNlIGFuIGVtcHR5IHJ1bmxpc3QuIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaW4gc29tZSBlZGdlIGNhc2VzIGFuIG9sZGVyIGBydW5saXN0YCBtaWdodCBiZSByZXR1cm5lZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgcmV0dXJuaW5nIGFuIG9sZCBydW5saXN0IHdoZW4gYCF2Y24gXHUwMDI2XHUwMDI2ICEqYnVmYC4gTmVlZCB0byBjaGVjayBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjE5LjQ5MjMzMzY0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NjE1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9ydW5saXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9ydW5saXN0LmM9NTIyPXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfcnVubGlzdHNfbWVyZ2Uoc3RydWN0IHJ1bmxpc3QgKmRfcnVubGlzdCxcXG4tLVxcbmZzL250ZnMvcnVubGlzdC5jLTcxNy0vKlxcbmZzL250ZnMvcnVubGlzdC5jOjcxODogKiBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyAtIGNvbnZlcnQgbWFwcGluZyBwYWlycyBhcnJheSB0byBydW5saXN0XFxuZnMvbnRmcy9ydW5saXN0LmMtNzE5LSAqIEB2b2w6IG50ZnMgdm9sdW1lXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuYy03MzQtICovXFxuZnMvbnRmcy9ydW5saXN0LmM6NzM1OnN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbmZzL250ZnMvcnVubGlzdC5jLTczNi1cXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIsIHN0cnVjdCBydW5saXN0ICpvbGRfcnVubGlzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MTkuNTc2MTAxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1MTAzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEZTIFJ1bmxpc3QgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBOVEZTIGRyaXZlciBoYW5kbGVzIHJ1bmxpc3RzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzM1IGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoYXQgYXJlYSBwcm9iYWJseSBkZWFscyB3aXRoIGEgY3JpdGljYWwgYXNwZWN0IG9mIGhvdyBmaWxlIGRhdGEgaXMgbWFwcGVkIG9uIHRoZSBkaXNrLiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBydW5saXN0IGNvbXByZXNzaW9uL2V4cGFuc2lvbi4gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgTlRGUydzIGZyYWdtZW50ZWQgZmlsZSBzeXN0ZW0gYW5kIGl0cyB1c2Ugb2YgcnVubGlzdHMsIHRoaXMgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyaXNlISBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoyMi42NTEyMDkzNDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvcnVubGlzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzU6XFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuIDczNjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIsIHN0cnVjdCBydW5saXN0ICpvbGRfcnVubGlzdCxcXG4gNzM3OlxcdFxcdFxcdHNpemVfdCAqbmV3X3JsX2NvdW50KVxcbiA3Mzg6XFx0e1xcbiA3Mzk6XFx0XFx0czY0IHZjbjtcXHRcXHQvKiBDdXJyZW50IHZjbi4gKi9cXG4gNzQwOlxcdFxcdHM2NCBsY247XFx0XFx0LyogQ3VycmVudCBsY24uICovXFxuIDc0MTpcXHRcXHRzNjQgZGVsdGF4Y247XFx0XFx0LyogQ2hhbmdlIGluIFt2bF1jbi4gKi9cXG4gNzQyOlxcdFxcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqbmV3X3JsO1xcdC8qIFRoZSBvdXRwdXQgcnVubGlzdC4gKi9cXG4gNzQzOlxcdFxcdHU4ICpidWY7XFx0XFx0LyogQ3VycmVudCBwb3NpdGlvbiBpbiBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xcbiA3NDQ6XFx0XFx0dTggKmF0dHJfZW5kO1xcdFxcdC8qIEVuZCBvZiBhdHRyaWJ1dGUuICovXFxuIDc0NTpcXHRcXHRpbnQgcmxzaXplO1xcdFxcdC8qIFNpemUgb2YgcnVubGlzdCBidWZmZXIuICovXFxuIDc0NjpcXHRcXHR1MTYgcmxwb3M7XFx0XFx0LyogQ3VycmVudCBydW5saXN0IHBvc2l0aW9uIGluIHVuaXRzIG9mIHN0cnVjdCBydW5saXN0X2VsZW1lbnRzLiAqL1xcbiA3NDc6XFx0XFx0dTggYjtcXHRcXHRcXHQvKiBDdXJyZW50IGJ5dGUgb2Zmc2V0IGluIGJ1Zi4gKi9cXG4gNzQ4OlxcdFxcdHU2NCBsb3dlc3RfdmNuO1xcdFxcdC8qIFJhdyBvbi1kaXNrIGxvd2VzdF92Y24uICovXFxuIDc0OTpcXHRcXG4gNzUwOlxcdCNpZmRlZiBERUJVR1xcbiA3NTE6XFx0XFx0LyogTWFrZSBzdXJlIGF0dHIgZXhpc3RzIGFuZCBpcyBub24tcmVzaWRlbnQuICovXFxuIDc1MjpcXHRcXHRpZiAoIWF0dHIgfHwgIWF0dHItXFx1MDAzZW5vbl9yZXNpZGVudCkge1xcbiA3NTM6XFx0XFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiSW52YWxpZCBhcmd1bWVudHMuXFxcIik7XFxuIDc1NDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gNzU1OlxcdFxcdH1cXG4gNzU2OlxcdCNlbmRpZlxcbiA3NTc6XFx0XFx0bG93ZXN0X3ZjbiA9IGxlNjRfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lmxvd2VzdF92Y24pO1xcbiA3NTg6XFx0XFx0LyogVmFsaWRhdGUgbG93ZXN0X3ZjbiBmcm9tIG9uLWRpc2sgbWV0YWRhdGEgdG8gZW5zdXJlIGl0IGlzIHNhbmUuICovXFxuIDc1OTpcXHRcXHRpZiAob3ZlcmZsb3dzX3R5cGUobG93ZXN0X3ZjbiwgdmNuKSkge1xcbiA3NjA6XFx0XFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiSW52YWxpZCBsb3dlc3RfdmNuIGluIG1hcHBpbmcgcGFpcnMuXFxcIik7XFxuIDc2MTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4gNzYyOlxcdFxcdH1cXG4gNzYzOlxcdFxcdC8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqL1xcbiA3NjQ6XFx0XFx0dmNuID0gbG93ZXN0X3ZjbjtcXG4gNzY1OlxcdFxcdGxjbiA9IDA7XFxuIDc2NjpcXHRcXHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtcXG4gNzY3OlxcdFxcdC8qIEdldCBzdGFydCBvZiB0aGUgbWFwcGluZyBwYWlycyBhcnJheS4gKi9cXG4gNzY4OlxcdFxcdGJ1ZiA9ICh1OCAqKWF0dHIgK1xcbiA3Njk6XFx0XFx0XFx0bGUxNl90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpO1xcbiA3NzA6XFx0XFx0YXR0cl9lbmQgPSAodTggKilhdHRyICsgbGUzMl90b19jcHUoYXR0ci1cXHUwMDNlbGVuZ3RoKTtcXG4gNzcxOlxcdFxcdGlmICh1bmxpa2VseShidWYgXFx1MDAzYyAodTggKilhdHRyIHx8IGJ1ZiBcXHUwMDNlPSBhdHRyX2VuZCkpIHtcXG4gNzcyOlxcdFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkNvcnJ1cHQgYXR0cmlidXRlLlxcXCIpO1xcbiA3NzM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuIDc3NDpcXHRcXHR9XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdC8qXFxuIDc3NzpcXHRcXHQgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGhcXG4gNzc4OlxcdFxcdCAqIGF0dHJpYnV0ZS5cXG4gNzc5OlxcdFxcdCAqL1xcbiA3ODA6XFx0XFx0aWYgKCF2Y24gXFx1MDAyNlxcdTAwMjYgISpidWYgXFx1MDAyNlxcdTAwMjZcXG4gNzgxOlxcdFxcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcXG4gNzgyOlxcdFxcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpIHx8XFxuIDc4MzpcXHRcXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHxcXG4gNzg0OlxcdFxcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XFxuIDc4NTpcXHRcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXFxcIik7XFxuIDc4NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4gNzg3OlxcdFxcdH1cXG4gNzg4OlxcdFxcdGlmICghdmNuIFxcdTAwMjZcXHUwMDI2ICEqYnVmIFxcdTAwMjZcXHUwMDI2IG9sZF9ydW5saXN0IFxcdTAwMjZcXHUwMDI2IG9sZF9ydW5saXN0LVxcdTAwM2VybCkge1xcbiA3ODk6XFx0XFx0XFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVxcdTAwM2Vjb3VudDtcXG4gNzkwOlxcdFxcdFxcdHJldHVybiBvbGRfcnVubGlzdC1cXHUwMDNlcmw7XFxuIDc5MTpcXHRcXHR9XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cXG4gNzk0OlxcdFxcdHJscG9zID0gMDtcXG4gNzk1OlxcdFxcdC8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi9cXG4gNzk2OlxcdFxcdHJsID0ga3Z6YWxsb2MocmxzaXplID0gUEFHRV9TSVpFLCBHRlBfTk9GUyk7XFxuIDc5NzpcXHRcXHRpZiAodW5saWtlbHkoIXJsKSlcXG4gNzk4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA3OTk6XFx0XFx0LyogSW5zZXJ0IHVubWFwcGVkIHN0YXJ0aW5nIGVsZW1lbnQgaWYgbmVjZXNzYXJ5LiAqL1xcbiA4MDA6XFx0XFx0aWYgKHZjbikge1xcbiA4MDE6XFx0XFx0XFx0cmwtXFx1MDAzZXZjbiA9IDA7XFxuIDgwMjpcXHRcXHRcXHRybC1cXHUwMDNlbGNuID0gTENOX1JMX05PVF9NQVBQRUQ7XFxuIDgwMzpcXHRcXHRcXHRybC1cXHUwMDNlbGVuZ3RoID0gdmNuO1xcbiA4MDQ6XFx0XFx0XFx0cmxwb3MrKztcXG4gODA1OlxcdFxcdH1cXG4gODA2OlxcdFxcdHdoaWxlIChidWYgXFx1MDAzYyBhdHRyX2VuZCBcXHUwMDI2XFx1MDAyNiAqYnVmKSB7XFxuIDgwNzpcXHRcXHRcXHQvKlxcbiA4MDg6XFx0XFx0XFx0ICogQWxsb2NhdGUgbW9yZSBtZW1vcnkgaWYgbmVlZGVkLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRoZVxcbiA4MDk6XFx0XFx0XFx0ICogbm90LW1hcHBlZCBhbmQgdGVybWluYXRvciBlbGVtZW50cy4ga3Z6YWxsb2MoKVxcbiA4MTA6XFx0XFx0XFx0ICogb3BlcmF0ZXMgb24gd2hvbGUgcGFnZXMgb25seS5cXG4gODExOlxcdFxcdFxcdCAqL1xcbiA4MTI6XFx0XFx0XFx0aWYgKCgocmxwb3MgKyAzKSAqIHNpemVvZigqcmwpKSBcXHUwMDNlIHJsc2l6ZSkge1xcbiA4MTM6XFx0XFx0XFx0XFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwyO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRcXHRcXHRybDIgPSBrdnphbGxvYyhybHNpemUgKyBQQUdFX1NJWkUsIEdGUF9OT0ZTKTtcXG4gODE2OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseSghcmwyKSkge1xcbiA4MTc6XFx0XFx0XFx0XFx0XFx0a3ZmcmVlKHJsKTtcXG4gODE4OlxcdFxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA4MTk6XFx0XFx0XFx0XFx0fVxcbiA4MjA6XFx0XFx0XFx0XFx0bWVtY3B5KHJsMiwgcmwsIHJsc2l6ZSk7XFxuIDgyMTpcXHRcXHRcXHRcXHRrdmZyZWUocmwpO1xcbiA4MjI6XFx0XFx0XFx0XFx0cmwgPSBybDI7XFxuIDgyMzpcXHRcXHRcXHRcXHRybHNpemUgKz0gUEFHRV9TSVpFO1xcbiA4MjQ6XFx0XFx0XFx0fVxcbiA4MjU6XFx0XFx0XFx0LyogRW50ZXIgdGhlIGN1cnJlbnQgdmNuIGludG8gdGhlIGN1cnJlbnQgcnVubGlzdCBlbGVtZW50LiAqL1xcbiA4MjY6XFx0XFx0XFx0cmxbcmxwb3NdLnZjbiA9IHZjbjtcXG4gODI3OlxcdFxcdFxcdC8qXFxuIDgyODpcXHRcXHRcXHQgKiBHZXQgdGhlIGNoYW5nZSBpbiB2Y24sIGkuZS4gdGhlIHJ1biBsZW5ndGggaW4gY2x1c3RlcnMuXFxuIDgyOTpcXHRcXHRcXHQgKiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQgd2Ugc2lnbmV4dGVuZCBuZWdhdGl2ZSB2YWx1ZXMuXFxuIDgzMDpcXHRcXHRcXHQgKiBBIG5lZ2F0aXZlIHJ1biBsZW5ndGggZG9lc24ndCBtYWtlIGFueSBzZW5zZSwgYnV0IGhleSwgSVxcbiA4MzE6XFx0XFx0XFx0ICogZGlkbid0IG1ha2UgdXAgdGhlIE5URlMgc3BlY3MgYW5kIFdpbmRvd3MgTlQ0IHRyZWF0cyB0aGUgcnVuXFxuIDgzMjpcXHRcXHRcXHQgKiBsZW5ndGggYXMgYSBzaWduZWQgdmFsdWUgc28gdGhhdCdzIGhvdyBpdCBpcy4uLlxcbiA4MzM6XFx0XFx0XFx0ICovXFxuIDgzNDpcXHRcXHRcXHRiID0gKmJ1ZiBcXHUwMDI2IDB4ZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MjIuNjUxNDMxOTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzI5MjQ4NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZpeCBmb3IgYSBQb3RlbnRpYWxseSBNYWxmb3JtZWQgTlRGUyBBdHRyaWJ1dGUgUmVjb3JkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IGFkZHJlc3NpbmcgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gaG93IGFuIE5URlMgYXR0cmlidXRlIHJlY29yZCAoYGF0dHJgKSBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtYXBwaW5nIHBhaXJzLiBUaGUgY29kZSBpcyByZWFkaW5nIHNldmVyYWwgZmllbGRzIGZyb20gdGhlIGBhdHRyYCBzdHJ1Y3R1cmU6IGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBhbmQgYGluaXRpYWxpemVkX3NpemVgLiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgYW4gb24tZGlzayBzdHJ1Y3R1cmUsIHNvIHRoZSBkYXRhIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSBzeXN0ZW0gcmVhZHMgZnJvbSB0aGUgZGlzay5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBhbiAqZW1wdHkqIG1hcHBpbmcgcGFpcnMgYXJyYXkuIFRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXM6IGlmIHRoZSBsb29wIGB3aGlsZSAoYnVmIFx1MDAzYyBhdHRyX2VuZCBcdTAwMjZcdTAwMjYgKmJ1ZilgIGlzIHNraXBwZWQgYmVjYXVzZSBgISpidWZgIGlzIHRydWUsIGEgY29uZGl0aW9uIGxhdGVyIGRvd24gdGhlIGxpbmUgbWF5IGVycm9yIG91dC4gTmFtZWx5LCBpZiBgdmNuYCBpcyBgbG93ZXN0X3ZjbmAsIHdoaWNoIG1heSBiZSAwLCB0aGVuIGB2Y24gLSAxYCB3b3VsZCBiZSBgLTFgLiBJZiBgZGVsdGF4Y25gIGlzIG5vdCAwLCB0aGVuIGB2Y24gLSAxICE9IGRlbHRheGNuYCBjb3VsZCBiZSB0cnVlLCByZXN1bHRpbmcgaW4gYW4gZXJyb3IuIEhvd2V2ZXIsIHRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gY2F0Y2ggdGhpcyBzcGVjaWZpYyBzY2VuYXJpbzpcblxuYGBgY1xuXHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2XG5cdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcblx0ICAgICBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fFxuXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKSB8fFxuXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XG5cdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiSW52YWxpZCBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LlwiKTtcblx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcblx0fVxuYGBgXG5cblRoaXMgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgY2FzZSBvZiBhbiAqZW1wdHkqIG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYW4gTlRGUyBpbWFnZS4gSWYgaXTigJlzIHByb2Nlc3NlZCwgaXQgbWlnaHQgcmV0dXJuIGFuIGVtcHR5IHJ1bmxpc3QuIFRoZSBsb2dpYyBtYWtlcyBzZW5zZS4gSSBoYWQgYnJpZWZseSBjb25zaWRlcmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFzIHRoZSByb290IGNhdXNlLCBidXQgbm8uIFRoZSBgYXR0cmAgc3RydWN0dXJlIGlzIHJlYWQgZnJvbSBkaXNrLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIFRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIHdpdGggYGt2emFsbG9jYCwgd2hpY2ggemVyb3MgaXQgaW5pdGlhbGx5LlxuXG5UaGUgaXNzdWUgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IsIHBlcmhhcHMgc3RlbW1pbmcgZnJvbSBhbiBlbXB0eSBydW5saXN0IGJlaW5nIHJldHVybmVkIGR1ZSB0byBhIG1hbGZvcm1lZCBpbWFnZSwgd2hpY2ggY291bGQgdGhlbiBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBsYXRlciBvbiB3aGVuIHRoZSBydW5saXN0IGlzIHVzZWQuIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBmaWxlc3lzdGVtIGZ1enppbmcgYnVnIHRoYXQgS0FTQU4gb3IgYSBnZW5lcmFsIGNyYXNoIGNvdWxkIGVhc2lseSBjYXRjaC4gR2l2ZW4gd2hhdCBJJ20gc2VlaW5nLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyBLTVNBTiB3b3VsZG4ndCBiZSByZWxldmFudC4gVGhlIGJ1ZyBpcyBhbG1vc3QgY2VydGFpbmx5IGEgc3VidGxlIGZhaWx1cmUgdG8gaGFuZGxlIGEgcGVyZmVjdGx5IHZhbGlkIE5URlMgZm9ybWF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MzUuOTgwNjgzNDU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTEzMzU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYXR0cl9yZWNvcmQgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9sYXlvdXQuaD03NjI9ZW51bSB7XFxuLS1cXG5mcy9udGZzL2xheW91dC5oLTgyNi0gKi9cXG5mcy9udGZzL2xheW91dC5oOjgyNzpzdHJ1Y3QgYXR0cl9yZWNvcmQge1xcbmZzL250ZnMvbGF5b3V0LmgtODI4LVxcdF9fbGUzMiB0eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDozNi4wNzE4NDA3MjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1Mjc5NDUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTlRGUyBNZXRhZGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBmcy9udGZzL2xheW91dC5oYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZSA4MjcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgbGF5b3V0IG9mIHRoZSBOVEZTIG1ldGFkYXRhIHN0cnVjdHVyZXMuIE15IGd1dCBmZWVsaW5nIGlzIEknbSBsb29raW5nIGZvciBhIHNwZWNpZmljIGF0dHJpYnV0ZSB0eXBlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGZpbGUgcmVjb3JkIHNlZ21lbnQgKEZSUykgaW5kZXhpbmcsIG9yIHBlcmhhcHMgZXZlbiB0aGUgYWxsb2NhdGlvbiBiaXRtYXAgc3RydWN0dXJlIHVzZWQgZm9yIHZvbHVtZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgJEJpdG1hcCBhdHRyaWJ1dGUuIEtub3dpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBoZWFkZXIgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgb24tZGlzayBkYXRhIG9yZ2FuaXphdGlvbiBpbiBhIGxpdmUgc2NlbmFyaW8sIG5vdCBqdXN0IHRoZW9yaXppbmcgYWJvdXQgZmlsZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgaXQgY291bGQgcmVsYXRlIHRvIHNvbWUgb2YgbXkgcHJldmlvdXMgcmVzZWFyY2ggb24gTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgaW5kZXhpbmcgYW5kIGF0dHJpYnV0ZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIG9yIHBvdGVudGlhbGx5IHRvIHRoZSBoYW5kbGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCdzIG9uIHRoYXQgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjQxLjAyNDYzODQxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjY2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9sYXlvdXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4Mjc6XFx0c3RydWN0IGF0dHJfcmVjb3JkIHtcXG4gODI4OlxcdFxcdF9fbGUzMiB0eXBlO1xcbiA4Mjk6XFx0XFx0X19sZTMyIGxlbmd0aDtcXG4gODMwOlxcdFxcdHU4IG5vbl9yZXNpZGVudDtcXG4gODMxOlxcdFxcdHU4IG5hbWVfbGVuZ3RoO1xcbiA4MzI6XFx0XFx0X19sZTE2IG5hbWVfb2Zmc2V0O1xcbiA4MzM6XFx0XFx0X19sZTE2IGZsYWdzO1xcbiA4MzQ6XFx0XFx0X19sZTE2IGluc3RhbmNlO1xcbiA4MzU6XFx0XFx0dW5pb24ge1xcbiA4MzY6XFx0XFx0XFx0c3RydWN0IHtcXG4gODM3OlxcdFxcdFxcdFxcdF9fbGUzMiB2YWx1ZV9sZW5ndGg7XFxuIDgzODpcXHRcXHRcXHRcXHRfX2xlMTYgdmFsdWVfb2Zmc2V0O1xcbiA4Mzk6XFx0XFx0XFx0XFx0dTggZmxhZ3M7XFxuIDg0MDpcXHRcXHRcXHRcXHRzOCByZXNlcnZlZDtcXG4gODQxOlxcdFxcdFxcdH0gX19wYWNrZWQgcmVzaWRlbnQ7XFxuIDg0MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA4NDM6XFx0XFx0XFx0XFx0X19sZTY0IGxvd2VzdF92Y247XFxuIDg0NDpcXHRcXHRcXHRcXHRfX2xlNjQgaGlnaGVzdF92Y247XFxuIDg0NTpcXHRcXHRcXHRcXHRfX2xlMTYgbWFwcGluZ19wYWlyc19vZmZzZXQ7XFxuIDg0NjpcXHRcXHRcXHRcXHR1OCBjb21wcmVzc2lvbl91bml0O1xcbiA4NDc6XFx0XFx0XFx0XFx0dTggcmVzZXJ2ZWRbNV07XFxuIDg0ODpcXHRcXHRcXHRcXHRfX2xlNjQgYWxsb2NhdGVkX3NpemU7XFxuIDg0OTpcXHRcXHRcXHRcXHRfX2xlNjQgZGF0YV9zaXplO1xcbiA4NTA6XFx0XFx0XFx0XFx0X19sZTY0IGluaXRpYWxpemVkX3NpemU7XFxuIDg1MTpcXHRcXHRcXHRcXHRfX2xlNjQgY29tcHJlc3NlZF9zaXplO1xcbiA4NTI6XFx0XFx0XFx0fSBfX3BhY2tlZCBub25fcmVzaWRlbnQ7XFxuIDg1MzpcXHRcXHR9IF9fcGFja2VkIGRhdGE7XFxuIDg1NDpcXHR9IF9fcGFja2VkO1xcbiA4NTU6XFx0XFxuIDg1NjpcXHQvKlxcbiA4NTc6XFx0ICogZW51bSAtIE5URlMgZmlsZSBhdHRyaWJ1dGUgZmxhZ3MgKDMyLWJpdClcXG4gODU4OlxcdCAqXFxuIDg1OTpcXHQgKiBGaWxlIGF0dHJpYnV0ZSBmbGFncyAoMzItYml0KSBhcHBlYXJpbmcgaW4gdGhlIGZpbGVfYXR0cmlidXRlcyBmaWVsZHMgb2YgdGhlXFxuIDg2MDpcXHQgKiBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMgYW5kIHRoZSBGSUxFTkFNRV9BVFRSXFxuIDg2MTpcXHQgKiBhdHRyaWJ1dGVzIG9mIE1GVF9SRUNPUkRzIGFuZCBkaXJlY3RvcnkgaW5kZXggZW50cmllcy5cXG4gODYyOlxcdCAqXFxuIDg2MzpcXHQgKiBBbGwgb2YgdGhlIGJlbG93IGZsYWdzIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IGluZGV4IGVudHJpZXMgYnV0IG9ubHkgc29tZVxcbiA4NjQ6XFx0ICogYXBwZWFyIGluIHRoZSBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgd2hpbHN0IG9ubHkgc29tZSBvdGhlcnMgYXBwZWFyXFxuIDg2NTpcXHQgKiBpbiB0aGUgRklMRU5BTUVfQVRUUiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMuICBVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCB0aGVcXG4gODY2OlxcdCAqIGZsYWdzIGFwcGVhciBpbiBhbGwgb2YgdGhlIGFib3ZlLlxcbiA4Njc6XFx0ICpcXG4gODY4OlxcdCAqIEZJTEVfQVRUUl9SRUFET05MWTogICAgICAgICBGaWxlIGlzIHJlYWQtb25seS5cXG4gODY5OlxcdCAqIEZJTEVfQVRUUl9ISURERU46ICAgICAgICAgICBGaWxlIGlzIGhpZGRlbiAobm90IHNob3duIGJ5IGRlZmF1bHQpLlxcbiA4NzA6XFx0ICogRklMRV9BVFRSX1NZU1RFTTogICAgICAgICAgIFN5c3RlbSBmaWxlIChwcm90ZWN0ZWQgYnkgT1MpLlxcbiA4NzE6XFx0ICogRklMRV9BVFRSX0RJUkVDVE9SWTogICAgICAgIERpcmVjdG9yeSBmbGFnIChyZXNlcnZlZCBpbiBOVDsgdXNlIE1GVCBmbGFnIGluc3RlYWQpLlxcbiA4NzI6XFx0ICogRklMRV9BVFRSX0FSQ0hJVkU6ICAgICAgICAgIEZpbGUgbmVlZHMgYXJjaGl2aW5nIChiYWNrdXAgZmxhZykuXFxuIDg3MzpcXHQgKiBGSUxFX0FUVFJfREVWSUNFOiAgICAgICAgICAgRGV2aWNlIGZpbGUgKHJhcmVseSB1c2VkKS5cXG4gODc0OlxcdCAqIEZJTEVfQVRUUl9OT1JNQUw6ICAgICAgICAgICBOb3JtYWwgZmlsZSAobm8gc3BlY2lhbCBhdHRyaWJ1dGVzKS5cXG4gODc1OlxcdCAqIEZJTEVfQVRUUl9URU1QT1JBUlk6ICAgICAgICBUZW1wb3JhcnkgZmlsZSAoZGVsZXRlIG9uIGNsb3NlKS5cXG4gODc2OlxcdCAqIEZJTEVfQVRUUl9TUEFSU0VfRklMRTogICAgICBTcGFyc2UgZmlsZSAoY29udGFpbnMgaG9sZXMpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDo0MS4wMjQ5NjgxOTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0NjY2Nzc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUyBBdHRyaWJ1dGUgUmVjb3JkIElzc3VlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIE5URlMgYXR0cmlidXRlIHJlY29yZCBpc3N1ZSwgYW5kIGhlcmUncyBteSB0YWtlLiBJJ20gbG9va2luZyBhdCB0aGVzZSBmaWVsZHM6IGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBhbmQgYGluaXRpYWxpemVkX3NpemVgLiBUaGV5IGFsbCBsaXZlIHdpdGhpbiB0aGUgYG5vbl9yZXNpZGVudGAgc3RydWN0LCBuZXN0ZWQgaW5zaWRlIHRoZSBgZGF0YWAgdW5pb24gb2YgdGhlIGBhdHRyX3JlY29yZGAuIFRoaXMgaXMgYW4gb24tZGlzayBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgdm9sdW1lIGFjdHVhbGx5IGxpdmVzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGVyZSdzIG5vIHByb2JsZW0gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSDigJMgdGhhdCdzIGEgcmVsaWVmLiBUaGUgaGVhcnQgb2YgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBhIGxvZ2ljIGVycm9yLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzbid0IGNvcnJlY3RseSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBhbiBlbXB0eSBhcnJheSBsaWtlbHkgbWVhbnMgd2UgZW5kIHVwIHdpdGggZWl0aGVyIGFuIGVtcHR5IHJ1bmxpc3QsIG9yLCB3b3JzZSwgYW4gaW52YWxpZCBvbmUuIFRoYXQncyBhIHRpY2tpbmcgdGltZSBib21iISBJdCdzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gdHJpZ2dlciBhIGNyYXNoIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgcG9zc2libHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBldmVuIGFuIGVuZGxlc3MgbG9vcC5cblxuVGhhbmtmdWxseSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUsIEtlcm5lbCBBZGRyZXNzIFNBTml0aXplciAoS0FTQU4pIG9yIGV2ZW4gc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBjcmFzaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpcyB1bm5lY2Vzc2FyeSwgYXMgd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZmxhZyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBhbmQgSSdsbCBsYXkgb3V0IHRoaXMgcmF0aW9uYWxlIGNsZWFybHkuIFRoaXMgaXMgYWxsIGFib3V0IHBpbnBvaW50aW5nIGEgbG9naWMgYnVnIHRoYXQgcmVzdWx0cyBpbiBhIGJhZCBydW5saXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzU5LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjQ3Ljg3MTYzOTA0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow464wp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 07:28:12 +0000 UTC FinishedAt: 2026-08-19 07:30:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "df7dce2090342170b7643d36f694204cae7792a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "df7dce2090342170b7643d36f694204cae7792a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "6a418438-7234-4744-b150-9bd2917b4eab" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_mapping_pairs_decompress" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSB3aGVyZSBhbiBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5IGluIGEgbm9uLXJlc2lkZW50IGF0dHJpYnV0ZSBjb3VsZCBiZSBpbXByb3Blcmx5IHByb2Nlc3NlZC4gVGhlIGZpZWxkcyBiZWluZyBhY2Nlc3NlZCAoYGhpZ2hlc3RfdmNuYCwgYGFsbG9jYXRlZF9zaXplYCwgYGRhdGFfc2l6ZWAsIGBpbml0aWFsaXplZF9zaXplYCkgYXJlIHBhcnQgb2YgdGhlIG9uLWRpc2sgYGF0dHJfcmVjb3JkYCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gcmVhZCBmcm9tIHRoZSBkaXNrL2ltYWdlLiBUaGUgYnVnIGxpa2VseSBsZWFkcyB0byBhbiBlbXB0eSBvciBpbnZhbGlkIHJ1bmxpc3QsIGNhdXNpbmcgYSBjcmFzaCAoc3VjaCBhcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdXQtb2YtYm91bmRzIGFjY2VzcykgbGF0ZXIgaW4gdGhlIGV4ZWN1dGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyYmYzYWM4YjZiYTNhYmVkNzNkYzEwNWU1YTJmZjFjYjNlZWRlNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL3J1bmxpc3QuYyBiL2ZzL250ZnMvcnVubGlzdC5jXG5pbmRleCA5ZWFhZGJjMGVmNDdmLi5jNzc1YjdkZjA3NGY4IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9ydW5saXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvcnVubGlzdC5jXG5AQCAtNzYzLDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0LyogU3RhcnQgYXQgdmNuID0gbG93ZXN0X3ZjbiBhbmQgbGNuIDAuICovXG4gXHR2Y24gPSBsb3dlc3RfdmNuO1xuIFx0bGNuID0gMDtcbiYjNDM7XHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIFx0LyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xuIFx0YnVmID0gKHU4ICopYXR0ciAmIzQzO1xuIFx0XHRsZTE2X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTtcbkBAIC03NzIsNiAmIzQzOzc3MywyMyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXkgaXMgdmFsaWQgb25seSBmb3IgYSB6ZXJvLWxlbmd0aFxuJiM0MztcdCAqIGF0dHJpYnV0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChkZWx0YXhjbiAhPSAtMSB8fFxuJiM0MztcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcbiYjNDM7XHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKSB8fFxuJiM0MztcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHtcbiYjNDM7XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0IFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdC1cdTAwM2VybCkge1xuJiM0MztcdFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVx1MDAzZWNvdW50O1xuJiM0MztcdFx0cmV0dXJuIG9sZF9ydW5saXN0LVx1MDAzZXJsO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBDdXJyZW50IHBvc2l0aW9uIGluIHJ1bmxpc3QgYXJyYXkuICovXG4gXHRybHBvcyA9IDA7XG4gXHQvKiBBbGxvY2F0ZSBmaXJzdCBwYWdlIGFuZCBzZXQgY3VycmVudCBydW5saXN0IHNpemUgdG8gb25lIHBhZ2UuICovXG5AQCAtOTQyLDcgJiM0Mzs5NjAsNiBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0ICogSWYgdGhlcmUgaXMgYSBoaWdoZXN0X3ZjbiBzcGVjaWZpZWQsIGl0IG11c3QgYmUgZXF1YWwgdG8gdGhlIGZpbmFsXG4gXHQgKiB2Y24gaW4gdGhlIHJ1bmxpc3QgLSAxLCBvciBzb21ldGhpbmcgaGFzIGdvbmUgYmFkbHkgd3JvbmcuXG4gXHQgKi9cbi1cdGRlbHRheGNuID0gbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XG4gXHRpZiAodW5saWtlbHkoZGVsdGF4Y24gXHUwMDI2XHUwMDI2IHZjbiAtIDEgIT0gZGVsdGF4Y24pKSB7XG4gbXBhX2VycjpcbiBcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0NvcnJ1cHQgbWFwcGluZyBwYWlycyBhcnJheSBpbiBub24tcmVzaWRlbnQgYXR0cmlidXRlLlwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyYmYzYWM4YjZiYTNhYmVkNzNkYzEwNWU1YTJmZjFjYjNlZWRlNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvcnVubGlzdC5jIGIvZnMvbnRmcy9ydW5saXN0LmMKaW5kZXggOWVhYWRiYzBlZjQ3Zi4uYzc3NWI3ZGYwNzRmOCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9ydW5saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9ydW5saXN0LmMKQEAgLTc2Myw2ICYjNDM7NzYzLDcgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICoKIAkvKiBTdGFydCBhdCB2Y24gPSBsb3dlc3RfdmNuIGFuZCBsY24gMC4gKi8KIAl2Y24gPSBsb3dlc3RfdmNuOwogCWxjbiA9IDA7CiYjNDM7CWRlbHRheGNuID0gbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pOwogCS8qIEdldCBzdGFydCBvZiB0aGUgbWFwcGluZyBwYWlycyBhcnJheS4gKi8KIAlidWYgPSAodTggKilhdHRyICYjNDM7CiAJCWxlMTZfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTsKQEAgLTc3Miw2ICYjNDM7NzczLDIzIEBAIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqCiAJCXJldHVybiBFUlJfUFRSKC1FSU8pOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGgKJiM0MzsJICogYXR0cmlidXRlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZGVsdGF4Y24gIT0gLTEgfHwKJiM0MzsJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHwKJiM0MzsJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8CiYjNDM7CSAgICAgbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7CiYjNDM7CQludGZzX2Vycm9yKHZvbC0mZ3Q7c2IsICYjMzQ7SW52YWxpZCBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LiYjMzQ7KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU8pOwomIzQzOwl9CiYjNDM7CWlmICghdmNuICZhbXA7JmFtcDsgISpidWYgJmFtcDsmYW1wOyBvbGRfcnVubGlzdCAmYW1wOyZhbXA7IG9sZF9ydW5saXN0LSZndDtybCkgewomIzQzOwkJKm5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LSZndDtjb3VudDsKJiM0MzsJCXJldHVybiBvbGRfcnVubGlzdC0mZ3Q7cmw7CiYjNDM7CX0KJiM0MzsKIAkvKiBDdXJyZW50IHBvc2l0aW9uIGluIHJ1bmxpc3QgYXJyYXkuICovCiAJcmxwb3MgPSAwOwogCS8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi8KQEAgLTk0Miw3ICYjNDM7OTYwLDYgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICoKIAkgKiBJZiB0aGVyZSBpcyBhIGhpZ2hlc3RfdmNuIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmluYWwKIAkgKiB2Y24gaW4gdGhlIHJ1bmxpc3QgLSAxLCBvciBzb21ldGhpbmcgaGFzIGdvbmUgYmFkbHkgd3JvbmcuCiAJICovCi0JZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7CiAJaWYgKHVubGlrZWx5KGRlbHRheGNuICZhbXA7JmFtcDsgdmNuIC0gMSAhPSBkZWx0YXhjbikpIHsKIG1wYV9lcnI6CiAJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtDb3JydXB0IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gbm9uLXJlc2lkZW50IGF0dHJpYnV0ZS4mIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy9udGZzL3J1bmxpc3QuY2AsIHNwZWNpZmljYWxseSB0aGUgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBjaGVjayBmb3IgYW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSB3b25kZXIgd2h5IHRoZXkgYWRkZWQgdGhhdC4gRW1wdHkgYXJyYXkgY2hlY2tzIGFyZSB1c3VhbGx5IGFib3V0IHByZXZlbnRpbmcgZWRnZS1jYXNlIGVycm9ycyBvciBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYnV0IHdpdGhvdXQga25vd2luZyB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGFyZCB0byBzYXkgZGVmaW5pdGl2ZWx5LgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgTlRGUyBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgcGVlayBpbiBgZnMvbnRmcy9LY29uZmlnYCB0byB2ZXJpZnkgYENPTkZJR19OVEZTX0ZTYCBpcyBlbmFibGVkLiBNYWtlcyBzdXJlIGl0IGlzIGV2ZW4gY29tcGlsZWQgaW4uCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRvIGdhaW4gYSBiZXR0ZXIgYXBwcmVjaWF0aW9uIGZvciBpdHMgaW1wYWN0IGFuZCBob3cgdGhpcyBuZXcgY2hlY2sgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggZGF0YSB0aGF0IG1heSBoYXZlIGJlZW4gaW50ZW50aW9uYWxseSBjb3JydXB0ZWQuIFRoYXQgY291bGQgZXhwbGFpbiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9ODY9aW50IG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKHN0cnVjdCBudGZzX2lub2RlICpuaSwgczY0IHZjbiwgc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xODctXHQgKiB3ZSB0aGVuIHRyeSB0byBtYXAgdGhlIGFscmVhZHkgbWFwcGVkIHJ1bmxpc3QgZnJhZ21lbnQgYW5kXG5mcy9udGZzL2F0dHJpYi5jOjE4ODpcdCAqIG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKCkgZmFpbHMuXG5mcy9udGZzL2F0dHJpYi5jLTE4OS1cdCAqL1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMTk0LVx0fVxuZnMvbnRmcy9hdHRyaWIuYzoxOTU6XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVx1MDAzZXZvbCwgYSwgXHUwMDI2bmktXHUwMDNlcnVubGlzdCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbmZzL250ZnMvYXR0cmliLmMtMTk2LVx0aWYgKElTX0VSUihybCkpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0yNjUyPWludCBudGZzX2F0dHJfcmVjb3JkX3JtKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KVxuLS1cbmZzL250ZnMvYXR0cmliLmMtMjczMC1cbmZzL250ZnMvYXR0cmliLmM6MjczMTpcdFx0XHRhbF9ybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGJhc2VfbmktXHUwMDNldm9sLFxuZnMvbnRmcy9hdHRyaWIuYy0yNzMyLVx0XHRcdFx0XHRjdHgtXHUwMDNlYXR0ciwgTlVMTCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTMyNzI9aW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0zMzE5LVx0XHRcdC8qIERlY29kZSB0aGUgcnVubGlzdC4gKi9cbmZzL250ZnMvYXR0cmliLmM6MzMyMDpcdFx0XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVx1MDAzZXZvbCwgYSwgXHUwMDI2bmktXHUwMDNlcnVubGlzdCxcbmZzL250ZnMvYXR0cmliLmMtMzMyMS1cdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm5ld19ybF9jb3VudCk7XG4tLVxuZnMvbnRmcy9pbm9kZS5jPTMyMz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMvaW5vZGUuYy0zNTEtXG5mcy9udGZzL2lub2RlLmM6MzUyOlx0XHRcdHJsID0gbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MobmktXHUwMDNldm9sLCBhY3R4LVx1MDAzZWF0dHIsIE5VTEwsXG5mcy9udGZzL2lub2RlLmMtMzUzLVx0XHRcdFx0XHRcdTAwMjZuZXdfcmxfY291bnQpO1xuLS1cbmZzL250ZnMvaW5vZGUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbWZ0X25pX3J1bmxpc3RfbG9ja19rZXksIG1mdF9uaV9tcmVjX2xvY2tfa2V5O1xuLS1cbmZzL250ZnMvaW5vZGUuYy0xODI5LSAqIGVsc2UgYW5kIGl0ZXJhdGluZyB1c2luZyBudGZzX2F0dHJfbG9va3VwKCREQVRBKSBvdmVyIGFsbCBleHRlbnRzLiAgQXMgZWFjaFxuZnMvbnRmcy9pbm9kZS5jOjE4MzA6ICogZXh0ZW50IGlzIGZvdW5kLCB3ZSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcygpIGluY2x1ZGluZyB0aGUgaW1wbGllZFxuZnMvbnRmcy9pbm9kZS5jLTE4MzEtICogbnRmc19ydW5saXN0c19tZXJnZSgpLiAgRWFjaCBzdGVwIG9mIHRoZSBpdGVyYXRpb24gbmVjZXNzYXJpbHkgcHJvdmlkZXNcbi0tXG5mcy9udGZzL2lub2RlLmM9MTgzNz1pbnQgbnRmc19yZWFkX2lub2RlX21vdW50KHN0cnVjdCBpbm9kZSAqdmkpXG4tLVxuZnMvbnRmcy9pbm9kZS5jLTE5ODctXG5mcy9udGZzL2lub2RlLmM6MTk4ODpcdFx0XHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKHZvbCwgYSwgTlVMTCwgXHUwMDI2bmV3X3JsX2NvdW50KTtcbmZzL250ZnMvaW5vZGUuYy0xOTg5LVx0XHRcdGlmIChJU19FUlIocmwpKSB7XG4tLVxuZnMvbnRmcy9pbm9kZS5jLTIwODQtXHRcdCAqL1xuZnMvbnRmcy9pbm9kZS5jOjIwODU6XHRcdG5ybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKHZvbCwgYSwgXHUwMDI2bmktXHUwMDNlcnVubGlzdCxcbmZzL250ZnMvaW5vZGUuYy0yMDg2LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZuZXdfcmxfY291bnQpO1xuLS1cbmZzL250ZnMvaW5vZGUuYy0yMDg4LVx0XHRcdG50ZnNfZXJyb3Ioc2IsXG5mcy9udGZzL2lub2RlLmM6MjA4OTpcdFx0XHRcdFwmIzM0O250ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKCkgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlbGQuXCYjMzQ7LFxuZnMvbnRmcy9pbm9kZS5jLTIwOTAtXHRcdFx0XHRQVFJfRVJSKG5ybCkpO1xuLS1cbmZzL250ZnMvcnVubGlzdC5jPTUyMj1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXG4tLVxuZnMvbnRmcy9ydW5saXN0LmMtNzE3LS8qXG5mcy9udGZzL3J1bmxpc3QuYzo3MTg6ICogbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MgLSBjb252ZXJ0IG1hcHBpbmcgcGFpcnMgYXJyYXkgdG8gcnVubGlzdFxuZnMvbnRmcy9ydW5saXN0LmMtNzE5LSAqIEB2b2w6IG50ZnMgdm9sdW1lXG4tLVxuZnMvbnRmcy9ydW5saXN0LmMtNzM0LSAqL1xuZnMvbnRmcy9ydW5saXN0LmM6NzM1OnN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9ydW5saXN0LmMtNzM2LVx0XHRjb25zdCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIsIHN0cnVjdCBydW5saXN0ICpvbGRfcnVubGlzdCxcbi0tXG5mcy9udGZzL3J1bmxpc3QuaD02OD1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXG4tLVxuZnMvbnRmcy9ydW5saXN0LmgtNzAtXHRcdHNpemVfdCAqbmV3X3JsX2NvdW50KTtcbmZzL250ZnMvcnVubGlzdC5oOjcxOnN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9ydW5saXN0LmgtNzItXHRcdGNvbnN0IHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0ciwgc3RydWN0IHJ1bmxpc3QgKm9sZF9ydW5saXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgTlRGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2Agd2l0aGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgcHJldHR5IGNydWNpYWw7IGl0JiMzOTtzIHVzZWQgYnkgc2V2ZXJhbCBrZXkgTlRGUyBmdW5jdGlvbnM6IGBudGZzX21hcF9ydW5saXN0X25vbG9ja2AsIGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCwgYW5kIGBudGZzX3JlYWRfaW5vZGVfbW91bnRgLiBUaGVzZSBhcmUgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTlRGUyBpbXBsZW1lbnRhdGlvbiwgc28gYW55IGNoYW5nZSBoZXJlIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjaGVjayBmb3IgYW4gZW1wdHkgYG1hcHBpbmdfcGFpcnNgIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3Igd2hhdCAqbG9va3MqIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSDigJMgbGlrZWx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBhIHNpbWlsYXIgdHlwZSBvZiBidWcgd2hlbiB0aGUgY29kZSYjMzk7cyB0cnlpbmcgdG8gcGFyc2Ugc29tZXRoaW5nIHRoYXQgaXNuJiMzOTt0IGFjdHVhbGx5IHRoZXJlLiBBIHNpbXBsZSBjaGVjayBsaWtlIHRoaXMgY291bGQgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgZG93biB0aGUgcm9hZC4KCkdpdmVuIHRoZSBzY29wZSBhbmQgdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aG9zZSBmdW5jdGlvbnMsIEkgdGhpbmsgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBhZGRpdGlvbiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGV4cG9zZSBhbnkgb3RoZXIgdnVsbmVyYWJpbGl0aWVzIHVuZGVyIHVuZXhwZWN0ZWQgaW5wdXRzLgoKQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHBhdGgsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZy4gSSBiZWxpZXZlIGBDT05GSUdfTlRGU19GU2AgaXMgdGhlIHJlbGV2YW50IG9wdGlvbiBoZXJlLiBJJiMzOTtsbCBtYWtlIHN1cmUgaXQmIzM5O3MgZW5hYmxlZCB0byBtYWtlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSBjb2RlIGluIHRoZSBwcm9wZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5URlMgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGNydWNpYWwgTlRGUyBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgYENPTkZJR19OVEZTX0ZTYCBpcyBzZXQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggZG91YmxlLWNoZWNraW5nLiBOb3csIHdhaXQgYSBtaW51dGUuLi4gaXMgdGhlcmUgYW55IG90aGVyIE5URlMtcmVsYXRlZCBjb25maWd1cmF0aW9uIHRoYXQgSSBuZWVkIHRvIGNvbnNpZGVyPyBBaCwgeWVzLCB0aGVyZSYjMzk7cyBgTlRGUzNfRlNgLCBidXQgaXNuJiMzOTt0IHRoYXQgcGFydCBvZiB0aGUgbGVnYWN5IE5URlMgZHJpdmVyIGluIGBmcy9udGZzL2A/IFllcywgSSYjMzk7bSBwcmV0dHkgc3VyZSBgZnMvbnRmcy9gIGlzIHdoZXJlIHRoZSBvbGRlciBjb2RlIHJlc2lkZXMuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGlzIHN5c3RlbSBidWlsZCwgbGV0JiMzOTtzIHZlcmlmeSBhZ2FpbiB0aGF0IGBOVEZTX0ZTYCBpbiBpc29sYXRpb24gcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG5mcy9udGZzL0tjb25maWctMTQtXHRib29sIFwmIzM0O05URlMgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbmZzL250ZnMvS2NvbmZpZzoxNTpcdGRlcGVuZHMgb24gTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTE2LVx0aGVscFxuLS1cbmZzL250ZnMvS2NvbmZpZz0zNT1jb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuZnMvbnRmcy9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMzgtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0IGxvb2tzIGxpa2UgYE5URlNfRlNgIHJlbGllcyBvbiBgQkxPQ0tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZGVwZW5kZW5jeS4gVG8gZ2V0IGEgaGFuZGxlIG9uIGl0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciBOVEZTLCBzcGVjaWZpY2FsbHkgYGZzL250ZnMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhvc2UgZGVwZW5kZW5jeSBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBmcy9udGZzL0tjb25maWdgIHJldmVhbHMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBOVEZTX0ZTYCBhbmQgYEJMT0NLYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfREVCVUdcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqCgpPa2F5LCB3YWl0IGEgbWludXRlLi4uIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGBOVEZTX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBoYWQgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgQkxPQ0tgLCBidXQgbm93IEkmIzM5O20gc2Vjb25kLWd1ZXNzaW5nIG15c2VsZi4gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBJdCYjMzk7cyB1bnVzdWFsIGZvciBhIGZpbGVzeXN0ZW0gbm90IHRvIGRlcGVuZCBvbiBhIGJsb2NrIGRldmljZSBpbiBzb21lIHdheS4KCkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBxdWlja2x5LiBMZXQgbWUgcHVsbCB1cCBgZnMvS2NvbmZpZ2AuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBpdCB0byBzZWUgaWYgYGZzL250ZnMvS2NvbmZpZ2AgaXMgaW5jbHVkZWQgY29uZGl0aW9uYWxseSDigJMgcGVyaGFwcyBpdCYjMzk7cyBuZXN0ZWQgdW5kZXIgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGluZGlyZWN0bHkgaW1wbGllcyBgQkxPQ0tgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbW9yZSBjb21wbGV4IGRlcGVuZGVuY3kgdHJlZSB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZWQuIFRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCB0byB0cmFjZSB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7ZnMvbnRmcy9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTE1ND1zb3VyY2UgXCYjMzQ7ZnMvZXhmYXQvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZzoxNTU6c291cmNlIFwmIzM0O2ZzL250ZnMvS2NvbmZpZ1wmIzM0O1xuZnMvS2NvbmZpZy0xNTYtc291cmNlIFwmIzM0O2ZzL250ZnMzL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA3NQoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTlRGUyBDb21wcmVzc2lvbioqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBOVEZTX0ZTYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZTsgdGhhdCYjMzk7cyBhbGwgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBub3cuIE5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gZmxhZ2dlZCBhcyBtb2RpZmllZCBpcyBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgLiBHb29kLiBOb3csIGxldCBtZSBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrYCwgYG50ZnNfYXR0cl9yZWNvcmRfcm1gLCBgbnRmc19hdHRyX21hcF93aG9sZV9ydW5saXN0YCwgYG50ZnNfbm9uX3Jlc2lkZW50X2RlYWxsb2NfY2x1c3RlcnNgLCBhbmQgYG50ZnNfcmVhZF9pbm9kZV9tb3VudGAgYXJlIGFsbCBjb25zdW1lcnMgb2YgdGhpcyBkZWNvbXByZXNzaW9uIGZ1bmN0aW9uLiBUaGF0IGdpdmVzIG1lIGEgY2xlYXIgcGF0aCBmb3J3YXJkOyBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhvcm91Z2hseSBhbmFseXppbmcgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBpdHNlbGYgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aGluIHRob3NlIHNwZWNpZmljIGNhbGwgY29udGV4dHMuIFRoaXMgbmFycm93ZWQgc2NvcGUgd2lsbCBtYWtlIGZvciBhbiBlZmZpY2llbnQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTlRGUyBmdW5jdGlvbiBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIHRvIGFkZCBhIGNoZWNrIGZvciBhbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIG9yIG1hbGljaW91cyBOVEZTIGltYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gd2hlcmUgYW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSBpbiBhIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUgY291bGQgYmUgaW1wcm9wZXJseSBwcm9jZXNzZWQuIFRoZSBmaWVsZHMgYmVpbmcgYWNjZXNzZWQgKGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBgaW5pdGlhbGl6ZWRfc2l6ZWApIGFyZSBwYXJ0IG9mIHRoZSBvbi1kaXNrIGBhdHRyX3JlY29yZGAgc3RydWN0dXJlLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlYWQgZnJvbSB0aGUgZGlzay9pbWFnZS4gVGhlIGJ1ZyBsaWtlbHkgbGVhZHMgdG8gYW4gZW1wdHkgb3IgaW52YWxpZCBydW5saXN0LCBjYXVzaW5nIGEgY3Jhc2ggKHN1Y2ggYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGxhdGVyIGluIHRoZSBleGVjdXRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJiZjNhYzhiNmJhM2FiZWQ3M2RjMTA1ZTVhMmZmMWNiM2VlZGU1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDA3OjI5OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuYwppbmRleCA5ZWFhZGJjMGVmNDdmLi5jNzc1YjdkZjA3NGY4IDEwMDY0NAotLS0gYS9mcy9udGZzL3J1bmxpc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL3J1bmxpc3QuYwpAQCAtNzYzLDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKgogCS8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqLwogCXZjbiA9IGxvd2VzdF92Y247CiAJbGNuID0gMDsKJiM0MzsJZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7CiAJLyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqLwogCWJ1ZiA9ICh1OCAqKWF0dHIgJiM0MzsKIAkJbGUxNl90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpOwpAQCAtNzcyLDYgJiM0Mzs3NzMsMjMgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICoKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIEFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXkgaXMgdmFsaWQgb25seSBmb3IgYSB6ZXJvLWxlbmd0aAomIzQzOwkgKiBhdHRyaWJ1dGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXZjbiAmYW1wOyZhbXA7ICEqYnVmICZhbXA7JmFtcDsKJiM0MzsJICAgIChkZWx0YXhjbiAhPSAtMSB8fAomIzQzOwkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fAomIzQzOwkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHwKJiM0MzsJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHsKJiM0MzsJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuJiMzNDspOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiYjNDM7CX0KJiM0MzsJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7IG9sZF9ydW5saXN0ICZhbXA7JmFtcDsgb2xkX3J1bmxpc3QtJmd0O3JsKSB7CiYjNDM7CQkqbmV3X3JsX2NvdW50ID0gb2xkX3J1bmxpc3QtJmd0O2NvdW50OwomIzQzOwkJcmV0dXJuIG9sZF9ydW5saXN0LSZndDtybDsKJiM0MzsJfQomIzQzOwogCS8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi8KIAlybHBvcyA9IDA7CiAJLyogQWxsb2NhdGUgZmlyc3QgcGFnZSBhbmQgc2V0IGN1cnJlbnQgcnVubGlzdCBzaXplIHRvIG9uZSBwYWdlLiAqLwpAQCAtOTQyLDcgJiM0Mzs5NjAsNiBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKgogCSAqIElmIHRoZXJlIGlzIGEgaGlnaGVzdF92Y24gc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBmaW5hbAogCSAqIHZjbiBpbiB0aGUgcnVubGlzdCAtIDEsIG9yIHNvbWV0aGluZyBoYXMgZ29uZSBiYWRseSB3cm9uZy4KIAkgKi8KLQlkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTsKIAlpZiAodW5saWtlbHkoZGVsdGF4Y24gJmFtcDsmYW1wOyB2Y24gLSAxICE9IGRlbHRheGNuKSkgewogbXBhX2VycjoKIAkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0NvcnJ1cHQgbWFwcGluZyBwYWlycyBhcnJheSBpbiBub24tcmVzaWRlbnQgYXR0cmlidXRlLiYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBSdW5saXN0IERlY29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgZnVuY3Rpb24gd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGZzL250ZnMvcnVubGlzdC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXlzIGFyZSBoYW5kbGVkLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHJlbG9jYXRpb24gb2YgdGhlIGBkZWx0YXhjbmAgaW5pdGlhbGl6YXRpb246IGBkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtgLiBJbnRlcmVzdGluZywgbW92aW5nIGl0IHVwLiBJIHdvbmRlciBpZiB0aGlzIHJlbGF0ZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBzb21ldGhpbmcgSSYjMzk7bSBhbHdheXMgd2FyeSBvZi4KClRoZSBhZGRlZCBjaGVjayBpcyBjcml0aWNhbDoKCmBgYGMKCS8qCgkgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGgKCSAqIGF0dHJpYnV0ZS4KCSAqLwoJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7CgkgICAgKGRlbHRheGNuICE9IC0xIHx8CgkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fAoJICAgICBsZTY0X3RvX2NwdShhdHRyLSZndDtkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8CgkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmluaXRpYWxpemVkX3NpemUpKSkgewoJCW50ZnNfZXJyb3Iodm9sLSZndDtzYiwgJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuJiMzNDspOwoJCXJldHVybiBFUlJfUFRSKC1FSU8pOwoJfQoJaWYgKCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZiAmYW1wOyZhbXA7IG9sZF9ydW5saXN0ICZhbXA7JmFtcDsgb2xkX3J1bmxpc3QtJmd0O3JsKSB7CgkJKm5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LSZndDtjb3VudDsKCQlyZXR1cm4gb2xkX3J1bmxpc3QtJmd0O3JsOwoJfQpgYGAKClRoaXMgc2VlbXMgdG8gYmUgYSBkZWZlbnNpdmUgbWVhc3VyZS4gQW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSAoYCEqYnVmYCkgc2hvdWxkIG9ubHkgYmUgdmFsaWQgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgemVybyBsZW5ndGguIFRoZSBjaGVjayBleGFtaW5lcyBpZiBgIXZjbmAgYW5kIGAhKmJ1ZmAgYXJlIHNpbXVsdGFuZW91c2x5IHRydWUsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNvbmRpdGlvbnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkICYjMzQ7emVybyBsZW5ndGgmIzM0Oy4gTXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgLSB0aGlzIHNtZWxscyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBoYW5kbGluZyBlZGdlIGNhc2VzLiBMb29raW5nIGF0IHRoZSBjb25kaXRpb25zIGl0IGNoZWNrcyB3aGV0aGVyIHRoZSBgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgb3IgYGluaXRpYWxpemVkX3NpemVgIGFyZSBub24temVyby4gIFRoZXNlIGFyZSBhbGwgdmFsdWVzIHJlYWQgZnJvbSB0aGUgb24tZGlzayBOVEZTIG1ldGFkYXRhLiBXaGlsZSB0aGlzIGRhdGEgKnNob3VsZCogYmUgaW5pdGlhbGl6ZWQsIHRoZSBmaWxlc3lzdGVtIGNvdWxkIGJlIGNvcnJ1cHQsIG9yIGV2ZW4gbWFsaWNpb3VzbHkgY3JhZnRlZC4gVGhlIGNvZGUgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgb3Igc2ltaWxhciBwcm9ibGVtIGlmIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5IGlzIGVtcHR5IGluIGFuIHVuZXhwZWN0ZWQgc2NlbmFyaW8uIElmIGAhKmJ1ZmAgaXMgdHJ1ZSwgdGhlIG1hcHBpbmcgcGFpcnMgYXJyYXkgaXMgZW1wdHkuIFRoZSBgISpidWZgIGNvbmRpdGlvbiBtaWdodCBieXBhc3MgdGhlIGxvb3AgdGhhdCBwYXJzZXMgdGhlIGFycmF5LCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIEl0IHNlZW1zIHRoYXQgdGhpcyBjb2RlIG1heSBub3QgZXhlY3V0ZSB1bmRlciB0aGUgY29uZGl0aW9uIGAhKmJ1ZmAsIHdoaWNoIG1pZ2h0IGNhdXNlIGFuIGVtcHR5IHJ1bmxpc3QuIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaW4gc29tZSBlZGdlIGNhc2VzIGFuIG9sZGVyIGBydW5saXN0YCBtaWdodCBiZSByZXR1cm5lZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgcmV0dXJuaW5nIGFuIG9sZCBydW5saXN0IHdoZW4gYCF2Y24gJmFtcDsmYW1wOyAhKmJ1ZmAuIE5lZWQgdG8gY2hlY2sgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9ydW5saXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9ydW5saXN0LmM9NTIyPXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfcnVubGlzdHNfbWVyZ2Uoc3RydWN0IHJ1bmxpc3QgKmRfcnVubGlzdCxcbi0tXG5mcy9udGZzL3J1bmxpc3QuYy03MTctLypcbmZzL250ZnMvcnVubGlzdC5jOjcxODogKiBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyAtIGNvbnZlcnQgbWFwcGluZyBwYWlycyBhcnJheSB0byBydW5saXN0XG5mcy9udGZzL3J1bmxpc3QuYy03MTktICogQHZvbDogbnRmcyB2b2x1bWVcbi0tXG5mcy9udGZzL3J1bmxpc3QuYy03MzQtICovXG5mcy9udGZzL3J1bmxpc3QuYzo3MzU6c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG5mcy9udGZzL3J1bmxpc3QuYy03MzYtXHRcdGNvbnN0IHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0ciwgc3RydWN0IHJ1bmxpc3QgKm9sZF9ydW5saXN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBSdW5saXN0IENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIE5URlMgZHJpdmVyIGhhbmRsZXMgcnVubGlzdHMsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3MzUgaW4gYGZzL250ZnMvcnVubGlzdC5jYC4gVGhhdCBhcmVhIHByb2JhYmx5IGRlYWxzIHdpdGggYSBjcml0aWNhbCBhc3BlY3Qgb2YgaG93IGZpbGUgZGF0YSBpcyBtYXBwZWQgb24gdGhlIGRpc2suIEkgc3VzcGVjdCBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBldmVuIHJ1bmxpc3QgY29tcHJlc3Npb24vZXhwYW5zaW9uLiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiBOVEZTJiMzOTtzIGZyYWdtZW50ZWQgZmlsZSBzeXN0ZW0gYW5kIGl0cyB1c2Ugb2YgcnVubGlzdHMsIHRoaXMgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyaXNlISBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvcnVubGlzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzM1Olx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG4gNzM2Olx0XHRcdGNvbnN0IHN0cnVjdCBhdHRyX3JlY29yZCAqYXR0ciwgc3RydWN0IHJ1bmxpc3QgKm9sZF9ydW5saXN0LFxuIDczNzpcdFx0XHRzaXplX3QgKm5ld19ybF9jb3VudClcbiA3Mzg6XHR7XG4gNzM5Olx0XHRzNjQgdmNuO1x0XHQvKiBDdXJyZW50IHZjbi4gKi9cbiA3NDA6XHRcdHM2NCBsY247XHRcdC8qIEN1cnJlbnQgbGNuLiAqL1xuIDc0MTpcdFx0czY0IGRlbHRheGNuO1x0XHQvKiBDaGFuZ2UgaW4gW3ZsXWNuLiAqL1xuIDc0MjpcdFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwsICpuZXdfcmw7XHQvKiBUaGUgb3V0cHV0IHJ1bmxpc3QuICovXG4gNzQzOlx0XHR1OCAqYnVmO1x0XHQvKiBDdXJyZW50IHBvc2l0aW9uIGluIG1hcHBpbmcgcGFpcnMgYXJyYXkuICovXG4gNzQ0Olx0XHR1OCAqYXR0cl9lbmQ7XHRcdC8qIEVuZCBvZiBhdHRyaWJ1dGUuICovXG4gNzQ1Olx0XHRpbnQgcmxzaXplO1x0XHQvKiBTaXplIG9mIHJ1bmxpc3QgYnVmZmVyLiAqL1xuIDc0NjpcdFx0dTE2IHJscG9zO1x0XHQvKiBDdXJyZW50IHJ1bmxpc3QgcG9zaXRpb24gaW4gdW5pdHMgb2Ygc3RydWN0IHJ1bmxpc3RfZWxlbWVudHMuICovXG4gNzQ3Olx0XHR1OCBiO1x0XHRcdC8qIEN1cnJlbnQgYnl0ZSBvZmZzZXQgaW4gYnVmLiAqL1xuIDc0ODpcdFx0dTY0IGxvd2VzdF92Y247XHRcdC8qIFJhdyBvbi1kaXNrIGxvd2VzdF92Y24uICovXG4gNzQ5Olx0XG4gNzUwOlx0I2lmZGVmIERFQlVHXG4gNzUxOlx0XHQvKiBNYWtlIHN1cmUgYXR0ciBleGlzdHMgYW5kIGlzIG5vbi1yZXNpZGVudC4gKi9cbiA3NTI6XHRcdGlmICghYXR0ciB8fCAhYXR0ci1cdTAwM2Vub25fcmVzaWRlbnQpIHtcbiA3NTM6XHRcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwmIzM0O0ludmFsaWQgYXJndW1lbnRzLlwmIzM0Oyk7XG4gNzU0Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDc1NTpcdFx0fVxuIDc1NjpcdCNlbmRpZlxuIDc1NzpcdFx0bG93ZXN0X3ZjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQubG93ZXN0X3Zjbik7XG4gNzU4Olx0XHQvKiBWYWxpZGF0ZSBsb3dlc3RfdmNuIGZyb20gb24tZGlzayBtZXRhZGF0YSB0byBlbnN1cmUgaXQgaXMgc2FuZS4gKi9cbiA3NTk6XHRcdGlmIChvdmVyZmxvd3NfdHlwZShsb3dlc3RfdmNuLCB2Y24pKSB7XG4gNzYwOlx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtJbnZhbGlkIGxvd2VzdF92Y24gaW4gbWFwcGluZyBwYWlycy5cJiMzNDspO1xuIDc2MTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiA3NjI6XHRcdH1cbiA3NjM6XHRcdC8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqL1xuIDc2NDpcdFx0dmNuID0gbG93ZXN0X3ZjbjtcbiA3NjU6XHRcdGxjbiA9IDA7XG4gNzY2Olx0XHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIDc2NzpcdFx0LyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xuIDc2ODpcdFx0YnVmID0gKHU4ICopYXR0ciAmIzQzO1xuIDc2OTpcdFx0XHRsZTE2X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTtcbiA3NzA6XHRcdGF0dHJfZW5kID0gKHU4ICopYXR0ciAmIzQzOyBsZTMyX3RvX2NwdShhdHRyLVx1MDAzZWxlbmd0aCk7XG4gNzcxOlx0XHRpZiAodW5saWtlbHkoYnVmIFx1MDAzYyAodTggKilhdHRyIHx8IGJ1ZiBcdTAwM2U9IGF0dHJfZW5kKSkge1xuIDc3MjpcdFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCYjMzQ7Q29ycnVwdCBhdHRyaWJ1dGUuXCYjMzQ7KTtcbiA3NzM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gNzc0Olx0XHR9XG4gNzc1Olx0XG4gNzc2Olx0XHQvKlxuIDc3NzpcdFx0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXG4gNzc4Olx0XHQgKiBhdHRyaWJ1dGUuXG4gNzc5Olx0XHQgKi9cbiA3ODA6XHRcdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjZcbiA3ODE6XHRcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcbiA3ODI6XHRcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcbiA3ODM6XHRcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XG4gNzg0Olx0XHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XG4gNzg1Olx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcJiMzNDtJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXCYjMzQ7KTtcbiA3ODY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gNzg3Olx0XHR9XG4gNzg4Olx0XHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0IFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdC1cdTAwM2VybCkge1xuIDc4OTpcdFx0XHQqbmV3X3JsX2NvdW50ID0gb2xkX3J1bmxpc3QtXHUwMDNlY291bnQ7XG4gNzkwOlx0XHRcdHJldHVybiBvbGRfcnVubGlzdC1cdTAwM2VybDtcbiA3OTE6XHRcdH1cbiA3OTI6XHRcbiA3OTM6XHRcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cbiA3OTQ6XHRcdHJscG9zID0gMDtcbiA3OTU6XHRcdC8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi9cbiA3OTY6XHRcdHJsID0ga3Z6YWxsb2MocmxzaXplID0gUEFHRV9TSVpFLCBHRlBfTk9GUyk7XG4gNzk3Olx0XHRpZiAodW5saWtlbHkoIXJsKSlcbiA3OTg6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gNzk5Olx0XHQvKiBJbnNlcnQgdW5tYXBwZWQgc3RhcnRpbmcgZWxlbWVudCBpZiBuZWNlc3NhcnkuICovXG4gODAwOlx0XHRpZiAodmNuKSB7XG4gODAxOlx0XHRcdHJsLVx1MDAzZXZjbiA9IDA7XG4gODAyOlx0XHRcdHJsLVx1MDAzZWxjbiA9IExDTl9STF9OT1RfTUFQUEVEO1xuIDgwMzpcdFx0XHRybC1cdTAwM2VsZW5ndGggPSB2Y247XG4gODA0Olx0XHRcdHJscG9zJiM0MzsmIzQzOztcbiA4MDU6XHRcdH1cbiA4MDY6XHRcdHdoaWxlIChidWYgXHUwMDNjIGF0dHJfZW5kIFx1MDAyNlx1MDAyNiAqYnVmKSB7XG4gODA3Olx0XHRcdC8qXG4gODA4Olx0XHRcdCAqIEFsbG9jYXRlIG1vcmUgbWVtb3J5IGlmIG5lZWRlZCwgaW5jbHVkaW5nIHNwYWNlIGZvciB0aGVcbiA4MDk6XHRcdFx0ICogbm90LW1hcHBlZCBhbmQgdGVybWluYXRvciBlbGVtZW50cy4ga3Z6YWxsb2MoKVxuIDgxMDpcdFx0XHQgKiBvcGVyYXRlcyBvbiB3aG9sZSBwYWdlcyBvbmx5LlxuIDgxMTpcdFx0XHQgKi9cbiA4MTI6XHRcdFx0aWYgKCgocmxwb3MgJiM0MzsgMykgKiBzaXplb2YoKnJsKSkgXHUwMDNlIHJsc2l6ZSkge1xuIDgxMzpcdFx0XHRcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsMjtcbiA4MTQ6XHRcbiA4MTU6XHRcdFx0XHRybDIgPSBrdnphbGxvYyhybHNpemUgJiM0MzsgUEFHRV9TSVpFLCBHRlBfTk9GUyk7XG4gODE2Olx0XHRcdFx0aWYgKHVubGlrZWx5KCFybDIpKSB7XG4gODE3Olx0XHRcdFx0XHRrdmZyZWUocmwpO1xuIDgxODpcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gODE5Olx0XHRcdFx0fVxuIDgyMDpcdFx0XHRcdG1lbWNweShybDIsIHJsLCBybHNpemUpO1xuIDgyMTpcdFx0XHRcdGt2ZnJlZShybCk7XG4gODIyOlx0XHRcdFx0cmwgPSBybDI7XG4gODIzOlx0XHRcdFx0cmxzaXplICYjNDM7PSBQQUdFX1NJWkU7XG4gODI0Olx0XHRcdH1cbiA4MjU6XHRcdFx0LyogRW50ZXIgdGhlIGN1cnJlbnQgdmNuIGludG8gdGhlIGN1cnJlbnQgcnVubGlzdCBlbGVtZW50LiAqL1xuIDgyNjpcdFx0XHRybFtybHBvc10udmNuID0gdmNuO1xuIDgyNzpcdFx0XHQvKlxuIDgyODpcdFx0XHQgKiBHZXQgdGhlIGNoYW5nZSBpbiB2Y24sIGkuZS4gdGhlIHJ1biBsZW5ndGggaW4gY2x1c3RlcnMuXG4gODI5Olx0XHRcdCAqIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdCB3ZSBzaWduZXh0ZW5kIG5lZ2F0aXZlIHZhbHVlcy5cbiA4MzA6XHRcdFx0ICogQSBuZWdhdGl2ZSBydW4gbGVuZ3RoIGRvZXNuJiMzOTt0IG1ha2UgYW55IHNlbnNlLCBidXQgaGV5LCBJXG4gODMxOlx0XHRcdCAqIGRpZG4mIzM5O3QgbWFrZSB1cCB0aGUgTlRGUyBzcGVjcyBhbmQgV2luZG93cyBOVDQgdHJlYXRzIHRoZSBydW5cbiA4MzI6XHRcdFx0ICogbGVuZ3RoIGFzIGEgc2lnbmVkIHZhbHVlIHNvIHRoYXQmIzM5O3MgaG93IGl0IGlzLi4uXG4gODMzOlx0XHRcdCAqL1xuIDgzNDpcdFx0XHRiID0gKmJ1ZiBcdTAwMjYgMHhmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZpeCBmb3IgYSBQb3RlbnRpYWxseSBNYWxmb3JtZWQgTlRGUyBBdHRyaWJ1dGUgUmVjb3JkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgY2xlYXJseSBhZGRyZXNzaW5nIGEgcHJvYmxlbSByZWxhdGVkIHRvIGhvdyBhbiBOVEZTIGF0dHJpYnV0ZSByZWNvcmQgKGBhdHRyYCkgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWFwcGluZyBwYWlycy4gVGhlIGNvZGUgaXMgcmVhZGluZyBzZXZlcmFsIGZpZWxkcyBmcm9tIHRoZSBgYXR0cmAgc3RydWN0dXJlOiBgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYW5kIGBpbml0aWFsaXplZF9zaXplYC4gVGhlc2UgYXJlIGFsbCBwYXJ0IG9mIGFuIG9uLWRpc2sgc3RydWN0dXJlLCBzbyB0aGUgZGF0YSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgc3lzdGVtIHJlYWRzIGZyb20gdGhlIGRpc2suCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gc3RlbSBmcm9tIGFuICplbXB0eSogbWFwcGluZyBwYWlycyBhcnJheS4gVGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdhczogaWYgdGhlIGxvb3AgYHdoaWxlIChidWYgJmx0OyBhdHRyX2VuZCAmYW1wOyZhbXA7ICpidWYpYCBpcyBza2lwcGVkIGJlY2F1c2UgYCEqYnVmYCBpcyB0cnVlLCBhIGNvbmRpdGlvbiBsYXRlciBkb3duIHRoZSBsaW5lIG1heSBlcnJvciBvdXQuIE5hbWVseSwgaWYgYHZjbmAgaXMgYGxvd2VzdF92Y25gLCB3aGljaCBtYXkgYmUgMCwgdGhlbiBgdmNuIC0gMWAgd291bGQgYmUgYC0xYC4gSWYgYGRlbHRheGNuYCBpcyBub3QgMCwgdGhlbiBgdmNuIC0gMSAhPSBkZWx0YXhjbmAgY291bGQgYmUgdHJ1ZSwgcmVzdWx0aW5nIGluIGFuIGVycm9yLiBIb3dldmVyLCB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGNhdGNoIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW86CgpgYGBjCglpZiAoIXZjbiAmYW1wOyZhbXA7ICEqYnVmICZhbXA7JmFtcDsKCSAgICAoZGVsdGF4Y24gIT0gLTEgfHwKCSAgICAgbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpIHx8CgkgICAgIGxlNjRfdG9fY3B1KGF0dHItJmd0O2RhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHwKCSAgICAgbGU2NF90b19jcHUoYXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7CgkJbnRmc19lcnJvcih2b2wtJmd0O3NiLCAmIzM0O0ludmFsaWQgZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheS4mIzM0Oyk7CgkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7Cgl9CmBgYAoKVGhpcyBtYWtlcyBpdCBjbGVhciB0aGF0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZSBjYXNlIG9mIGFuICplbXB0eSogbWFwcGluZyBwYWlycyBhcnJheSBpbiBhbiBOVEZTIGltYWdlLiBJZiBpdOKAmXMgcHJvY2Vzc2VkLCBpdCBtaWdodCByZXR1cm4gYW4gZW1wdHkgcnVubGlzdC4gVGhlIGxvZ2ljIG1ha2VzIHNlbnNlLiBJIGhhZCBicmllZmx5IGNvbnNpZGVyZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYXMgdGhlIHJvb3QgY2F1c2UsIGJ1dCBuby4gVGhlIGBhdHRyYCBzdHJ1Y3R1cmUgaXMgcmVhZCBmcm9tIGRpc2ssIHNvIGl0IHNob3VsZCBiZSBpbml0aWFsaXplZC4gVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2NgLCB3aGljaCB6ZXJvcyBpdCBpbml0aWFsbHkuCgpUaGUgaXNzdWUgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IsIHBlcmhhcHMgc3RlbW1pbmcgZnJvbSBhbiBlbXB0eSBydW5saXN0IGJlaW5nIHJldHVybmVkIGR1ZSB0byBhIG1hbGZvcm1lZCBpbWFnZSwgd2hpY2ggY291bGQgdGhlbiBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBsYXRlciBvbiB3aGVuIHRoZSBydW5saXN0IGlzIHVzZWQuIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBmaWxlc3lzdGVtIGZ1enppbmcgYnVnIHRoYXQgS0FTQU4gb3IgYSBnZW5lcmFsIGNyYXNoIGNvdWxkIGVhc2lseSBjYXRjaC4gR2l2ZW4gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZTsgS01TQU4gd291bGRuJiMzOTt0IGJlIHJlbGV2YW50LiBUaGUgYnVnIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBzdWJ0bGUgZmFpbHVyZSB0byBoYW5kbGUgYSBwZXJmZWN0bHkgdmFsaWQgTlRGUyBmb3JtYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBhdHRyX3JlY29yZCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2xheW91dC5oPTc2Mj1lbnVtIHtcbi0tXG5mcy9udGZzL2xheW91dC5oLTgyNi0gKi9cbmZzL250ZnMvbGF5b3V0Lmg6ODI3OnN0cnVjdCBhdHRyX3JlY29yZCB7XG5mcy9udGZzL2xheW91dC5oLTgyOC1cdF9fbGUzMiB0eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBNZXRhZGF0YSBTdHJ1Y3R1cmVzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBmcy9udGZzL2xheW91dC5oYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZSA4MjcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgbGF5b3V0IG9mIHRoZSBOVEZTIG1ldGFkYXRhIHN0cnVjdHVyZXMuIE15IGd1dCBmZWVsaW5nIGlzIEkmIzM5O20gbG9va2luZyBmb3IgYSBzcGVjaWZpYyBhdHRyaWJ1dGUgdHlwZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBmaWxlIHJlY29yZCBzZWdtZW50IChGUlMpIGluZGV4aW5nLCBvciBwZXJoYXBzIGV2ZW4gdGhlIGFsbG9jYXRpb24gYml0bWFwIHN0cnVjdHVyZSB1c2VkIGZvciB2b2x1bWUgbWFuYWdlbWVudCB3aXRoaW4gdGhlICRCaXRtYXAgYXR0cmlidXRlLiBLbm93aW5nIHRoZSBudWFuY2VzIG9mIHRoaXMgaGVhZGVyIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIG9uLWRpc2sgZGF0YSBvcmdhbml6YXRpb24gaW4gYSBsaXZlIHNjZW5hcmlvLCBub3QganVzdCB0aGVvcml6aW5nIGFib3V0IGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSBhbnRpY2lwYXRlIGl0IGNvdWxkIHJlbGF0ZSB0byBzb21lIG9mIG15IHByZXZpb3VzIHJlc2VhcmNoIG9uIE1hc3RlciBGaWxlIFRhYmxlIChNRlQpIGluZGV4aW5nIGFuZCBhdHRyaWJ1dGUgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBvciBwb3RlbnRpYWxseSB0byB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIG9uIHRoYXQgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL2xheW91dC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4Mjc6XHRzdHJ1Y3QgYXR0cl9yZWNvcmQge1xuIDgyODpcdFx0X19sZTMyIHR5cGU7XG4gODI5Olx0XHRfX2xlMzIgbGVuZ3RoO1xuIDgzMDpcdFx0dTggbm9uX3Jlc2lkZW50O1xuIDgzMTpcdFx0dTggbmFtZV9sZW5ndGg7XG4gODMyOlx0XHRfX2xlMTYgbmFtZV9vZmZzZXQ7XG4gODMzOlx0XHRfX2xlMTYgZmxhZ3M7XG4gODM0Olx0XHRfX2xlMTYgaW5zdGFuY2U7XG4gODM1Olx0XHR1bmlvbiB7XG4gODM2Olx0XHRcdHN0cnVjdCB7XG4gODM3Olx0XHRcdFx0X19sZTMyIHZhbHVlX2xlbmd0aDtcbiA4Mzg6XHRcdFx0XHRfX2xlMTYgdmFsdWVfb2Zmc2V0O1xuIDgzOTpcdFx0XHRcdHU4IGZsYWdzO1xuIDg0MDpcdFx0XHRcdHM4IHJlc2VydmVkO1xuIDg0MTpcdFx0XHR9IF9fcGFja2VkIHJlc2lkZW50O1xuIDg0MjpcdFx0XHRzdHJ1Y3Qge1xuIDg0MzpcdFx0XHRcdF9fbGU2NCBsb3dlc3RfdmNuO1xuIDg0NDpcdFx0XHRcdF9fbGU2NCBoaWdoZXN0X3ZjbjtcbiA4NDU6XHRcdFx0XHRfX2xlMTYgbWFwcGluZ19wYWlyc19vZmZzZXQ7XG4gODQ2Olx0XHRcdFx0dTggY29tcHJlc3Npb25fdW5pdDtcbiA4NDc6XHRcdFx0XHR1OCByZXNlcnZlZFs1XTtcbiA4NDg6XHRcdFx0XHRfX2xlNjQgYWxsb2NhdGVkX3NpemU7XG4gODQ5Olx0XHRcdFx0X19sZTY0IGRhdGFfc2l6ZTtcbiA4NTA6XHRcdFx0XHRfX2xlNjQgaW5pdGlhbGl6ZWRfc2l6ZTtcbiA4NTE6XHRcdFx0XHRfX2xlNjQgY29tcHJlc3NlZF9zaXplO1xuIDg1MjpcdFx0XHR9IF9fcGFja2VkIG5vbl9yZXNpZGVudDtcbiA4NTM6XHRcdH0gX19wYWNrZWQgZGF0YTtcbiA4NTQ6XHR9IF9fcGFja2VkO1xuIDg1NTpcdFxuIDg1NjpcdC8qXG4gODU3Olx0ICogZW51bSAtIE5URlMgZmlsZSBhdHRyaWJ1dGUgZmxhZ3MgKDMyLWJpdClcbiA4NTg6XHQgKlxuIDg1OTpcdCAqIEZpbGUgYXR0cmlidXRlIGZsYWdzICgzMi1iaXQpIGFwcGVhcmluZyBpbiB0aGUgZmlsZV9hdHRyaWJ1dGVzIGZpZWxkcyBvZiB0aGVcbiA4NjA6XHQgKiBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMgYW5kIHRoZSBGSUxFTkFNRV9BVFRSXG4gODYxOlx0ICogYXR0cmlidXRlcyBvZiBNRlRfUkVDT1JEcyBhbmQgZGlyZWN0b3J5IGluZGV4IGVudHJpZXMuXG4gODYyOlx0ICpcbiA4NjM6XHQgKiBBbGwgb2YgdGhlIGJlbG93IGZsYWdzIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IGluZGV4IGVudHJpZXMgYnV0IG9ubHkgc29tZVxuIDg2NDpcdCAqIGFwcGVhciBpbiB0aGUgU1RBTkRBUkRfSU5GT1JNQVRJT04gYXR0cmlidXRlIHdoaWxzdCBvbmx5IHNvbWUgb3RoZXJzIGFwcGVhclxuIDg2NTpcdCAqIGluIHRoZSBGSUxFTkFNRV9BVFRSIGF0dHJpYnV0ZSBvZiBNRlRfUkVDT1JEcy4gIFVubGVzcyBvdGhlcndpc2Ugc3RhdGVkIHRoZVxuIDg2NjpcdCAqIGZsYWdzIGFwcGVhciBpbiBhbGwgb2YgdGhlIGFib3ZlLlxuIDg2NzpcdCAqXG4gODY4Olx0ICogRklMRV9BVFRSX1JFQURPTkxZOiAgICAgICAgIEZpbGUgaXMgcmVhZC1vbmx5LlxuIDg2OTpcdCAqIEZJTEVfQVRUUl9ISURERU46ICAgICAgICAgICBGaWxlIGlzIGhpZGRlbiAobm90IHNob3duIGJ5IGRlZmF1bHQpLlxuIDg3MDpcdCAqIEZJTEVfQVRUUl9TWVNURU06ICAgICAgICAgICBTeXN0ZW0gZmlsZSAocHJvdGVjdGVkIGJ5IE9TKS5cbiA4NzE6XHQgKiBGSUxFX0FUVFJfRElSRUNUT1JZOiAgICAgICAgRGlyZWN0b3J5IGZsYWcgKHJlc2VydmVkIGluIE5UOyB1c2UgTUZUIGZsYWcgaW5zdGVhZCkuXG4gODcyOlx0ICogRklMRV9BVFRSX0FSQ0hJVkU6ICAgICAgICAgIEZpbGUgbmVlZHMgYXJjaGl2aW5nIChiYWNrdXAgZmxhZykuXG4gODczOlx0ICogRklMRV9BVFRSX0RFVklDRTogICAgICAgICAgIERldmljZSBmaWxlIChyYXJlbHkgdXNlZCkuXG4gODc0Olx0ICogRklMRV9BVFRSX05PUk1BTDogICAgICAgICAgIE5vcm1hbCBmaWxlIChubyBzcGVjaWFsIGF0dHJpYnV0ZXMpLlxuIDg3NTpcdCAqIEZJTEVfQVRUUl9URU1QT1JBUlk6ICAgICAgICBUZW1wb3JhcnkgZmlsZSAoZGVsZXRlIG9uIGNsb3NlKS5cbiA4NzY6XHQgKiBGSUxFX0FUVFJfU1BBUlNFX0ZJTEU6ICAgICAgU3BhcnNlIGZpbGUgKGNvbnRhaW5zIGhvbGVzKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1OQoJCQkJCQkJb3V0cHV0OiAxOTYKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5URlMgQXR0cmlidXRlIFJlY29yZCBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIE5URlMgYXR0cmlidXRlIHJlY29yZCBpc3N1ZSwgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZpZWxkczogYGhpZ2hlc3RfdmNuYCwgYGFsbG9jYXRlZF9zaXplYCwgYGRhdGFfc2l6ZWAsIGFuZCBgaW5pdGlhbGl6ZWRfc2l6ZWAuIFRoZXkgYWxsIGxpdmUgd2l0aGluIHRoZSBgbm9uX3Jlc2lkZW50YCBzdHJ1Y3QsIG5lc3RlZCBpbnNpZGUgdGhlIGBkYXRhYCB1bmlvbiBvZiB0aGUgYGF0dHJfcmVjb3JkYC4gVGhpcyBpcyBhbiBvbi1kaXNrIHN0cnVjdHVyZSwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hlcmUgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSB2b2x1bWUgYWN0dWFsbHkgbGl2ZXMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhlcmUmIzM5O3Mgbm8gcHJvYmxlbSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlIOKAkyB0aGF0JiMzOTtzIGEgcmVsaWVmLiBUaGUgaGVhcnQgb2YgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBhIGxvZ2ljIGVycm9yLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzbiYjMzk7dCBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhbiBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYW4gZW1wdHkgYXJyYXkgbGlrZWx5IG1lYW5zIHdlIGVuZCB1cCB3aXRoIGVpdGhlciBhbiBlbXB0eSBydW5saXN0LCBvciwgd29yc2UsIGFuIGludmFsaWQgb25lLiBUaGF0JiMzOTtzIGEgdGlja2luZyB0aW1lIGJvbWIhIEl0JiMzOTtzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gdHJpZ2dlciBhIGNyYXNoIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgcG9zc2libHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBldmVuIGFuIGVuZGxlc3MgbG9vcC4KClRoYW5rZnVsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLCBLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIgKEtBU0FOKSBvciBldmVuIHN0YW5kYXJkIGZ1enppbmcgc2hvdWxkIGJlIHBlcmZlY3RseSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoaXMgY3Jhc2guIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNBTml0aXplcikgaXMgdW5uZWNlc3NhcnksIGFzIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZmxhZyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBhbmQgSSYjMzk7bGwgbGF5IG91dCB0aGlzIHJhdGlvbmFsZSBjbGVhcmx5LiBUaGlzIGlzIGFsbCBhYm91dCBwaW5wb2ludGluZyBhIGxvZ2ljIGJ1ZyB0aGF0IHJlc3VsdHMgaW4gYSBiYWQgcnVubGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gd2hlcmUgYW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSBpbiBhIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUgY291bGQgYmUgaW1wcm9wZXJseSBwcm9jZXNzZWQuIFRoZSBmaWVsZHMgYmVpbmcgYWNjZXNzZWQgKGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBgaW5pdGlhbGl6ZWRfc2l6ZWApIGFyZSBwYXJ0IG9mIHRoZSBvbi1kaXNrIGBhdHRyX3JlY29yZGAgc3RydWN0dXJlLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlYWQgZnJvbSB0aGUgZGlzay9pbWFnZS4gVGhlIGJ1ZyBsaWtlbHkgbGVhZHMgdG8gYW4gZW1wdHkgb3IgaW52YWxpZCBydW5saXN0LCBjYXVzaW5nIGEgY3Jhc2ggKHN1Y2ggYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGxhdGVyIGluIHRoZSBleGVjdXRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6MzMuNjUyODA3MzY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMTg4NjcxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gd2hlcmUgYW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSBpbiBhIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUgY291bGQgYmUgaW1wcm9wZXJseSBwcm9jZXNzZWQuIFRoZSBmaWVsZHMgYmVpbmcgYWNjZXNzZWQgKGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBgaW5pdGlhbGl6ZWRfc2l6ZWApIGFyZSBwYXJ0IG9mIHRoZSBvbi1kaXNrIGBhdHRyX3JlY29yZGAgc3RydWN0dXJlLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHJlYWQgZnJvbSB0aGUgZGlzay9pbWFnZS4gVGhlIGJ1ZyBsaWtlbHkgbGVhZHMgdG8gYW4gZW1wdHkgb3IgaW52YWxpZCBydW5saXN0LCBjYXVzaW5nIGEgY3Jhc2ggKHN1Y2ggYXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIGxhdGVyIGluIHRoZSBleGVjdXRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBOVEZTIGZ1bmN0aW9uIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgdG8gYWRkIGEgY2hlY2sgZm9yIGFuIGVtcHR5IG1hcHBpbmctcGFpcnMgYXJyYXksIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgbG9naWMgZXJyb3JzIHdoZW4gcGFyc2luZyBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZmlsZXN5c3RlbSBwYXRoLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6MzMuNjUyODE0OTU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzNzU0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDJiZjNhYzhiNmJhM2FiZWQ3M2RjMTA1ZTVhMmZmMWNiM2VlZGU1N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzL3J1bmxpc3QuYyBiL2ZzL250ZnMvcnVubGlzdC5jXFxuaW5kZXggOWVhYWRiYzBlZjQ3Zi4uYzc3NWI3ZGYwNzRmOCAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL3J1bmxpc3QuY1xcbisrKyBiL2ZzL250ZnMvcnVubGlzdC5jXFxuQEAgLTc2Myw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxcbiBcXHQvKiBTdGFydCBhdCB2Y24gPSBsb3dlc3RfdmNuIGFuZCBsY24gMC4gKi9cXG4gXFx0dmNuID0gbG93ZXN0X3ZjbjtcXG4gXFx0bGNuID0gMDtcXG4rXFx0ZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XFxuIFxcdC8qIEdldCBzdGFydCBvZiB0aGUgbWFwcGluZyBwYWlycyBhcnJheS4gKi9cXG4gXFx0YnVmID0gKHU4ICopYXR0ciArXFxuIFxcdFxcdGxlMTZfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lm1hcHBpbmdfcGFpcnNfb2Zmc2V0KTtcXG5AQCAtNzcyLDYgKzc3MywyMyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXFxuK1xcdCAqIGF0dHJpYnV0ZS5cXG4rXFx0ICovXFxuK1xcdGlmICghdmNuIFxcdTAwMjZcXHUwMDI2ICEqYnVmIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcXG4rXFx0ICAgICBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcXG4rXFx0ICAgICBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XFxuK1xcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XFxuK1xcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkludmFsaWQgZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheS5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuK1xcdH1cXG4rXFx0aWYgKCF2Y24gXFx1MDAyNlxcdTAwMjYgISpidWYgXFx1MDAyNlxcdTAwMjYgb2xkX3J1bmxpc3QgXFx1MDAyNlxcdTAwMjYgb2xkX3J1bmxpc3QtXFx1MDAzZXJsKSB7XFxuK1xcdFxcdCpuZXdfcmxfY291bnQgPSBvbGRfcnVubGlzdC1cXHUwMDNlY291bnQ7XFxuK1xcdFxcdHJldHVybiBvbGRfcnVubGlzdC1cXHUwMDNlcmw7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cXG4gXFx0cmxwb3MgPSAwO1xcbiBcXHQvKiBBbGxvY2F0ZSBmaXJzdCBwYWdlIGFuZCBzZXQgY3VycmVudCBydW5saXN0IHNpemUgdG8gb25lIHBhZ2UuICovXFxuQEAgLTk0Miw3ICs5NjAsNiBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxcbiBcXHQgKiBJZiB0aGVyZSBpcyBhIGhpZ2hlc3RfdmNuIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmluYWxcXG4gXFx0ICogdmNuIGluIHRoZSBydW5saXN0IC0gMSwgb3Igc29tZXRoaW5nIGhhcyBnb25lIGJhZGx5IHdyb25nLlxcbiBcXHQgKi9cXG4tXFx0ZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XFxuIFxcdGlmICh1bmxpa2VseShkZWx0YXhjbiBcXHUwMDI2XFx1MDAyNiB2Y24gLSAxICE9IGRlbHRheGNuKSkge1xcbiBtcGFfZXJyOlxcbiBcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJDb3JydXB0IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gbm9uLXJlc2lkZW50IGF0dHJpYnV0ZS5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6MzUuMDQ3MzAwMTYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzY1MzQ4NzM1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTlRGUyBmdW5jdGlvbiBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIHRvIGFkZCBhIGNoZWNrIGZvciBhbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIG9yIG1hbGljaW91cyBOVEZTIGltYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gcGF0aCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyYmYzYWM4YjZiYTNhYmVkNzNkYzEwNWU1YTJmZjFjYjNlZWRlNTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzoyOTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvcnVubGlzdC5jIGIvZnMvbnRmcy9ydW5saXN0LmNcbmluZGV4IDllYWFkYmMwZWY0N2YuLmM3NzViN2RmMDc0ZjggMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3J1bmxpc3QuY1xuKysrIGIvZnMvbnRmcy9ydW5saXN0LmNcbkBAIC03NjMsNiArNzYzLDcgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICpcbiBcdC8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqL1xuIFx0dmNuID0gbG93ZXN0X3ZjbjtcbiBcdGxjbiA9IDA7XG4rXHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIFx0LyogR2V0IHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xuIFx0YnVmID0gKHU4ICopYXR0ciArXG4gXHRcdGxlMTZfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpO1xuQEAgLTc3Miw2ICs3NzMsMjMgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICpcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXG4rXHQgKiBhdHRyaWJ1dGUuXG4rXHQgKi9cbitcdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjZcbitcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcbitcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSkgfHxcbitcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XG4rXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XG4rXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkludmFsaWQgZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheS5cIik7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0fVxuK1x0aWYgKCF2Y24gXHUwMDI2XHUwMDI2ICEqYnVmIFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdCBcdTAwMjZcdTAwMjYgb2xkX3J1bmxpc3QtXHUwMDNlcmwpIHtcbitcdFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVx1MDAzZWNvdW50O1xuK1x0XHRyZXR1cm4gb2xkX3J1bmxpc3QtXHUwMDNlcmw7XG4rXHR9XG4rXG4gXHQvKiBDdXJyZW50IHBvc2l0aW9uIGluIHJ1bmxpc3QgYXJyYXkuICovXG4gXHRybHBvcyA9IDA7XG4gXHQvKiBBbGxvY2F0ZSBmaXJzdCBwYWdlIGFuZCBzZXQgY3VycmVudCBydW5saXN0IHNpemUgdG8gb25lIHBhZ2UuICovXG5AQCAtOTQyLDcgKzk2MCw2IEBAIHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqXG4gXHQgKiBJZiB0aGVyZSBpcyBhIGhpZ2hlc3RfdmNuIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmluYWxcbiBcdCAqIHZjbiBpbiB0aGUgcnVubGlzdCAtIDEsIG9yIHNvbWV0aGluZyBoYXMgZ29uZSBiYWRseSB3cm9uZy5cbiBcdCAqL1xuLVx0ZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtcbiBcdGlmICh1bmxpa2VseShkZWx0YXhjbiBcdTAwMjZcdTAwMjYgdmNuIC0gMSAhPSBkZWx0YXhjbikpIHtcbiBtcGFfZXJyOlxuIFx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCJDb3JydXB0IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gbm9uLXJlc2lkZW50IGF0dHJpYnV0ZS5cIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzoyOTozNS4wNDczMDE4NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc1OTU5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5URlMgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL250ZnMvcnVubGlzdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBhIGNoZWNrIGZvciBhbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5LiBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoeSB0aGV5IGFkZGVkIHRoYXQuIEVtcHR5IGFycmF5IGNoZWNrcyBhcmUgdXN1YWxseSBhYm91dCBwcmV2ZW50aW5nIGVkZ2UtY2FzZSBlcnJvcnMgb3IgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRleHQsIGl0J3MgaGFyZCB0byBzYXkgZGVmaW5pdGl2ZWx5LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBOVEZTIGNvbmZpZ3VyYXRpb24uIEknbGwgdGFrZSBhIHF1aWNrIHBlZWsgaW4gYGZzL250ZnMvS2NvbmZpZ2AgdG8gdmVyaWZ5IGBDT05GSUdfTlRGU19GU2AgaXMgZW5hYmxlZC4gTWFrZXMgc3VyZSBpdCBpcyBldmVuIGNvbXBpbGVkIGluLlxuXG5UaGVuLCBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCBpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZ2FpbiBhIGJldHRlciBhcHByZWNpYXRpb24gZm9yIGl0cyBpbXBhY3QgYW5kIGhvdyB0aGlzIG5ldyBjaGVjayBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGRhdGEgdGhhdCBtYXkgaGF2ZSBiZWVuIGludGVudGlvbmFsbHkgY29ycnVwdGVkLiBUaGF0IGNvdWxkIGV4cGxhaW4gdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzoyOTozOS41MjMyNjUzNzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NjY0NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz04Nj1pbnQgbnRmc19tYXBfcnVubGlzdF9ub2xvY2soc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzNjQgdmNuLCBzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTg3LVxcdCAqIHdlIHRoZW4gdHJ5IHRvIG1hcCB0aGUgYWxyZWFkeSBtYXBwZWQgcnVubGlzdCBmcmFnbWVudCBhbmRcXG5mcy9udGZzL2F0dHJpYi5jOjE4ODpcXHQgKiBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcygpIGZhaWxzLlxcbmZzL250ZnMvYXR0cmliLmMtMTg5LVxcdCAqL1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xOTQtXFx0fVxcbmZzL250ZnMvYXR0cmliLmM6MTk1OlxcdHJsID0gbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MobmktXFx1MDAzZXZvbCwgYSwgXFx1MDAyNm5pLVxcdTAwM2VydW5saXN0LCBcXHUwMDI2bmV3X3JsX2NvdW50KTtcXG5mcy9udGZzL2F0dHJpYi5jLTE5Ni1cXHRpZiAoSVNfRVJSKHJsKSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MjY1Mj1pbnQgbnRmc19hdHRyX3JlY29yZF9ybShzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eClcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjczMC1cXG5mcy9udGZzL2F0dHJpYi5jOjI3MzE6XFx0XFx0XFx0YWxfcmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhiYXNlX25pLVxcdTAwM2V2b2wsXFxuZnMvbnRmcy9hdHRyaWIuYy0yNzMyLVxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYXR0ciwgTlVMTCwgXFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTMyNzI9aW50IG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTMzMTktXFx0XFx0XFx0LyogRGVjb2RlIHRoZSBydW5saXN0LiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MzMyMDpcXHRcXHRcXHRybCA9IG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKG5pLVxcdTAwM2V2b2wsIGEsIFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdCxcXG5mcy9udGZzL2F0dHJpYi5jLTMzMjEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MzIzPXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVycyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMzUxLVxcbmZzL250ZnMvaW5vZGUuYzozNTI6XFx0XFx0XFx0cmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhuaS1cXHUwMDNldm9sLCBhY3R4LVxcdTAwM2VhdHRyLCBOVUxMLFxcbmZzL250ZnMvaW5vZGUuYy0zNTMtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmM9MTgwOT1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG1mdF9uaV9ydW5saXN0X2xvY2tfa2V5LCBtZnRfbmlfbXJlY19sb2NrX2tleTtcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0xODI5LSAqIGVsc2UgYW5kIGl0ZXJhdGluZyB1c2luZyBudGZzX2F0dHJfbG9va3VwKCREQVRBKSBvdmVyIGFsbCBleHRlbnRzLiAgQXMgZWFjaFxcbmZzL250ZnMvaW5vZGUuYzoxODMwOiAqIGV4dGVudCBpcyBmb3VuZCwgd2UgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoKSBpbmNsdWRpbmcgdGhlIGltcGxpZWRcXG5mcy9udGZzL2lub2RlLmMtMTgzMS0gKiBudGZzX3J1bmxpc3RzX21lcmdlKCkuICBFYWNoIHN0ZXAgb2YgdGhlIGl0ZXJhdGlvbiBuZWNlc3NhcmlseSBwcm92aWRlc1xcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTE4Mzc9aW50IG50ZnNfcmVhZF9pbm9kZV9tb3VudChzdHJ1Y3QgaW5vZGUgKnZpKVxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTE5ODctXFxuZnMvbnRmcy9pbm9kZS5jOjE5ODg6XFx0XFx0XFx0cmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyh2b2wsIGEsIE5VTEwsIFxcdTAwMjZuZXdfcmxfY291bnQpO1xcbmZzL250ZnMvaW5vZGUuYy0xOTg5LVxcdFxcdFxcdGlmIChJU19FUlIocmwpKSB7XFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjA4NC1cXHRcXHQgKi9cXG5mcy9udGZzL2lub2RlLmM6MjA4NTpcXHRcXHRucmwgPSBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyh2b2wsIGEsIFxcdTAwMjZuaS1cXHUwMDNlcnVubGlzdCxcXG5mcy9udGZzL2lub2RlLmMtMjA4Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19ybF9jb3VudCk7XFxuLS1cXG5mcy9udGZzL2lub2RlLmMtMjA4OC1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLFxcbmZzL250ZnMvaW5vZGUuYzoyMDg5OlxcdFxcdFxcdFxcdFxcXCJudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWxkLlxcXCIsXFxuZnMvbnRmcy9pbm9kZS5jLTIwOTAtXFx0XFx0XFx0XFx0UFRSX0VSUihucmwpKTtcXG4tLVxcbmZzL250ZnMvcnVubGlzdC5jPTUyMj1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuYy03MTctLypcXG5mcy9udGZzL3J1bmxpc3QuYzo3MTg6ICogbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MgLSBjb252ZXJ0IG1hcHBpbmcgcGFpcnMgYXJyYXkgdG8gcnVubGlzdFxcbmZzL250ZnMvcnVubGlzdC5jLTcxOS0gKiBAdm9sOiBudGZzIHZvbHVtZVxcbi0tXFxuZnMvbnRmcy9ydW5saXN0LmMtNzM0LSAqL1xcbmZzL250ZnMvcnVubGlzdC5jOjczNTpzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG5mcy9udGZzL3J1bmxpc3QuYy03MzYtXFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyLCBzdHJ1Y3QgcnVubGlzdCAqb2xkX3J1bmxpc3QsXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuaD02OD1zdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX3J1bmxpc3RzX21lcmdlKHN0cnVjdCBydW5saXN0ICpkX3J1bmxpc3QsXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuaC03MC1cXHRcXHRzaXplX3QgKm5ld19ybF9jb3VudCk7XFxuZnMvbnRmcy9ydW5saXN0Lmg6NzE6c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuZnMvbnRmcy9ydW5saXN0LmgtNzItXFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJfcmVjb3JkICphdHRyLCBzdHJ1Y3QgcnVubGlzdCAqb2xkX3J1bmxpc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjI5OjM5LjU3NDczNzEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTc4MTM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgTlRGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2Agd2l0aGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoYXQgZnVuY3Rpb24ncyBwcmV0dHkgY3J1Y2lhbDsgaXQncyB1c2VkIGJ5IHNldmVyYWwga2V5IE5URlMgZnVuY3Rpb25zOiBgbnRmc19tYXBfcnVubGlzdF9ub2xvY2tgLCBgbnRmc19hdHRyX3JlY29yZF9ybWAsIGBudGZzX2F0dHJfbWFwX3dob2xlX3J1bmxpc3RgLCBgbnRmc19ub25fcmVzaWRlbnRfZGVhbGxvY19jbHVzdGVyc2AsIGFuZCBgbnRmc19yZWFkX2lub2RlX21vdW50YC4gVGhlc2UgYXJlIGFsbCBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIE5URlMgaW1wbGVtZW50YXRpb24sIHNvIGFueSBjaGFuZ2UgaGVyZSB3YXJyYW50cyBhIGNsb3NlciBsb29rLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIGNoZWNrIGZvciBhbiBlbXB0eSBgbWFwcGluZ19wYWlyc2AgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciB3aGF0ICpsb29rcyogbGlrZSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IOKAkyBsaWtlbHkgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGEgc2ltaWxhciB0eXBlIG9mIGJ1ZyB3aGVuIHRoZSBjb2RlJ3MgdHJ5aW5nIHRvIHBhcnNlIHNvbWV0aGluZyB0aGF0IGlzbid0IGFjdHVhbGx5IHRoZXJlLiBBIHNpbXBsZSBjaGVjayBsaWtlIHRoaXMgY291bGQgcHJldmVudCBhIGxvdCBvZiBoZWFkYWNoZXMgZG93biB0aGUgcm9hZC5cblxuR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRob3NlIGZ1bmN0aW9ucywgSSB0aGluayB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBleHBvc2UgYW55IG90aGVyIHZ1bG5lcmFiaWxpdGllcyB1bmRlciB1bmV4cGVjdGVkIGlucHV0cy5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHBhdGgsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnLiBJIGJlbGlldmUgYENPTkZJR19OVEZTX0ZTYCBpcyB0aGUgcmVsZXZhbnQgb3B0aW9uIGhlcmUuIEknbGwgbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCB0byBtYWtlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSBjb2RlIGluIHRoZSBwcm9wZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzoyOTo0OC44MzI1NTMyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYyNjgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xcbmZzL250ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0zNC1cXG5mcy9udGZzL0tjb25maWc6MzU6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjI5OjQ4Ljg5MTE4Njk5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjUxNDI3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlRGUyBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGNydWNpYWwgTlRGUyBjb25maWd1cmF0aW9ucy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgQ09ORklHX05URlNfRlNgIGlzIHNldCwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy4gTm93LCB3YWl0IGEgbWludXRlLi4uIGlzIHRoZXJlIGFueSBvdGhlciBOVEZTLXJlbGF0ZWQgY29uZmlndXJhdGlvbiB0aGF0IEkgbmVlZCB0byBjb25zaWRlcj8gQWgsIHllcywgdGhlcmUncyBgTlRGUzNfRlNgLCBidXQgaXNuJ3QgdGhhdCBwYXJ0IG9mIHRoZSBsZWdhY3kgTlRGUyBkcml2ZXIgaW4gYGZzL250ZnMvYD8gWWVzLCBJJ20gcHJldHR5IHN1cmUgYGZzL250ZnMvYCBpcyB3aGVyZSB0aGUgb2xkZXIgY29kZSByZXNpZGVzLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHRoaXMgc3lzdGVtIGJ1aWxkLCBsZXQncyB2ZXJpZnkgYWdhaW4gdGhhdCBgTlRGU19GU2AgaW4gaXNvbGF0aW9uIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjI5OjU2LjkxNjMzMzM0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY5ODA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcXG5mcy9udGZzL0tjb25maWctMTQtXFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG5mcy9udGZzL0tjb25maWc6MTU6XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0zNT1jb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5mcy9udGZzL0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTM4LVxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6Mjk6NTYuOTg3MDM2NDg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzMwMzczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBJdCBsb29rcyBsaWtlIGBOVEZTX0ZTYCByZWxpZXMgb24gYEJMT0NLYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIGRlcGVuZGVuY3kuIFRvIGdldCBhIGhhbmRsZSBvbiBpdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgTlRGUywgc3BlY2lmaWNhbGx5IGBmcy9udGZzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBjcml0aWNhbGx5LCB0aG9zZSBkZXBlbmRlbmN5IGRlZmluaXRpb25zLiBMZXQncyBzZWUgd2hhdCBgZnMvbnRmcy9LY29uZmlnYCByZXZlYWxzIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTlRGU19GU2AgYW5kIGBCTE9DS2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDowMS42MDQzNDM4NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTlRGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA1OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXFxuICAgODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMTE6XFx0XFx0ICBudGZzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTlRGU19ERUJVR1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDowMS42MDQ0NDUzODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDI0ODA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHdhaXQgYSBtaW51dGUuLi4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgYE5URlNfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhZCBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBCTE9DS2AsIGJ1dCBub3cgSSdtIHNlY29uZC1ndWVzc2luZyBteXNlbGYuIFRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0LiBJdCdzIHVudXN1YWwgZm9yIGEgZmlsZXN5c3RlbSBub3QgdG8gZGVwZW5kIG9uIGEgYmxvY2sgZGV2aWNlIGluIHNvbWUgd2F5LlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgcXVpY2tseS4gTGV0IG1lIHB1bGwgdXAgYGZzL0tjb25maWdgLiBJJ2xsIHNjYW4gdGhyb3VnaCBpdCB0byBzZWUgaWYgYGZzL250ZnMvS2NvbmZpZ2AgaXMgaW5jbHVkZWQgY29uZGl0aW9uYWxseSDigJMgcGVyaGFwcyBpdCdzIG5lc3RlZCB1bmRlciBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgaW5kaXJlY3RseSBpbXBsaWVzIGBCTE9DS2AuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIG1vcmUgY29tcGxleCBkZXBlbmRlbmN5IHRyZWUgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQgdG8gdHJhY2UgdGhyb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MDUuODA4Njk3OTkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc1NjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcImZzL250ZnMvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTE1ND1zb3VyY2UgXFxcImZzL2V4ZmF0L0tjb25maWdcXFwiXFxuZnMvS2NvbmZpZzoxNTU6c291cmNlIFxcXCJmcy9udGZzL0tjb25maWdcXFwiXFxuZnMvS2NvbmZpZy0xNTYtc291cmNlIFxcXCJmcy9udGZzMy9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDowNS44ODU0NjE1NzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MTMyNzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBOVEZTIENvbXByZXNzaW9uKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgTlRGU19GU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmU7IHRoYXQncyBhbGwgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBub3cuIE5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGUgb25lIHRoYXQncyBiZWVuIGZsYWdnZWQgYXMgbW9kaWZpZWQgaXMgYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYC4gR29vZC4gTm93LCBsZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGBudGZzX21hcF9ydW5saXN0X25vbG9ja2AsIGBudGZzX2F0dHJfcmVjb3JkX3JtYCwgYG50ZnNfYXR0cl9tYXBfd2hvbGVfcnVubGlzdGAsIGBudGZzX25vbl9yZXNpZGVudF9kZWFsbG9jX2NsdXN0ZXJzYCwgYW5kIGBudGZzX3JlYWRfaW5vZGVfbW91bnRgIGFyZSBhbGwgY29uc3VtZXJzIG9mIHRoaXMgZGVjb21wcmVzc2lvbiBmdW5jdGlvbi4gVGhhdCBnaXZlcyBtZSBhIGNsZWFyIHBhdGggZm9yd2FyZDsgbXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRob3JvdWdobHkgYW5hbHl6aW5nIGBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc2AgaXRzZWxmIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGhpbiB0aG9zZSBzcGVjaWZpYyBjYWxsIGNvbnRleHRzLiBUaGlzIG5hcnJvd2VkIHNjb3BlIHdpbGwgbWFrZSBmb3IgYW4gZWZmaWNpZW50IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc1LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoxMS40MjY3OTM2OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzNzU0NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE5URlMgZnVuY3Rpb24gYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCB0byBhZGQgYSBjaGVjayBmb3IgYW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgTlRGUyBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBmaWxlc3lzdGVtIHBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE5URlMgZnVuY3Rpb24gYG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzYCB0byBhZGQgYSBjaGVjayBmb3IgYW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgTlRGUyBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBmaWxlc3lzdGVtIHBhdGgsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoxMS41ODIxNzg2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyODk0ODYzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoxMS41ODI3NTUzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjI4ODkwNTA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDJiZjNhYzhiNmJhM2FiZWQ3M2RjMTA1ZTVhMmZmMWNiM2VlZGU1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA3OjI5OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuY1xuaW5kZXggOWVhYWRiYzBlZjQ3Zi4uYzc3NWI3ZGYwNzRmOCAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvcnVubGlzdC5jXG4rKysgYi9mcy9udGZzL3J1bmxpc3QuY1xuQEAgLTc2Myw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0LyogU3RhcnQgYXQgdmNuID0gbG93ZXN0X3ZjbiBhbmQgbGNuIDAuICovXG4gXHR2Y24gPSBsb3dlc3RfdmNuO1xuIFx0bGNuID0gMDtcbitcdGRlbHRheGNuID0gbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5oaWdoZXN0X3Zjbik7XG4gXHQvKiBHZXQgc3RhcnQgb2YgdGhlIG1hcHBpbmcgcGFpcnMgYXJyYXkuICovXG4gXHRidWYgPSAodTggKilhdHRyICtcbiBcdFx0bGUxNl90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5tYXBwaW5nX3BhaXJzX29mZnNldCk7XG5AQCAtNzcyLDYgKzc3MywyMyBAQCBzdHJ1Y3QgcnVubGlzdF9lbGVtZW50ICpudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKlxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGhcbitcdCAqIGF0dHJpYnV0ZS5cbitcdCAqL1xuK1x0aWYgKCF2Y24gXHUwMDI2XHUwMDI2ICEqYnVmIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChkZWx0YXhjbiAhPSAtMSB8fFxuK1x0ICAgICBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fFxuK1x0ICAgICBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHxcbitcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHtcbitcdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiSW52YWxpZCBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LlwiKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4rXHR9XG4rXHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0IFx1MDAyNlx1MDAyNiBvbGRfcnVubGlzdC1cdTAwM2VybCkge1xuK1x0XHQqbmV3X3JsX2NvdW50ID0gb2xkX3J1bmxpc3QtXHUwMDNlY291bnQ7XG4rXHRcdHJldHVybiBvbGRfcnVubGlzdC1cdTAwM2VybDtcbitcdH1cbitcbiBcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cbiBcdHJscG9zID0gMDtcbiBcdC8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi9cbkBAIC05NDIsNyArOTYwLDYgQEAgc3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICpcbiBcdCAqIElmIHRoZXJlIGlzIGEgaGlnaGVzdF92Y24gc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBmaW5hbFxuIFx0ICogdmNuIGluIHRoZSBydW5saXN0IC0gMSwgb3Igc29tZXRoaW5nIGhhcyBnb25lIGJhZGx5IHdyb25nLlxuIFx0ICovXG4tXHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pO1xuIFx0aWYgKHVubGlrZWx5KGRlbHRheGNuIFx1MDAyNlx1MDAyNiB2Y24gLSAxICE9IGRlbHRheGNuKSkge1xuIG1wYV9lcnI6XG4gXHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLCBcIkNvcnJ1cHQgbWFwcGluZyBwYWlycyBhcnJheSBpbiBub24tcmVzaWRlbnQgYXR0cmlidXRlLlwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjExLjU4Mjc1NjgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MDk1NzM5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlRGUyBSdW5saXN0IERlY29tcHJlc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5cyBhcmUgaGFuZGxlZC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSByZWxvY2F0aW9uIG9mIHRoZSBgZGVsdGF4Y25gIGluaXRpYWxpemF0aW9uOiBgZGVsdGF4Y24gPSBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtgLiBJbnRlcmVzdGluZywgbW92aW5nIGl0IHVwLiBJIHdvbmRlciBpZiB0aGlzIHJlbGF0ZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBzb21ldGhpbmcgSSdtIGFsd2F5cyB3YXJ5IG9mLlxuXG5UaGUgYWRkZWQgY2hlY2sgaXMgY3JpdGljYWw6XG5cbmBgYGNcblx0Lypcblx0ICogQW4gZW1wdHkgbWFwcGluZy1wYWlycyBhcnJheSBpcyB2YWxpZCBvbmx5IGZvciBhIHplcm8tbGVuZ3RoXG5cdCAqIGF0dHJpYnV0ZS5cblx0ICovXG5cdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjZcblx0ICAgIChkZWx0YXhjbiAhPSAtMSB8fFxuXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpIHx8XG5cdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpIHx8XG5cdCAgICAgbGU2NF90b19jcHUoYXR0ci1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplKSkpIHtcblx0XHRudGZzX2Vycm9yKHZvbC1cdTAwM2VzYiwgXCJJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXCIpO1xuXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuXHR9XG5cdGlmICghdmNuIFx1MDAyNlx1MDAyNiAhKmJ1ZiBcdTAwMjZcdTAwMjYgb2xkX3J1bmxpc3QgXHUwMDI2XHUwMDI2IG9sZF9ydW5saXN0LVx1MDAzZXJsKSB7XG5cdFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVx1MDAzZWNvdW50O1xuXHRcdHJldHVybiBvbGRfcnVubGlzdC1cdTAwM2VybDtcblx0fVxuYGBgXG5cblRoaXMgc2VlbXMgdG8gYmUgYSBkZWZlbnNpdmUgbWVhc3VyZS4gQW4gZW1wdHkgbWFwcGluZyBwYWlycyBhcnJheSAoYCEqYnVmYCkgc2hvdWxkIG9ubHkgYmUgdmFsaWQgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgemVybyBsZW5ndGguIFRoZSBjaGVjayBleGFtaW5lcyBpZiBgIXZjbmAgYW5kIGAhKmJ1ZmAgYXJlIHNpbXVsdGFuZW91c2x5IHRydWUsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNvbmRpdGlvbnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkIFwiemVybyBsZW5ndGhcIi4gTXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcgLSB0aGlzIHNtZWxscyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBoYW5kbGluZyBlZGdlIGNhc2VzLiBMb29raW5nIGF0IHRoZSBjb25kaXRpb25zIGl0IGNoZWNrcyB3aGV0aGVyIHRoZSBgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgb3IgYGluaXRpYWxpemVkX3NpemVgIGFyZSBub24temVyby4gIFRoZXNlIGFyZSBhbGwgdmFsdWVzIHJlYWQgZnJvbSB0aGUgb24tZGlzayBOVEZTIG1ldGFkYXRhLiBXaGlsZSB0aGlzIGRhdGEgKnNob3VsZCogYmUgaW5pdGlhbGl6ZWQsIHRoZSBmaWxlc3lzdGVtIGNvdWxkIGJlIGNvcnJ1cHQsIG9yIGV2ZW4gbWFsaWNpb3VzbHkgY3JhZnRlZC4gVGhlIGNvZGUgc2VlbXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgb3Igc2ltaWxhciBwcm9ibGVtIGlmIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5IGlzIGVtcHR5IGluIGFuIHVuZXhwZWN0ZWQgc2NlbmFyaW8uIElmIGAhKmJ1ZmAgaXMgdHJ1ZSwgdGhlIG1hcHBpbmcgcGFpcnMgYXJyYXkgaXMgZW1wdHkuIFRoZSBgISpidWZgIGNvbmRpdGlvbiBtaWdodCBieXBhc3MgdGhlIGxvb3AgdGhhdCBwYXJzZXMgdGhlIGFycmF5LCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gc2lkZXdheXMuIEl0IHNlZW1zIHRoYXQgdGhpcyBjb2RlIG1heSBub3QgZXhlY3V0ZSB1bmRlciB0aGUgY29uZGl0aW9uIGAhKmJ1ZmAsIHdoaWNoIG1pZ2h0IGNhdXNlIGFuIGVtcHR5IHJ1bmxpc3QuIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaW4gc29tZSBlZGdlIGNhc2VzIGFuIG9sZGVyIGBydW5saXN0YCBtaWdodCBiZSByZXR1cm5lZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgcmV0dXJuaW5nIGFuIG9sZCBydW5saXN0IHdoZW4gYCF2Y24gXHUwMDI2XHUwMDI2ICEqYnVmYC4gTmVlZCB0byBjaGVjayBgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NgIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjE5LjQ5MjMzMzY0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NjE1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9ydW5saXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9ydW5saXN0LmM9NTIyPXN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfcnVubGlzdHNfbWVyZ2Uoc3RydWN0IHJ1bmxpc3QgKmRfcnVubGlzdCxcXG4tLVxcbmZzL250ZnMvcnVubGlzdC5jLTcxNy0vKlxcbmZzL250ZnMvcnVubGlzdC5jOjcxODogKiBudGZzX21hcHBpbmdfcGFpcnNfZGVjb21wcmVzcyAtIGNvbnZlcnQgbWFwcGluZyBwYWlycyBhcnJheSB0byBydW5saXN0XFxuZnMvbnRmcy9ydW5saXN0LmMtNzE5LSAqIEB2b2w6IG50ZnMgdm9sdW1lXFxuLS1cXG5mcy9udGZzL3J1bmxpc3QuYy03MzQtICovXFxuZnMvbnRmcy9ydW5saXN0LmM6NzM1OnN0cnVjdCBydW5saXN0X2VsZW1lbnQgKm50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbmZzL250ZnMvcnVubGlzdC5jLTczNi1cXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIsIHN0cnVjdCBydW5saXN0ICpvbGRfcnVubGlzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MTkuNTc2MTAxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1MTAzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEZTIFJ1bmxpc3QgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBOVEZTIGRyaXZlciBoYW5kbGVzIHJ1bmxpc3RzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzM1IGluIGBmcy9udGZzL3J1bmxpc3QuY2AuIFRoYXQgYXJlYSBwcm9iYWJseSBkZWFscyB3aXRoIGEgY3JpdGljYWwgYXNwZWN0IG9mIGhvdyBmaWxlIGRhdGEgaXMgbWFwcGVkIG9uIHRoZSBkaXNrLiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBydW5saXN0IGNvbXByZXNzaW9uL2V4cGFuc2lvbi4gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgTlRGUydzIGZyYWdtZW50ZWQgZmlsZSBzeXN0ZW0gYW5kIGl0cyB1c2Ugb2YgcnVubGlzdHMsIHRoaXMgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyaXNlISBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDoyMi42NTEyMDkzNDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvcnVubGlzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzU6XFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuIDczNjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHIsIHN0cnVjdCBydW5saXN0ICpvbGRfcnVubGlzdCxcXG4gNzM3OlxcdFxcdFxcdHNpemVfdCAqbmV3X3JsX2NvdW50KVxcbiA3Mzg6XFx0e1xcbiA3Mzk6XFx0XFx0czY0IHZjbjtcXHRcXHQvKiBDdXJyZW50IHZjbi4gKi9cXG4gNzQwOlxcdFxcdHM2NCBsY247XFx0XFx0LyogQ3VycmVudCBsY24uICovXFxuIDc0MTpcXHRcXHRzNjQgZGVsdGF4Y247XFx0XFx0LyogQ2hhbmdlIGluIFt2bF1jbi4gKi9cXG4gNzQyOlxcdFxcdHN0cnVjdCBydW5saXN0X2VsZW1lbnQgKnJsLCAqbmV3X3JsO1xcdC8qIFRoZSBvdXRwdXQgcnVubGlzdC4gKi9cXG4gNzQzOlxcdFxcdHU4ICpidWY7XFx0XFx0LyogQ3VycmVudCBwb3NpdGlvbiBpbiBtYXBwaW5nIHBhaXJzIGFycmF5LiAqL1xcbiA3NDQ6XFx0XFx0dTggKmF0dHJfZW5kO1xcdFxcdC8qIEVuZCBvZiBhdHRyaWJ1dGUuICovXFxuIDc0NTpcXHRcXHRpbnQgcmxzaXplO1xcdFxcdC8qIFNpemUgb2YgcnVubGlzdCBidWZmZXIuICovXFxuIDc0NjpcXHRcXHR1MTYgcmxwb3M7XFx0XFx0LyogQ3VycmVudCBydW5saXN0IHBvc2l0aW9uIGluIHVuaXRzIG9mIHN0cnVjdCBydW5saXN0X2VsZW1lbnRzLiAqL1xcbiA3NDc6XFx0XFx0dTggYjtcXHRcXHRcXHQvKiBDdXJyZW50IGJ5dGUgb2Zmc2V0IGluIGJ1Zi4gKi9cXG4gNzQ4OlxcdFxcdHU2NCBsb3dlc3RfdmNuO1xcdFxcdC8qIFJhdyBvbi1kaXNrIGxvd2VzdF92Y24uICovXFxuIDc0OTpcXHRcXG4gNzUwOlxcdCNpZmRlZiBERUJVR1xcbiA3NTE6XFx0XFx0LyogTWFrZSBzdXJlIGF0dHIgZXhpc3RzIGFuZCBpcyBub24tcmVzaWRlbnQuICovXFxuIDc1MjpcXHRcXHRpZiAoIWF0dHIgfHwgIWF0dHItXFx1MDAzZW5vbl9yZXNpZGVudCkge1xcbiA3NTM6XFx0XFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiSW52YWxpZCBhcmd1bWVudHMuXFxcIik7XFxuIDc1NDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gNzU1OlxcdFxcdH1cXG4gNzU2OlxcdCNlbmRpZlxcbiA3NTc6XFx0XFx0bG93ZXN0X3ZjbiA9IGxlNjRfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50Lmxvd2VzdF92Y24pO1xcbiA3NTg6XFx0XFx0LyogVmFsaWRhdGUgbG93ZXN0X3ZjbiBmcm9tIG9uLWRpc2sgbWV0YWRhdGEgdG8gZW5zdXJlIGl0IGlzIHNhbmUuICovXFxuIDc1OTpcXHRcXHRpZiAob3ZlcmZsb3dzX3R5cGUobG93ZXN0X3ZjbiwgdmNuKSkge1xcbiA3NjA6XFx0XFx0XFx0bnRmc19lcnJvcih2b2wtXFx1MDAzZXNiLCBcXFwiSW52YWxpZCBsb3dlc3RfdmNuIGluIG1hcHBpbmcgcGFpcnMuXFxcIik7XFxuIDc2MTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4gNzYyOlxcdFxcdH1cXG4gNzYzOlxcdFxcdC8qIFN0YXJ0IGF0IHZjbiA9IGxvd2VzdF92Y24gYW5kIGxjbiAwLiAqL1xcbiA3NjQ6XFx0XFx0dmNuID0gbG93ZXN0X3ZjbjtcXG4gNzY1OlxcdFxcdGxjbiA9IDA7XFxuIDc2NjpcXHRcXHRkZWx0YXhjbiA9IGxlNjRfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmhpZ2hlc3RfdmNuKTtcXG4gNzY3OlxcdFxcdC8qIEdldCBzdGFydCBvZiB0aGUgbWFwcGluZyBwYWlycyBhcnJheS4gKi9cXG4gNzY4OlxcdFxcdGJ1ZiA9ICh1OCAqKWF0dHIgK1xcbiA3Njk6XFx0XFx0XFx0bGUxNl90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpO1xcbiA3NzA6XFx0XFx0YXR0cl9lbmQgPSAodTggKilhdHRyICsgbGUzMl90b19jcHUoYXR0ci1cXHUwMDNlbGVuZ3RoKTtcXG4gNzcxOlxcdFxcdGlmICh1bmxpa2VseShidWYgXFx1MDAzYyAodTggKilhdHRyIHx8IGJ1ZiBcXHUwMDNlPSBhdHRyX2VuZCkpIHtcXG4gNzcyOlxcdFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYiwgXFxcIkNvcnJ1cHQgYXR0cmlidXRlLlxcXCIpO1xcbiA3NzM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuIDc3NDpcXHRcXHR9XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdC8qXFxuIDc3NzpcXHRcXHQgKiBBbiBlbXB0eSBtYXBwaW5nLXBhaXJzIGFycmF5IGlzIHZhbGlkIG9ubHkgZm9yIGEgemVyby1sZW5ndGhcXG4gNzc4OlxcdFxcdCAqIGF0dHJpYnV0ZS5cXG4gNzc5OlxcdFxcdCAqL1xcbiA3ODA6XFx0XFx0aWYgKCF2Y24gXFx1MDAyNlxcdTAwMjYgISpidWYgXFx1MDAyNlxcdTAwMjZcXG4gNzgxOlxcdFxcdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcXG4gNzgyOlxcdFxcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpIHx8XFxuIDc4MzpcXHRcXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSkgfHxcXG4gNzg0OlxcdFxcdCAgICAgbGU2NF90b19jcHUoYXR0ci1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XFxuIDc4NTpcXHRcXHRcXHRudGZzX2Vycm9yKHZvbC1cXHUwMDNlc2IsIFxcXCJJbnZhbGlkIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuXFxcIik7XFxuIDc4NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4gNzg3OlxcdFxcdH1cXG4gNzg4OlxcdFxcdGlmICghdmNuIFxcdTAwMjZcXHUwMDI2ICEqYnVmIFxcdTAwMjZcXHUwMDI2IG9sZF9ydW5saXN0IFxcdTAwMjZcXHUwMDI2IG9sZF9ydW5saXN0LVxcdTAwM2VybCkge1xcbiA3ODk6XFx0XFx0XFx0Km5ld19ybF9jb3VudCA9IG9sZF9ydW5saXN0LVxcdTAwM2Vjb3VudDtcXG4gNzkwOlxcdFxcdFxcdHJldHVybiBvbGRfcnVubGlzdC1cXHUwMDNlcmw7XFxuIDc5MTpcXHRcXHR9XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdC8qIEN1cnJlbnQgcG9zaXRpb24gaW4gcnVubGlzdCBhcnJheS4gKi9cXG4gNzk0OlxcdFxcdHJscG9zID0gMDtcXG4gNzk1OlxcdFxcdC8qIEFsbG9jYXRlIGZpcnN0IHBhZ2UgYW5kIHNldCBjdXJyZW50IHJ1bmxpc3Qgc2l6ZSB0byBvbmUgcGFnZS4gKi9cXG4gNzk2OlxcdFxcdHJsID0ga3Z6YWxsb2MocmxzaXplID0gUEFHRV9TSVpFLCBHRlBfTk9GUyk7XFxuIDc5NzpcXHRcXHRpZiAodW5saWtlbHkoIXJsKSlcXG4gNzk4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA3OTk6XFx0XFx0LyogSW5zZXJ0IHVubWFwcGVkIHN0YXJ0aW5nIGVsZW1lbnQgaWYgbmVjZXNzYXJ5LiAqL1xcbiA4MDA6XFx0XFx0aWYgKHZjbikge1xcbiA4MDE6XFx0XFx0XFx0cmwtXFx1MDAzZXZjbiA9IDA7XFxuIDgwMjpcXHRcXHRcXHRybC1cXHUwMDNlbGNuID0gTENOX1JMX05PVF9NQVBQRUQ7XFxuIDgwMzpcXHRcXHRcXHRybC1cXHUwMDNlbGVuZ3RoID0gdmNuO1xcbiA4MDQ6XFx0XFx0XFx0cmxwb3MrKztcXG4gODA1OlxcdFxcdH1cXG4gODA2OlxcdFxcdHdoaWxlIChidWYgXFx1MDAzYyBhdHRyX2VuZCBcXHUwMDI2XFx1MDAyNiAqYnVmKSB7XFxuIDgwNzpcXHRcXHRcXHQvKlxcbiA4MDg6XFx0XFx0XFx0ICogQWxsb2NhdGUgbW9yZSBtZW1vcnkgaWYgbmVlZGVkLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRoZVxcbiA4MDk6XFx0XFx0XFx0ICogbm90LW1hcHBlZCBhbmQgdGVybWluYXRvciBlbGVtZW50cy4ga3Z6YWxsb2MoKVxcbiA4MTA6XFx0XFx0XFx0ICogb3BlcmF0ZXMgb24gd2hvbGUgcGFnZXMgb25seS5cXG4gODExOlxcdFxcdFxcdCAqL1xcbiA4MTI6XFx0XFx0XFx0aWYgKCgocmxwb3MgKyAzKSAqIHNpemVvZigqcmwpKSBcXHUwMDNlIHJsc2l6ZSkge1xcbiA4MTM6XFx0XFx0XFx0XFx0c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqcmwyO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRcXHRcXHRybDIgPSBrdnphbGxvYyhybHNpemUgKyBQQUdFX1NJWkUsIEdGUF9OT0ZTKTtcXG4gODE2OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseSghcmwyKSkge1xcbiA4MTc6XFx0XFx0XFx0XFx0XFx0a3ZmcmVlKHJsKTtcXG4gODE4OlxcdFxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA4MTk6XFx0XFx0XFx0XFx0fVxcbiA4MjA6XFx0XFx0XFx0XFx0bWVtY3B5KHJsMiwgcmwsIHJsc2l6ZSk7XFxuIDgyMTpcXHRcXHRcXHRcXHRrdmZyZWUocmwpO1xcbiA4MjI6XFx0XFx0XFx0XFx0cmwgPSBybDI7XFxuIDgyMzpcXHRcXHRcXHRcXHRybHNpemUgKz0gUEFHRV9TSVpFO1xcbiA4MjQ6XFx0XFx0XFx0fVxcbiA4MjU6XFx0XFx0XFx0LyogRW50ZXIgdGhlIGN1cnJlbnQgdmNuIGludG8gdGhlIGN1cnJlbnQgcnVubGlzdCBlbGVtZW50LiAqL1xcbiA4MjY6XFx0XFx0XFx0cmxbcmxwb3NdLnZjbiA9IHZjbjtcXG4gODI3OlxcdFxcdFxcdC8qXFxuIDgyODpcXHRcXHRcXHQgKiBHZXQgdGhlIGNoYW5nZSBpbiB2Y24sIGkuZS4gdGhlIHJ1biBsZW5ndGggaW4gY2x1c3RlcnMuXFxuIDgyOTpcXHRcXHRcXHQgKiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQgd2Ugc2lnbmV4dGVuZCBuZWdhdGl2ZSB2YWx1ZXMuXFxuIDgzMDpcXHRcXHRcXHQgKiBBIG5lZ2F0aXZlIHJ1biBsZW5ndGggZG9lc24ndCBtYWtlIGFueSBzZW5zZSwgYnV0IGhleSwgSVxcbiA4MzE6XFx0XFx0XFx0ICogZGlkbid0IG1ha2UgdXAgdGhlIE5URlMgc3BlY3MgYW5kIFdpbmRvd3MgTlQ0IHRyZWF0cyB0aGUgcnVuXFxuIDgzMjpcXHRcXHRcXHQgKiBsZW5ndGggYXMgYSBzaWduZWQgdmFsdWUgc28gdGhhdCdzIGhvdyBpdCBpcy4uLlxcbiA4MzM6XFx0XFx0XFx0ICovXFxuIDgzNDpcXHRcXHRcXHRiID0gKmJ1ZiBcXHUwMDI2IDB4ZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MjIuNjUxNDMxOTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzI5MjQ4NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZpeCBmb3IgYSBQb3RlbnRpYWxseSBNYWxmb3JtZWQgTlRGUyBBdHRyaWJ1dGUgUmVjb3JkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IGFkZHJlc3NpbmcgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gaG93IGFuIE5URlMgYXR0cmlidXRlIHJlY29yZCAoYGF0dHJgKSBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtYXBwaW5nIHBhaXJzLiBUaGUgY29kZSBpcyByZWFkaW5nIHNldmVyYWwgZmllbGRzIGZyb20gdGhlIGBhdHRyYCBzdHJ1Y3R1cmU6IGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBhbmQgYGluaXRpYWxpemVkX3NpemVgLiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgYW4gb24tZGlzayBzdHJ1Y3R1cmUsIHNvIHRoZSBkYXRhIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSBzeXN0ZW0gcmVhZHMgZnJvbSB0aGUgZGlzay5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBhbiAqZW1wdHkqIG1hcHBpbmcgcGFpcnMgYXJyYXkuIFRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXM6IGlmIHRoZSBsb29wIGB3aGlsZSAoYnVmIFx1MDAzYyBhdHRyX2VuZCBcdTAwMjZcdTAwMjYgKmJ1ZilgIGlzIHNraXBwZWQgYmVjYXVzZSBgISpidWZgIGlzIHRydWUsIGEgY29uZGl0aW9uIGxhdGVyIGRvd24gdGhlIGxpbmUgbWF5IGVycm9yIG91dC4gTmFtZWx5LCBpZiBgdmNuYCBpcyBgbG93ZXN0X3ZjbmAsIHdoaWNoIG1heSBiZSAwLCB0aGVuIGB2Y24gLSAxYCB3b3VsZCBiZSBgLTFgLiBJZiBgZGVsdGF4Y25gIGlzIG5vdCAwLCB0aGVuIGB2Y24gLSAxICE9IGRlbHRheGNuYCBjb3VsZCBiZSB0cnVlLCByZXN1bHRpbmcgaW4gYW4gZXJyb3IuIEhvd2V2ZXIsIHRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gY2F0Y2ggdGhpcyBzcGVjaWZpYyBzY2VuYXJpbzpcblxuYGBgY1xuXHRpZiAoIXZjbiBcdTAwMjZcdTAwMjYgISpidWYgXHUwMDI2XHUwMDI2XG5cdCAgICAoZGVsdGF4Y24gIT0gLTEgfHxcblx0ICAgICBsZTY0X3RvX2NwdShhdHRyLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKSB8fFxuXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKSB8fFxuXHQgICAgIGxlNjRfdG9fY3B1KGF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuaW5pdGlhbGl6ZWRfc2l6ZSkpKSB7XG5cdFx0bnRmc19lcnJvcih2b2wtXHUwMDNlc2IsIFwiSW52YWxpZCBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5LlwiKTtcblx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcblx0fVxuYGBgXG5cblRoaXMgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgY2FzZSBvZiBhbiAqZW1wdHkqIG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYW4gTlRGUyBpbWFnZS4gSWYgaXTigJlzIHByb2Nlc3NlZCwgaXQgbWlnaHQgcmV0dXJuIGFuIGVtcHR5IHJ1bmxpc3QuIFRoZSBsb2dpYyBtYWtlcyBzZW5zZS4gSSBoYWQgYnJpZWZseSBjb25zaWRlcmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFzIHRoZSByb290IGNhdXNlLCBidXQgbm8uIFRoZSBgYXR0cmAgc3RydWN0dXJlIGlzIHJlYWQgZnJvbSBkaXNrLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIFRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIHdpdGggYGt2emFsbG9jYCwgd2hpY2ggemVyb3MgaXQgaW5pdGlhbGx5LlxuXG5UaGUgaXNzdWUgaXMgbGlrZWx5IGEgbG9naWMgZXJyb3IsIHBlcmhhcHMgc3RlbW1pbmcgZnJvbSBhbiBlbXB0eSBydW5saXN0IGJlaW5nIHJldHVybmVkIGR1ZSB0byBhIG1hbGZvcm1lZCBpbWFnZSwgd2hpY2ggY291bGQgdGhlbiBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBsYXRlciBvbiB3aGVuIHRoZSBydW5saXN0IGlzIHVzZWQuIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBmaWxlc3lzdGVtIGZ1enppbmcgYnVnIHRoYXQgS0FTQU4gb3IgYSBnZW5lcmFsIGNyYXNoIGNvdWxkIGVhc2lseSBjYXRjaC4gR2l2ZW4gd2hhdCBJJ20gc2VlaW5nLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlOyBLTVNBTiB3b3VsZG4ndCBiZSByZWxldmFudC4gVGhlIGJ1ZyBpcyBhbG1vc3QgY2VydGFpbmx5IGEgc3VidGxlIGZhaWx1cmUgdG8gaGFuZGxlIGEgcGVyZmVjdGx5IHZhbGlkIE5URlMgZm9ybWF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6MzA6MzUuOTgwNjgzNDU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTEzMzU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYXR0cl9yZWNvcmQgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9sYXlvdXQuaD03NjI9ZW51bSB7XFxuLS1cXG5mcy9udGZzL2xheW91dC5oLTgyNi0gKi9cXG5mcy9udGZzL2xheW91dC5oOjgyNzpzdHJ1Y3QgYXR0cl9yZWNvcmQge1xcbmZzL250ZnMvbGF5b3V0LmgtODI4LVxcdF9fbGUzMiB0eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDozNi4wNzE4NDA3MjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1Mjc5NDUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTlRGUyBNZXRhZGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBmcy9udGZzL2xheW91dC5oYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZSA4MjcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgbGF5b3V0IG9mIHRoZSBOVEZTIG1ldGFkYXRhIHN0cnVjdHVyZXMuIE15IGd1dCBmZWVsaW5nIGlzIEknbSBsb29raW5nIGZvciBhIHNwZWNpZmljIGF0dHJpYnV0ZSB0eXBlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGZpbGUgcmVjb3JkIHNlZ21lbnQgKEZSUykgaW5kZXhpbmcsIG9yIHBlcmhhcHMgZXZlbiB0aGUgYWxsb2NhdGlvbiBiaXRtYXAgc3RydWN0dXJlIHVzZWQgZm9yIHZvbHVtZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgJEJpdG1hcCBhdHRyaWJ1dGUuIEtub3dpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBoZWFkZXIgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgb24tZGlzayBkYXRhIG9yZ2FuaXphdGlvbiBpbiBhIGxpdmUgc2NlbmFyaW8sIG5vdCBqdXN0IHRoZW9yaXppbmcgYWJvdXQgZmlsZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgaXQgY291bGQgcmVsYXRlIHRvIHNvbWUgb2YgbXkgcHJldmlvdXMgcmVzZWFyY2ggb24gTWFzdGVyIEZpbGUgVGFibGUgKE1GVCkgaW5kZXhpbmcgYW5kIGF0dHJpYnV0ZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIG9yIHBvdGVudGlhbGx5IHRvIHRoZSBoYW5kbGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCdzIG9uIHRoYXQgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjQxLjAyNDYzODQxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjY2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9sYXlvdXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4Mjc6XFx0c3RydWN0IGF0dHJfcmVjb3JkIHtcXG4gODI4OlxcdFxcdF9fbGUzMiB0eXBlO1xcbiA4Mjk6XFx0XFx0X19sZTMyIGxlbmd0aDtcXG4gODMwOlxcdFxcdHU4IG5vbl9yZXNpZGVudDtcXG4gODMxOlxcdFxcdHU4IG5hbWVfbGVuZ3RoO1xcbiA4MzI6XFx0XFx0X19sZTE2IG5hbWVfb2Zmc2V0O1xcbiA4MzM6XFx0XFx0X19sZTE2IGZsYWdzO1xcbiA4MzQ6XFx0XFx0X19sZTE2IGluc3RhbmNlO1xcbiA4MzU6XFx0XFx0dW5pb24ge1xcbiA4MzY6XFx0XFx0XFx0c3RydWN0IHtcXG4gODM3OlxcdFxcdFxcdFxcdF9fbGUzMiB2YWx1ZV9sZW5ndGg7XFxuIDgzODpcXHRcXHRcXHRcXHRfX2xlMTYgdmFsdWVfb2Zmc2V0O1xcbiA4Mzk6XFx0XFx0XFx0XFx0dTggZmxhZ3M7XFxuIDg0MDpcXHRcXHRcXHRcXHRzOCByZXNlcnZlZDtcXG4gODQxOlxcdFxcdFxcdH0gX19wYWNrZWQgcmVzaWRlbnQ7XFxuIDg0MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA4NDM6XFx0XFx0XFx0XFx0X19sZTY0IGxvd2VzdF92Y247XFxuIDg0NDpcXHRcXHRcXHRcXHRfX2xlNjQgaGlnaGVzdF92Y247XFxuIDg0NTpcXHRcXHRcXHRcXHRfX2xlMTYgbWFwcGluZ19wYWlyc19vZmZzZXQ7XFxuIDg0NjpcXHRcXHRcXHRcXHR1OCBjb21wcmVzc2lvbl91bml0O1xcbiA4NDc6XFx0XFx0XFx0XFx0dTggcmVzZXJ2ZWRbNV07XFxuIDg0ODpcXHRcXHRcXHRcXHRfX2xlNjQgYWxsb2NhdGVkX3NpemU7XFxuIDg0OTpcXHRcXHRcXHRcXHRfX2xlNjQgZGF0YV9zaXplO1xcbiA4NTA6XFx0XFx0XFx0XFx0X19sZTY0IGluaXRpYWxpemVkX3NpemU7XFxuIDg1MTpcXHRcXHRcXHRcXHRfX2xlNjQgY29tcHJlc3NlZF9zaXplO1xcbiA4NTI6XFx0XFx0XFx0fSBfX3BhY2tlZCBub25fcmVzaWRlbnQ7XFxuIDg1MzpcXHRcXHR9IF9fcGFja2VkIGRhdGE7XFxuIDg1NDpcXHR9IF9fcGFja2VkO1xcbiA4NTU6XFx0XFxuIDg1NjpcXHQvKlxcbiA4NTc6XFx0ICogZW51bSAtIE5URlMgZmlsZSBhdHRyaWJ1dGUgZmxhZ3MgKDMyLWJpdClcXG4gODU4OlxcdCAqXFxuIDg1OTpcXHQgKiBGaWxlIGF0dHJpYnV0ZSBmbGFncyAoMzItYml0KSBhcHBlYXJpbmcgaW4gdGhlIGZpbGVfYXR0cmlidXRlcyBmaWVsZHMgb2YgdGhlXFxuIDg2MDpcXHQgKiBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMgYW5kIHRoZSBGSUxFTkFNRV9BVFRSXFxuIDg2MTpcXHQgKiBhdHRyaWJ1dGVzIG9mIE1GVF9SRUNPUkRzIGFuZCBkaXJlY3RvcnkgaW5kZXggZW50cmllcy5cXG4gODYyOlxcdCAqXFxuIDg2MzpcXHQgKiBBbGwgb2YgdGhlIGJlbG93IGZsYWdzIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IGluZGV4IGVudHJpZXMgYnV0IG9ubHkgc29tZVxcbiA4NjQ6XFx0ICogYXBwZWFyIGluIHRoZSBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgd2hpbHN0IG9ubHkgc29tZSBvdGhlcnMgYXBwZWFyXFxuIDg2NTpcXHQgKiBpbiB0aGUgRklMRU5BTUVfQVRUUiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMuICBVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCB0aGVcXG4gODY2OlxcdCAqIGZsYWdzIGFwcGVhciBpbiBhbGwgb2YgdGhlIGFib3ZlLlxcbiA4Njc6XFx0ICpcXG4gODY4OlxcdCAqIEZJTEVfQVRUUl9SRUFET05MWTogICAgICAgICBGaWxlIGlzIHJlYWQtb25seS5cXG4gODY5OlxcdCAqIEZJTEVfQVRUUl9ISURERU46ICAgICAgICAgICBGaWxlIGlzIGhpZGRlbiAobm90IHNob3duIGJ5IGRlZmF1bHQpLlxcbiA4NzA6XFx0ICogRklMRV9BVFRSX1NZU1RFTTogICAgICAgICAgIFN5c3RlbSBmaWxlIChwcm90ZWN0ZWQgYnkgT1MpLlxcbiA4NzE6XFx0ICogRklMRV9BVFRSX0RJUkVDVE9SWTogICAgICAgIERpcmVjdG9yeSBmbGFnIChyZXNlcnZlZCBpbiBOVDsgdXNlIE1GVCBmbGFnIGluc3RlYWQpLlxcbiA4NzI6XFx0ICogRklMRV9BVFRSX0FSQ0hJVkU6ICAgICAgICAgIEZpbGUgbmVlZHMgYXJjaGl2aW5nIChiYWNrdXAgZmxhZykuXFxuIDg3MzpcXHQgKiBGSUxFX0FUVFJfREVWSUNFOiAgICAgICAgICAgRGV2aWNlIGZpbGUgKHJhcmVseSB1c2VkKS5cXG4gODc0OlxcdCAqIEZJTEVfQVRUUl9OT1JNQUw6ICAgICAgICAgICBOb3JtYWwgZmlsZSAobm8gc3BlY2lhbCBhdHRyaWJ1dGVzKS5cXG4gODc1OlxcdCAqIEZJTEVfQVRUUl9URU1QT1JBUlk6ICAgICAgICBUZW1wb3JhcnkgZmlsZSAoZGVsZXRlIG9uIGNsb3NlKS5cXG4gODc2OlxcdCAqIEZJTEVfQVRUUl9TUEFSU0VfRklMRTogICAgICBTcGFyc2UgZmlsZSAoY29udGFpbnMgaG9sZXMpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzozMDo0MS4wMjQ5NjgxOTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0NjY2Nzc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUyBBdHRyaWJ1dGUgUmVjb3JkIElzc3VlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIE5URlMgYXR0cmlidXRlIHJlY29yZCBpc3N1ZSwgYW5kIGhlcmUncyBteSB0YWtlLiBJJ20gbG9va2luZyBhdCB0aGVzZSBmaWVsZHM6IGBoaWdoZXN0X3ZjbmAsIGBhbGxvY2F0ZWRfc2l6ZWAsIGBkYXRhX3NpemVgLCBhbmQgYGluaXRpYWxpemVkX3NpemVgLiBUaGV5IGFsbCBsaXZlIHdpdGhpbiB0aGUgYG5vbl9yZXNpZGVudGAgc3RydWN0LCBuZXN0ZWQgaW5zaWRlIHRoZSBgZGF0YWAgdW5pb24gb2YgdGhlIGBhdHRyX3JlY29yZGAuIFRoaXMgaXMgYW4gb24tZGlzayBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlbGxzIG1lIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgdm9sdW1lIGFjdHVhbGx5IGxpdmVzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGVyZSdzIG5vIHByb2JsZW0gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSDigJMgdGhhdCdzIGEgcmVsaWVmLiBUaGUgaGVhcnQgb2YgdGhlIHByb2JsZW0gYXBwZWFycyB0byBiZSBhIGxvZ2ljIGVycm9yLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzbid0IGNvcnJlY3RseSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBhbiBlbXB0eSBhcnJheSBsaWtlbHkgbWVhbnMgd2UgZW5kIHVwIHdpdGggZWl0aGVyIGFuIGVtcHR5IHJ1bmxpc3QsIG9yLCB3b3JzZSwgYW4gaW52YWxpZCBvbmUuIFRoYXQncyBhIHRpY2tpbmcgdGltZSBib21iISBJdCdzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gdHJpZ2dlciBhIGNyYXNoIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgcG9zc2libHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBldmVuIGFuIGVuZGxlc3MgbG9vcC5cblxuVGhhbmtmdWxseSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUsIEtlcm5lbCBBZGRyZXNzIFNBTml0aXplciAoS0FTQU4pIG9yIGV2ZW4gc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBjcmFzaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpcyB1bm5lY2Vzc2FyeSwgYXMgd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZmxhZyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBhbmQgSSdsbCBsYXkgb3V0IHRoaXMgcmF0aW9uYWxlIGNsZWFybHkuIFRoaXMgaXMgYWxsIGFib3V0IHBpbnBvaW50aW5nIGEgbG9naWMgYnVnIHRoYXQgcmVzdWx0cyBpbiBhIGJhZCBydW5saXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzU5LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjMwOjQ3Ljg3MTYzOTA0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIHdoZXJlIGFuIGVtcHR5IG1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gYSBub24tcmVzaWRlbnQgYXR0cmlidXRlIGNvdWxkIGJlIGltcHJvcGVybHkgcHJvY2Vzc2VkLiBUaGUgZmllbGRzIGJlaW5nIGFjY2Vzc2VkIChgaGlnaGVzdF92Y25gLCBgYWxsb2NhdGVkX3NpemVgLCBgZGF0YV9zaXplYCwgYGluaXRpYWxpemVkX3NpemVgKSBhcmUgcGFydCBvZiB0aGUgb24tZGlzayBgYXR0cl9yZWNvcmRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiByZWFkIGZyb20gdGhlIGRpc2svaW1hZ2UuIFRoZSBidWcgbGlrZWx5IGxlYWRzIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgcnVubGlzdCwgY2F1c2luZyBhIGNyYXNoIChzdWNoIGFzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSBsYXRlciBpbiB0aGUgZXhlY3V0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow464wp[1] Phase: Succeeded StartedAt: 2026-08-19 07:30:58 +0000 UTC FinishedAt: 2026-08-19 07:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 07:30:58 +0000 UTC FinishedAt: 2026-08-19 07:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2] Phase: Succeeded StartedAt: 2026-08-19 07:30:58 +0000 UTC FinishedAt: 2026-08-19 08:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 07:30:58 +0000 UTC FinishedAt: 2026-08-19 08:52:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 07:30:58 +0000 UTC FinishedAt: 2026-08-19 07:31:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 07:30:58 +0000 UTC FinishedAt: 2026-08-19 07:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow464wp/series-workflow464wp-convert-artifact-2946052165/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 07:31:08 +0000 UTC FinishedAt: 2026-08-19 07:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 07:31:08 +0000 UTC FinishedAt: 2026-08-19 07:47:24 +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:*c731297a-ca70-473e-b843-c8ce4d79b284,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-workflow464wp/series-workflow464wp-convert-artifact-2946052165/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": "25b9c123-1e24-41df-8561-5f3ae2122dce", "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-workflow464wp/series-workflow464wp-build-action-1452922603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 07:31:08 +0000 UTC FinishedAt: 2026-08-19 07:47:14 +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:*c731297a-ca70-473e-b843-c8ce4d79b284,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-workflow464wp/series-workflow464wp-convert-artifact-2946052165/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": "25b9c123-1e24-41df-8561-5f3ae2122dce", "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-workflow464wp/series-workflow464wp-build-action-1452922603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 07:47:24 +0000 UTC FinishedAt: 2026-08-19 07:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 07:47:24 +0000 UTC FinishedAt: 2026-08-19 07:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 07:47:24 +0000 UTC FinishedAt: 2026-08-19 07:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 07:47:24 +0000 UTC FinishedAt: 2026-08-19 07:47:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow464wp/series-workflow464wp-convert-artifact-3835979808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 07:47:34 +0000 UTC FinishedAt: 2026-08-19 07:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 07:47:34 +0000 UTC FinishedAt: 2026-08-19 07:49:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*25b9c123-1e24-41df-8561-5f3ae2122dce,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-workflow464wp/series-workflow464wp-build-action-1452922603/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-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 07:50:02 +0000 UTC FinishedAt: 2026-08-19 07:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 07:50:02 +0000 UTC FinishedAt: 2026-08-19 07:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 07:50:02 +0000 UTC FinishedAt: 2026-08-19 08:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 07:50:02 +0000 UTC FinishedAt: 2026-08-19 08:06:29 +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:*c731297a-ca70-473e-b843-c8ce4d79b284,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-workflow464wp/series-workflow464wp-convert-artifact-3835979808/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": "0ecd0b1f-4b32-4e28-8b3f-10cc9ca109df", "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-workflow464wp/series-workflow464wp-build-action-214261212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 07:50:02 +0000 UTC FinishedAt: 2026-08-19 08:06:19 +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:*c731297a-ca70-473e-b843-c8ce4d79b284,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-workflow464wp/series-workflow464wp-convert-artifact-3835979808/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": "0ecd0b1f-4b32-4e28-8b3f-10cc9ca109df", "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-workflow464wp/series-workflow464wp-build-action-214261212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 08:06:29 +0000 UTC FinishedAt: 2026-08-19 08:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 08:06:29 +0000 UTC FinishedAt: 2026-08-19 08:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 08:06:29 +0000 UTC FinishedAt: 2026-08-19 08:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 08:06:29 +0000 UTC FinishedAt: 2026-08-19 08:08:25 +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:*0ecd0b1f-4b32-4e28-8b3f-10cc9ca109df,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-workflow464wp/series-workflow464wp-build-action-214261212/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-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 08:08:35 +0000 UTC FinishedAt: 2026-08-19 08:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 08:08:35 +0000 UTC FinishedAt: 2026-08-19 08:52:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*25b9c123-1e24-41df-8561-5f3ae2122dce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ecd0b1f-4b32-4e28-8b3f-10cc9ca109df,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-workflow464wp/series-workflow464wp-build-action-1452922603/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-workflow464wp/series-workflow464wp-build-action-214261212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 08:08:35 +0000 UTC FinishedAt: 2026-08-19 08:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 08:08:35 +0000 UTC FinishedAt: 2026-08-19 08:08:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow464wp/series-workflow464wp-convert-artifact-2850588281/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 08:08:35 +0000 UTC FinishedAt: 2026-08-19 08:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 08:08:35 +0000 UTC FinishedAt: 2026-08-19 08:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 08:08:35 +0000 UTC FinishedAt: 2026-08-19 08:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 08:08:45 +0000 UTC FinishedAt: 2026-08-19 08:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow464wp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_mapping_pairs_decompress"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df7dce2090342170b7643d36f694204cae7792a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"6a418438-7234-4744-b150-9bd2917b4eab","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 08:08:45 +0000 UTC FinishedAt: 2026-08-19 08:52:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*25b9c123-1e24-41df-8561-5f3ae2122dce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ecd0b1f-4b32-4e28-8b3f-10cc9ca109df,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-workflow464wp/series-workflow464wp-build-action-1452922603/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-workflow464wp/series-workflow464wp-build-action-214261212/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-workflow464wp/series-workflow464wp-convert-artifact-2850588281/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,}