Name: series-workflow84w5c Phase: Succeeded StartedAt: 2026-08-31 16:47:27 +0000 UTC FinishedAt: 2026-08-31 18:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[0] Phase: Succeeded StartedAt: 2026-08-31 16:47:27 +0000 UTC FinishedAt: 2026-08-31 17:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 16:47:27 +0000 UTC FinishedAt: 2026-08-31 17:22:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb049bdbf2b98d103d93daef44a5e1a0164d01eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "9P_FS", "CIFS", "AFS_FS", "CEPH_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb049bdbf2b98d103d93daef44a5e1a0164d01eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "9P_FS", "CIFS", "AFS_FS", "CEPH_FS" ], "series_id": "66b0c2a1-cc45-4f4c-8482-d8221e5aab81" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_unbuffered_write_iter", "netfs_unbuffered_write_iter_locked", "netfs_file_write_iter" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGU19TVVBQT1JUJiMzNDssCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc19maWxlX3dyaXRlX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0cnkgcGF0aCBpbiBuZXRmcyB1bmJ1ZmZlcmVkIHdyaXRlIChgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIGB3cmVxLVx1MDAzZXRyYW5zZmVycmVkYCB3aGVuIGEgcGFydGlhbGx5IHRyYW5zZmVycmVkIHN1YnJlcXVlc3QgbmVlZHMgcmV0cnksIGNsZWFycyB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZywgYW5kIHNpbXBsaWZpZXMgcmV0cnkgcHJlcGFyYXRpb24gYnkgcmVtb3ZpbmcgYSByZWR1bmRhbnQgYG5ldGZzX3JlaXNzdWVfd3JpdGUoKWAgYnJhbmNoLiBcblxuVGhlc2UgY2hhbmdlcyBhcmUgc3RyaWN0bHkgaW50ZXJuYWwgc3RhdGUgYW5kIGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cyBmb3IgSS9PIHRyYWNraW5nIGFuZCBzdWJyZXF1ZXN0IHJldHJ5IGhhbmRsaW5nIGluIHRoZSBuZXRmcyBzdWJzeXN0ZW0uIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE2YmM3NzRiZmFkZjkwMDNiNzJkYzVjYjJiMmViNGI4ZTNjOGQzNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzowNzoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTY2LDEzICYjNDM7MTY2LDE2IEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcdFx0ICovXG4gXHRcdHN1YnJlcS1cdTAwM2VlcnJvciA9IC1FQUdBSU47XG4gXHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcbi1cdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMClcbiYjNDM7XHRcdGlmIChzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlIDApIHtcbiBcdFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCk7XG4mIzQzO1x0XHRcdHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgJiM0Mzs9IHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gXHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIFxuJiM0MztcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuQEAgLTE4NiwxNyAmIzQzOzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXG4gXHRcdG5ldGZzX2dldF9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9nZXRfcmVzdWJtaXQpO1xuIFxuLVx0XHRpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpIHtcbiYjNDM7XHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSlcbiBcdFx0XHRzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xuLVx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHN0cnVjdCBpb3ZfaXRlciBzb3VyY2U7XG4tXG4tXHRcdFx0bmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpO1xuLVx0XHRcdHNvdXJjZSA9IHN1YnJlcS1cdTAwM2Vpb19pdGVyO1xuLVx0XHRcdG5ldGZzX3JlaXNzdWVfd3JpdGUoc3RyZWFtLCBzdWJyZXEsIFx1MDAyNnNvdXJjZSk7XG4tXHRcdH1cbiYjNDM7XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XG4gXHR9XG4gXG4gXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE2YmM3NzRiZmFkZjkwMDNiNzJkYzVjYjJiMmViNGI4ZTNjOGQzNjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzowNzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKaW5kZXggZjlhYjY5ZGUzZTI5OC4uYzI4NzNlY2JlY2ViNiAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKQEAgLTE2NiwxMyAmIzQzOzE2NiwxNiBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAJCSAqLwogCQlzdWJyZXEtJmd0O2Vycm9yID0gLUVBR0FJTjsKIAkJdHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpOwotCQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApCiYjNDM7CQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApIHsKIAkJCWlvdl9pdGVyX2FkdmFuY2UoJmFtcDt3cmVxLSZndDtidWZmZXIuaXRlciwgc3VicmVxLSZndDt0cmFuc2ZlcnJlZCk7CiYjNDM7CQkJd3JlcS0mZ3Q7dHJhbnNmZXJyZWQgJiM0Mzs9IHN1YnJlcS0mZ3Q7dHJhbnNmZXJyZWQ7CiYjNDM7CQl9CiAKIAkJaWYgKHN0cmVhbS0mZ3Q7c291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgJmFtcDsmYW1wOwogCQkgICAgd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KQogCQkJd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KHdyZXEsIHN0cmVhbSk7CiAKJiM0MzsJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKIAkJX19jbGVhcl9iaXQoTkVURlNfU1JFUV9ORUVEX1JFVFJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0JPVU5EQVJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKQEAgLTE4NiwxNyAmIzQzOzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAKIAkJbmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7CiAKLQkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkgewomIzQzOwkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkKIAkJCXN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZShzdWJyZXEpOwotCQkJX19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsICZhbXA7c3VicmVxLSZndDtmbGFncyk7Ci0JCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGlvdl9pdGVyIHNvdXJjZTsKLQotCQkJbmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpOwotCQkJc291cmNlID0gc3VicmVxLSZndDtpb19pdGVyOwotCQkJbmV0ZnNfcmVpc3N1ZV93cml0ZShzdHJlYW0sIHN1YnJlcSwgJmFtcDtzb3VyY2UpOwotCQl9CiYjNDM7CQlfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKJiM0MzsJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7CiAJfQogCiAJbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3CgkJCQkJCQlvdXRwdXQ6IDEwMgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOZXRGUyBEaXJlY3QgV3JpdGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLiBNeSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBpbiB0aGUgYGZzL25ldGZzL2AgZGlyZWN0b3J5LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiBvZiB0aGUgb3RoZXIgZmlsZXMsIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgS2NvbmZpZ3MsIGFuZCBzZWUgaWYgYW55IHNwZWNpZmljIHN5bWJvbHMgYXJlIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gCgpPbmNlIEkmIzM5O3ZlIGdvdCBhIGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3MuIEkmIzM5O2xsIGJlIGxldmVyYWdpbmcgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCDigJMgY2xhc3NpYyB0b29scywgYnV0IHRoZXkmIzM5O2xsIGJlIGludmFsdWFibGUgaGVyZS4gSSB3YW50IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSAqZXhhY3QqIGNoYW5nZXMgbWFkZSBpbiBgZGlyZWN0X3dyaXRlLmNgIGFuZCwgZXZlbiBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSB0aG9zZSBjaGFuZ2VzIGFyZSBiZWluZyAqdXNlZCouIENvbnRleHQgaXMgZXZlcnl0aGluZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmaWxlIHN5c3RlbXMsIHNvIHRyYWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaXMgY3JpdGljYWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0XHRcdHJldHJ5ID0gdHJ1ZTtcbiAxNDE6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MjpcdFx0XHRcdHJldCA9IHN1YnJlcS1cdTAwM2VlcnJvcjtcbiAxNDM6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gcmV0O1xuIDE0NDpcdFx0XHRcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcbiAxNDU6XHRcdFx0XHRzdWJyZXEgPSBOVUxMO1xuIDE0NjpcdFx0XHRcdGJyZWFrO1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHRcdHJldCA9IDA7XG4gMTQ5Olx0XG4gMTUwOlx0XHRcdGlmICghcmV0cnkpIHtcbiAxNTE6XHRcdFx0XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xuIDE1MjpcdFx0XHRcdHN1YnJlcSA9IE5VTEw7XG4gMTUzOlx0XHRcdFx0aWYgKHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlPSB3cmVxLVx1MDAzZWxlbilcbiAxNTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDE1NTpcdFx0XHRcdGlmICghd3JlcS1cdTAwM2Vpb2NiIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuIDE1NjpcdFx0XHRcdFx0cmV0ID0gd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCA/IC1FSU5UUiA6IC1FUkVTVEFSVFNZUztcbiAxNTc6XHRcdFx0XHRcdHRyYWNlX25ldGZzX3JyZXEod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9pbnRyKTtcbiAxNTg6XHRcdFx0XHRcdGJyZWFrO1xuIDE1OTpcdFx0XHRcdH1cbiAxNjA6XHRcdFx0XHRjb250aW51ZTtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0XHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxuIDE2NDpcdFx0XHQgKiBpdGVyYXRvciwgdGFraW5nIGludG8gYWNjb3VudCB3aGF0LCBpZiBhbnl0aGluZywgd2UgbWFuYWdlZFxuIDE2NTpcdFx0XHQgKiB0byB0cmFuc2Zlci5cbiAxNjY6XHRcdFx0ICovXG4gMTY3Olx0XHRcdHN1YnJlcS1cdTAwM2VlcnJvciA9IC1FQUdBSU47XG4gMTY4Olx0XHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcbiAxNjk6XHRcdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMCkge1xuIDE3MDpcdFx0XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIuaXRlciwgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiAxNzE6XHRcdFx0XHR3cmVxLVx1MDAzZXRyYW5zZmVycmVkICYjNDM7PSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTcyOlx0XHRcdH1cbiAxNzM6XHRcbiAxNzQ6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiAxNzU6XHRcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gMTc2Olx0XHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIDE3NzpcdFxuIDE3ODpcdFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTc5Olx0XHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODA6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODE6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTgyOlx0XHRcdHN1YnJlcS1cdTAwM2Vpb19pdGVyXHRcdD0gd3JlcS1cdTAwM2VidWZmZXIuaXRlcjtcbiAxODM6XHRcdFx0c3VicmVxLVx1MDAzZXN0YXJ0XHRcdD0gd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuIDE4NDpcdFx0XHRzdWJyZXEtXHUwMDNlbGVuXHRcdD0gd3JlcS1cdTAwM2VsZW4gICAtIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTg1Olx0XHRcdHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZFx0PSAwO1xuIDE4NjpcdFx0XHRzdWJyZXEtXHUwMDNlcmV0cnlfY291bnRcdCYjNDM7PSAxO1xuIDE4NzpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfbGVuXHQ9IFVJTlRfTUFYO1xuIDE4ODpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfc2Vnc1x0PSBJTlRfTUFYO1xuIDE4OTpcdFxuIDE5MDpcdFx0XHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcbiAxOTE6XHRcbiAxOTI6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKVxuIDE5MzpcdFx0XHRcdHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XG4gMTk0Olx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIDE5NTpcdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiAxOTY6XHRcdH1cbiAxOTc6XHRcbiAxOTg6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbiAxOTk6XHRcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiAyMDA6XHRcdHJldHVybiByZXQ7XG4gMjAxOlx0fVxuIDIwMjpcdFxuIDIwMzpcdHN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDIwNDpcdHtcbiAyMDU6XHRcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcbiAyMDY6XHRcbiAyMDc6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG4gMjA4Olx0XHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XG4gMjA5Olx0fVxuIDIxMDpcdFxuIDIxMTpcdC8qXG4gMjEyOlx0ICogUGVyZm9ybSBhbiB1bmJ1ZmZlcmVkIHdyaXRlIHdoZXJlIHdlIG1heSBoYXZlIHRvIGRvIGFuIFJNVyBvcGVyYXRpb24gb24gYW5cbiAyMTM6XHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXG4gMjE0Olx0ICovXG4gMjE1Olx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIDIxNjpcdFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcTtcbiAyMTk6XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBORVRGU19TVVBQT1JUXG4gICA0Olx0XHR0cmlzdGF0ZVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIGluY2x1ZGluZ1xuICAgNzpcdFx0ICBoZWxwZXJzIGZvciBoaWdoLWxldmVsIGJ1ZmZlcmVkIEkvTywgYWJzdHJhY3Rpbmcgb3V0IHJlYWRcbiAgIDg6XHRcdCAgc2VnbWVudGF0aW9uLCBsb2NhbCBjYWNoaW5nIGFuZCB0cmFuc3BhcmVudCBodWdlIHBhZ2Ugc3VwcG9ydC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkVURlNfU1RBVFNcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7R2F0aGVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIG9uIGxvY2FsIGNhY2hpbmdcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBjYXVzZXMgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gdG8gYmUgZ2F0aGVyZWQgb24gbG9jYWxcbiAgMTU6XHRcdCAgY2FjaGluZyBhbmQgZXhwb3J0ZWQgdGhyb3VnaCBmaWxlOlxuICAxNjpcdFxuICAxNzpcdFx0XHQvcHJvYy9mcy9mc2NhY2hlL3N0YXRzXG4gIDE4Olx0XG4gIDE5Olx0XHQgIFRoZSBnYXRoZXJpbmcgb2Ygc3RhdGlzdGljcyBhZGRzIGEgY2VydGFpbiBhbW91bnQgb2Ygb3ZlcmhlYWQgdG9cbiAgMjA6XHRcdCAgZXhlY3V0aW9uIGFzIHRoZXJlIGFyZSBhIHF1aXRlIGEgZmV3IHN0YXRzIGdhdGhlcmVkLCBhbmQgb24gYVxuICAyMTpcdFx0ICBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcCBib3VuY2luZ1xuICAyMjpcdFx0ICBiZXR3ZWVuIENQVXMuICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHN0YXRzIGFyZSB2ZXJ5IHVzZWZ1bCBmb3JcbiAgMjM6XHRcdCAgZGVidWdnaW5nIHB1cnBvc2VzLiAgU2F5aW5nICYjMzk7WSYjMzk7IGhlcmUgaXMgcmVjb21tZW5kZWQuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIE5FVEZTX0RFQlVHXG4gIDI2Olx0XHRib29sIFwmIzM0O0VuYWJsZSBkeW5hbWljIGRlYnVnZ2luZyBuZXRmc2xpYiBhbmQgRlMtQ2FjaGVcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVFxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIHBlcm1pdHMgZGVidWdnaW5nIHRvIGJlIGR5bmFtaWNhbGx5IGVuYWJsZWQgaW4gdGhlIGxvY2FsIGNhY2hpbmdcbiAgMzA6XHRcdCAgbWFuYWdlbWVudCBtb2R1bGUuICBJZiB0aGlzIGlzIHNldCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgbWF5IGJlXG4gIDMxOlx0XHQgIGVuYWJsZWQgYnkgc2V0dGluZyBiaXRzIGluIC9zeXMvbW9kdWxlL25ldGZzL3BhcmFtZXRlcnMvZGVidWcuXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIEZTQ0FDSEVcbiAgMzQ6XHRcdGJvb2wgXCYjMzQ7R2VuZXJhbCBmaWxlc3lzdGVtIGxvY2FsIGNhY2hpbmcgbWFuYWdlclwmIzM0O1xuICAzNTpcdFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBnZW5lcmljIGZpbGVzeXN0ZW0gY2FjaGluZyBtYW5hZ2VyIHRoYXQgY2FuIGJlXG4gIDM4Olx0XHQgIHVzZWQgYnkgdmFyaW91cyBuZXR3b3JrIGFuZCBvdGhlciBmaWxlc3lzdGVtcyB0byBjYWNoZSBkYXRhIGxvY2FsbHkuXG4gIDM5Olx0XHQgIERpZmZlcmVudCBzb3J0cyBvZiBjYWNoZXMgY2FuIGJlIHBsdWdnZWQgaW4sIGRlcGVuZGluZyBvbiB0aGVcbiAgNDA6XHRcdCAgcmVzb3VyY2VzIGF2YWlsYWJsZS5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgRlNDQUNIRV9TVEFUU1xuICA0NTpcdFx0Ym9vbCBcJiMzNDtHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1wmIzM0O1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBGU0NBQ0hFIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG4gIDQ3Olx0XHRzZWxlY3QgTkVURlNfU1RBVFNcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgVGhpcyBvcHRpb24gY2F1c2VzIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIG9uIGxvY2FsXG4gIDUwOlx0XHQgIGNhY2hpbmcgYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02Ni1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTUte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1MC1cdFx0aWYgKCFyZXRyeSkge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTUxOlx0XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTItXHRcdFx0c3VicmVxID0gTlVMTDtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTctXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxOTg6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTktXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAzOnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA0LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMDc6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA4LVx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfY29tcGxldGUpO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4NC1cdGlmIChhc3luYykge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg1Olx0XHRJTklUX1dPUksoXHUwMDI2d3JlcS1cdTAwM2V3b3JrLCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cdFx0d3JlcS1cdTAwM2Vpb2NiID0gaW9jYjtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODktXHR9IGVsc2Uge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjkwOlx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkxLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMwODpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA5LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzExOiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTItICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyMi0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMyMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzc5LVx0XHRcdCAgIEZTQ0FDSEVfSU5WQUxfRElPX1dSSVRFKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MDpcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtb3V0OlxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NC19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODU6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgYWxvdWQgYXMgSSBnbzoKCioqSW52ZXN0aWdhdGluZyBOZXRmcyBVbmJ1ZmZlcmVkIFdyaXRlIEl0ZXJhdGlvbioqCgpSaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXRoaW5nIHRoYXQgY2FsbHMgaXQgZGlyZWN0bHksIG9yIGV2ZW4gaW50ZXJhY3RzIHdpdGggaXQgaW5kaXJlY3RseSB0aHJvdWdoICYjMzQ7bmV0ZnMgZGlyZWN0IHdyaXRlJiMzNDsgb3BlcmF0aW9ucy4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIGRpZyB0aHJvdWdoIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9uIHBvaW50cy4gVGhlIHNwZWNpZmljcyBvZiB0aGUgc2VhcmNoIHRlcm1zIGFyZSBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHVzZS4gVGhpcyBjb3VsZCB1bmNvdmVyIHNvbWUgZGVzaWduIHBhdHRlcm5zIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zNzE9ZmlsZXN5c3RlbSBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgVkZTIHJlYWQvd3JpdGVfaXRlciBtZXRob2RzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3Ni1cdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDozNzc6XHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3OC1cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0PTM5Nz1UaGVyZSBhcmUgdGhyZWUgZnVuY3Rpb25zIGZvciB3cml0ZXM6OlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDAyLVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0MDM6XHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwNC1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbi0tXG5mcy85cC92ZnNfZmlsZS5jPTQwMT12OWZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy85cC92ZnNfZmlsZS5jLTQwOC1cdGlmIChmaWQtXHUwMDNlbW9kZSBcdTAwMjYgKFA5TF9ESVJFQ1QgfCBQOUxfTk9XUklURUNBQ0hFKSlcbmZzLzlwL3Zmc19maWxlLmM6NDA5Olx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvOXAvdmZzX2ZpbGUuYy00MTAtXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjAzPXN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwNy19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwOS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMC0vKipcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEyLSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjM6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjQte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM3OS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODA6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgxLW91dDpcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODQtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg1OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0yOTU5PXNzaXplX3QgY2lmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMjk2Ni1cdGlmIChpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpIHtcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjI5Njc6XHRcdHdyaXR0ZW4gPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0yOTY4LVx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgQ0lGU19DQUNIRV9SRUFEKGNpbm9kZSkpIHtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMzIzPXN0YXRpYyBpbnQgY2lmc19zd2FwX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzMjktXHRlbHNlXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzMwOlx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGl0ZXIsIE5VTEwpO1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzMzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTM5OT1zc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMC1cdFx0XHRcdFx0IHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDAyOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MDMtXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBmcy9uZXRmcyBNYWtlZmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIGBNYWtlZmlsZWAgaW4gYGZzL25ldGZzYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIG5ldHdvcmtpbmcgZmlsZXN5c3RlbSBpcyBjb25zdHJ1Y3RlZCwgbWFuYWdlZCwgYW5kIGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3VzcGVjdHM6IG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgbGlua2luZyBydWxlcywgbW9kdWxlIGRlZmluaXRpb25zLCBhbmQgaG9wZWZ1bGx5IHNvbWUgY2xldmVyIHVzZSBvZiBrZXJuZWwgYnVpbGQgc3lzdGVtIG1hY3Jvcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGV5JiMzOTtyZSB1c2luZyBhbnkgY3VzdG9tIG1ha2UgdmFyaWFibGVzIG9yIHRyaWNrcyB0byBvcHRpbWl6ZSB0aGUgYnVpbGQgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhleSBoYW5kbGUgdGhpbmdzIGxpa2UgcHJvdG9jb2wgc2VsZWN0aW9uIChpZiBpdCYjMzk7cyBtb2R1bGFyKSwgYW55IHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIGhvdyB0aGV5JiMzOTt2ZSBpbnRlZ3JhdGVkIHRoZWlyIGZpbGVzeXN0ZW0gaW50byB0aGUgdmlydHVhbCBmaWxlc3lzdGVtIGxheWVyIChgVkZTYCkuIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kgYW5kIGlkZW50aWZ5IGFueSBhcmVhcyByaXBlIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzIG9yIGFyZWFzIHRvIGF2b2lkIGluIG15IG93biBmdXR1cmUgYnVpbGRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZXRmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRuZXRmcy15IDo9IFxcXG4gICA0Olx0XHRidWZmZXJlZF9yZWFkLm8gXFxcbiAgIDU6XHRcdGJ1ZmZlcmVkX3dyaXRlLm8gXFxcbiAgIDY6XHRcdGRpcmVjdF9yZWFkLm8gXFxcbiAgIDc6XHRcdGRpcmVjdF93cml0ZS5vIFxcXG4gICA4Olx0XHRpdGVyYXRvci5vIFxcXG4gICA5Olx0XHRsb2NraW5nLm8gXFxcbiAgMTA6XHRcdG1haW4ubyBcXFxuICAxMTpcdFx0bWlzYy5vIFxcXG4gIDEyOlx0XHRvYmplY3RzLm8gXFxcbiAgMTM6XHRcdHJlYWRfY29sbGVjdC5vIFxcXG4gIDE0Olx0XHRyZWFkX3BncHJpdjIubyBcXFxuICAxNTpcdFx0cmVhZF9yZXRyeS5vIFxcXG4gIDE2Olx0XHRyZWFkX3NpbmdsZS5vIFxcXG4gIDE3Olx0XHRyb2xsaW5nX2J1ZmZlci5vIFxcXG4gIDE4Olx0XHR3cml0ZV9jb2xsZWN0Lm8gXFxcbiAgMTk6XHRcdHdyaXRlX2lzc3VlLm8gXFxcbiAgMjA6XHRcdHdyaXRlX3JldHJ5Lm9cbiAgMjE6XHRcbiAgMjI6XHRuZXRmcy0kKENPTkZJR19ORVRGU19TVEFUUykgJiM0Mzs9IHN0YXRzLm9cbiAgMjM6XHRcbiAgMjQ6XHRuZXRmcy0kKENPTkZJR19GU0NBQ0hFKSAmIzQzOz0gXFxcbiAgMjU6XHRcdGZzY2FjaGVfY2FjaGUubyBcXFxuICAyNjpcdFx0ZnNjYWNoZV9jb29raWUubyBcXFxuICAyNzpcdFx0ZnNjYWNoZV9pby5vIFxcXG4gIDI4Olx0XHRmc2NhY2hlX21haW4ubyBcXFxuICAyOTpcdFx0ZnNjYWNoZV92b2x1bWUub1xuICAzMDpcdFxuICAzMTpcdGlmZXEgKCQoQ09ORklHX1BST0NfRlMpLHkpXG4gIDMyOlx0bmV0ZnMtJChDT05GSUdfRlNDQUNIRSkgJiM0Mzs9IGZzY2FjaGVfcHJvYy5vXG4gIDMzOlx0ZW5kaWZcbiAgMzQ6XHRuZXRmcy0kKENPTkZJR19GU0NBQ0hFX1NUQVRTKSAmIzQzOz0gZnNjYWNoZV9zdGF0cy5vXG4gIDM1Olx0XG4gIDM2Olx0b2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpICYjNDM7PSBuZXRmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTkVURlNfU1VQUE9SVCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGBORVRGU19TVVBQT1JUYCBpbiB0aGlzIEtjb25maWcgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggS2NvbmZpZyBmaWxlcyB1dGlsaXplIGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIGJ1aWxkIGEgY2xlYXIgZGVwZW5kZW5jeSB0cmVlIGNlbnRlcmVkIGFyb3VuZCBgTkVURlNfU1VQUE9SVGAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBiZWNvbWUgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFjdGl2YXRlZCB3aGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBzZWxlY3Rpb24gb3IgZGVwZW5kZW5jZSBvY2N1cnMgYXQgYSBoaWdoLWxldmVsLCBwb3RlbnRpYWxseSBwdWxsaW5nIGluIGEgbGFyZ2VyIG5ldHdvcmsgc3Vic3lzdGVtLiBJJiMzOTtsbCBxdWlja2x5IG5lZWQgdG8gbWFwIG91dCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBlbmFibGluZyBvZiBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VwcG9ydCBhY3R1YWxseSAqbWVhbnMqIGF0IGEgY29uZmlnIGxldmVsLCBub3QganVzdCB3aGF0IGl0ICpzYXlzKiBpdCBtZWFucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNpZGUtZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWc9MzY9Q09ORklHX1FVT1RBPXlcbmFyY2gvY3NreS9jb25maWdzL2RlZmNvbmZpZzozNzpDT05GSUdfTkVURlNfU1VQUE9SVD1tXG5hcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWctMzgtQ09ORklHX0ZTQ0FDSEU9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTI4ND1DT05GSUdfQ1VTRT1tXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZzoyODU6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWctMjg2LUNPTkZJR19GU0NBQ0hFPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9waWMzMm16ZGFfZGVmY29uZmlnPTcwPUNPTkZJR19GVVNFX0ZTPW1cbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWc6NzE6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxuYXJjaC9taXBzL2NvbmZpZ3MvcGljMzJtemRhX2RlZmNvbmZpZy03Mi1DT05GSUdfRlNDQUNIRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnPTE3MD1DT05GSUdfQ1VTRT1tXG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWc6MTcxOkNPTkZJR19ORVRGU19TVVBQT1JUPW1cbmFyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZy0xNzItQ09ORklHX0ZTQ0FDSEU9eVxuLS1cbmZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcbi0tXG5mcy85cC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE5FVF85UFxuZnMvOXAvS2NvbmZpZzo1Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzLzlwL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfRExNKVx0XHQmIzQzOz0gZGxtL1xuLS1cbmZzL01ha2VmaWxlLTYzLSMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZVxuZnMvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpXHQmIzQzOz0gbmV0ZnMvXG5mcy9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfRVhUNF9GUylcdFx0JiM0Mzs9IGV4dDQvXG4tLVxuZnMvYWZzL0tjb25maWc9Mj1jb25maWcgQUZTX0ZTXG4tLVxuZnMvYWZzL0tjb25maWctNi1cdHNlbGVjdCBETlNfUkVTT0xWRVJcbmZzL2Fmcy9LY29uZmlnOjc6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvYWZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fS1JCNVxuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZz0zPWNvbmZpZyBDQUNIRUZJTEVTXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0ZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1wmIzM0O1xuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlQgXHUwMDI2XHUwMDI2IEZTQ0FDSEUgXHUwMDI2XHUwMDI2IEJMT0NLXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9jZXBoL0tjb25maWc9Mj1jb25maWcgQ0VQSF9GU1xuLS1cbmZzL2NlcGgvS2NvbmZpZy01LVx0c2VsZWN0IENFUEhfTElCXG5mcy9jZXBoL0tjb25maWc6NjpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9jZXBoL0tjb25maWctNy1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxuZnMvZXJvZnMvS2NvbmZpZzoxMjpcdHNlbGVjdCBORVRGU19TVVBQT1JUIGlmIEVST0ZTX0ZTX09OREVNQU5EXG5mcy9lcm9mcy9LY29uZmlnLTEzLVx0c2VsZWN0IFhYSEFTSCBpZiBFUk9GU19GU19YQVRUUlxuLS1cbmZzL25ldGZzL0tjb25maWctMi1cbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbi0tXG5mcy9uZXRmcy9LY29uZmlnPTEwPWNvbmZpZyBORVRGU19TVEFUU1xuZnMvbmV0ZnMvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7R2F0aGVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIG9uIGxvY2FsIGNhY2hpbmdcJiMzNDtcbmZzL25ldGZzL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlQgXHUwMDI2XHUwMDI2IFBST0NfRlNcbmZzL25ldGZzL0tjb25maWctMTMtXHRoZWxwXG4tLVxuZnMvbmV0ZnMvS2NvbmZpZz0yNT1jb25maWcgTkVURlNfREVCVUdcbmZzL25ldGZzL0tjb25maWctMjYtXHRib29sIFwmIzM0O0VuYWJsZSBkeW5hbWljIGRlYnVnZ2luZyBuZXRmc2xpYiBhbmQgRlMtQ2FjaGVcJiMzNDtcbmZzL25ldGZzL0tjb25maWc6Mjc6XHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlRcbmZzL25ldGZzL0tjb25maWctMjgtXHRoZWxwXG4tLVxuZnMvbmV0ZnMvS2NvbmZpZz0zMz1jb25maWcgRlNDQUNIRVxuZnMvbmV0ZnMvS2NvbmZpZy0zNC1cdGJvb2wgXCYjMzQ7R2VuZXJhbCBmaWxlc3lzdGVtIGxvY2FsIGNhY2hpbmcgbWFuYWdlclwmIzM0O1xuZnMvbmV0ZnMvS2NvbmZpZzozNTpcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy0zNi1cdGhlbHBcbi0tXG5mcy9uZXRmcy9NYWtlZmlsZT0zND1uZXRmcy0kKENPTkZJR19GU0NBQ0hFX1NUQVRTKSAmIzQzOz0gZnNjYWNoZV9zdGF0cy5vXG5mcy9uZXRmcy9NYWtlZmlsZS0zNS1cbmZzL25ldGZzL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKSAmIzQzOz0gbmV0ZnMub1xuLS1cbmZzL25mcy9LY29uZmlnPTE3Mz1jb25maWcgTkZTX0ZTQ0FDSEVcbi0tXG5mcy9uZnMvS2NvbmZpZy0xNzUtXHRkZXBlbmRzIG9uIE5GU19GU1xuZnMvbmZzL0tjb25maWc6MTc2Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzL25mcy9LY29uZmlnLTE3Ny1cdHNlbGVjdCBGU0NBQ0hFXG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnPTI9Y29uZmlnIENJRlNcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjEtXHRzZWxlY3QgT0lEX1JFR0lTVFJZXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjI6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIzLVx0aGVscFxuLS1cbm5ldC85cC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRfOVBcbm5ldC85cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQbGFuIDkgUmVzb3VyY2UgU2hhcmluZyBTdXBwb3J0ICg5UDIwMDApXCYjMzQ7XG5uZXQvOXAvS2NvbmZpZzo4Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbm5ldC85cC9LY29uZmlnLTktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc3CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDEwNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS2VybmVsIE5ldGZzIERpcmVjdCBXcml0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHVuYnVmZmVyZWQgd3JpdGUgcGF0aCBmb3IgbmV0d29yayBmaWxlc3lzdGVtcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgcmVsZXZhbnQgdG8gZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUy9TTUIsIEFGUywgYW5kIENlcGgsIHdoaWNoIGFyZSBhbGwgaW1wb3J0YW50IGZvciBuZXR3b3JrZWQgc3RvcmFnZSBhbmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB3aGVuIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCByZXRyaWVzIGEgc3VicmVxdWVzdCAoYHJldHJ5ID09IHRydWVgKSwgdGhlcmUgYXJlIHNldmVyYWwgbW9kaWZpY2F0aW9ucy4gVGhlIGNoYW5nZXMgdG8gYGlvdl9pdGVyX2FkdmFuY2VgIGFuZCBgd3JlcS0mZ3Q7dHJhbnNmZXJyZWRgIGxvb2sgc3RyYWlnaHRmb3J3YXJkLCBhY2NvdW50aW5nIGZvciB0cmFuc2ZlcnJlZCBkYXRhLiBUaGUgYWRkZWQgYF9fY2xlYXJfYml0YCBhbmQgY29uZGl0aW9uYWwgY2FsbCB0byBgc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlYCBhcmUgdGhlIG1vcmUgaW50ZXJlc3RpbmcgYXNwZWN0cy4gVGhlIHJlbW92YWwgb2YgdGhlIGBlbHNlYCBicmFuY2gsIGFuZCB0aGUgaW5zZXJ0aW9uIG9mIHdoYXQgYXBwZWFycyB0byBiZSBhIG1vcmUgZGVsaWJlcmF0ZSBwcmVwYXJhdGlvbiBzdGVwIHdpdGggYHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZWAgcG90ZW50aWFsbHkgaW5kaWNhdGUgYSBjaGFuZ2UgaW4gcmV0cnkgbG9naWMuIFRoaXMgY291bGQgYmUgc2lnbmlmaWNhbnQsIGJlY2F1c2UgdGhlIGNvZGUgcGF0aCBpcyBleGVjdXRlZCB3aXRoIGEgTlVMTCBgc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlYCB3aGljaCBjb3VsZCBiZSBhbiBpc3N1ZSwgYW5kIG5vdyBpdCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseS4KCk5vdywgaXMgdGhpcyByZWFjaGFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXRmcyBmdW5jdGlvbmFsaXR5IGFuZCwgYXNzdW1pbmcgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGBORVRGU19TVVBQT1JUYCBhcmUgZW5hYmxlZCwgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoLiBJcyBpdCByZWFjaGFibGUgaW4gUUVNVSBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFllcywgdGhyb3VnaCBhbnkgb2YgdGhlIG5ldHdvcmtlZCBmaWxlc3lzdGVtcyBJIG1lbnRpb25lZCDigJMgOXAsIENJRlMsIEFGUywgb3IgQ2VwaCwgYW5kIG9mIGNvdXJzZSB3aXRoIGRpcmVjdCBuZXRmcyB0ZXN0aW5nLgoKU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB1bmJ1ZmZlcmVkIHdyaXRlIHJldHJpZXMgYXJlIGhhbmRsZWQuIEEgc3VidGxlIGNoYW5nZSBpbiB0aGUgcmV0cnkgbG9naWMgY291bGQgaGF2ZSBhIGhpZ2ggaW1wYWN0IGluIHRlcm1zIG9mIHN0YWJpbGl0eSBvciBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggbmV0d29yayBmaWxlc3lzdGVtcy4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMgYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBGcm9tIHRoZSBjb2RlLCB0aGUgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgYXJlIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFuZCBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYC4gSSB3aWxsIGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGRpcmVjdF93cml0ZS5jIGFuZCBidWZmZXJlZF93cml0ZS5jIHRvIHZlcmlmeS4gTG9va2luZyBhdCB0aGUgc3ltYm9scywgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBhcmUgdGhlIG5vbi1zdGF0aWMgZXhwb3J0ZWQgZnVuY3Rpb25zLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCkkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgY29kZSBpcyByZWxldmFudCB0byBvdGhlciBjb2RlLgoKQ29uZmlnLXdpc2UsIGBORVRGU19TVVBQT1JUYCBpcyB0aGUgY29yZSwgYW5kIHRoZW4gZmlsZXN5c3RlbXMgc3VjaCBhcyBgOVBfRlNgLCBgQ0lGU2AsIGBBRlNfRlNgLCBhbmQgYENFUEhfRlNgIHNlbGVjdCBpdC4gVGhlIGtlcm5lbCBjb25maWcgY29uZmlybXMgdGhhdCBgTkVURlNfU1VQUE9SVGAgaXMgdHJpc3RhdGUgYW5kIHNlbGVjdGVkIGJ5IHRob3NlIGZpbGVzeXN0ZW1zLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hpY2ggbW9kdWxlcyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlLgoKU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBlbmFibGUgYE5FVEZTX1NVUFBPUlRgLCBhcyB3ZWxsIGFzIGF0IGxlYXN0IGA5UF9GU2AgYW5kIGBDSUZTYC4gYEFGU19GU2AgYW5kIGBDRVBIX0ZTYCBhcmUgYWxzbyBhcHBsaWNhYmxlIHRvIGV4cGFuZCB0ZXN0aW5nLgoKTm93LCBsZXQmIzM5O3MgY29uc3RydWN0IHRoZSBgc2V0LXJlc3VsdHNgIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMuIEkgd2lsbCBnZW5lcmF0ZSBhIGxpc3QgdG8gZ2l2ZSB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGUgaW5zdHJ1Y3Rpb25zLgoKLSAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKLSAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LCAmIzM0O25ldGZzX2ZpbGVfd3JpdGVfaXRlciYjMzQ7XWAKLSAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O05FVEZTX1NVUFBPUlQmIzM0OywgJiMzNDs5UF9GUyYjMzQ7LCAmIzM0O0NJRlMmIzM0OywgJiMzNDtBRlNfRlMmIzM0OywgJiMzNDtDRVBIX0ZTJiMzNDtdYAotICAgYFJlYXNvbmluZ2A6IEZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgcmV0cnkgaGFuZGxpbmcgbG9naWMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IG1lY2hhbmlzbSB3aXRoaW4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBtYWtpbmcgaXQgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBpbiBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLiBUaGlzIGFmZmVjdHMgdW5idWZmZXJlZCB3cml0ZXMgd2l0aGluIG5ldHdvcmtlZCBmaWxlc3lzdGVtcy4KCldpdGggdGhhdCwgSSYjMzk7bSBzYXRpc2ZpZWQuIEl0JiMzOTtzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTZiYzc3NGJmYWRmOTAwM2I3MmRjNWNiMmIyZWI0YjhlM2M4ZDM2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE3OjA3OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYwppbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NAotLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYwpAQCAtMTY2LDEzICYjNDM7MTY2LDE2IEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAkJICovCiAJCXN1YnJlcS0mZ3Q7ZXJyb3IgPSAtRUFHQUlOOwogCQl0cmFjZV9uZXRmc19zcmVxKHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9yZXRyeSk7Ci0JCWlmIChzdWJyZXEtJmd0O3RyYW5zZmVycmVkICZndDsgMCkKJiM0MzsJCWlmIChzdWJyZXEtJmd0O3RyYW5zZmVycmVkICZndDsgMCkgewogCQkJaW92X2l0ZXJfYWR2YW5jZSgmYW1wO3dyZXEtJmd0O2J1ZmZlci5pdGVyLCBzdWJyZXEtJmd0O3RyYW5zZmVycmVkKTsKJiM0MzsJCQl3cmVxLSZndDt0cmFuc2ZlcnJlZCAmIzQzOz0gc3VicmVxLSZndDt0cmFuc2ZlcnJlZDsKJiM0MzsJCX0KIAogCQlpZiAoc3RyZWFtLSZndDtzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiAmYW1wOyZhbXA7CiAJCSAgICB3cmVxLSZndDtuZXRmc19vcHMtJmd0O3JldHJ5X3JlcXVlc3QpCiAJCQl3cmVxLSZndDtuZXRmc19vcHMtJmd0O3JldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTsKIAomIzQzOwkJX19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksICZhbXA7c3VicmVxLSZndDtmbGFncyk7CiAJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksICZhbXA7c3VicmVxLSZndDtmbGFncyk7CiAJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwpAQCAtMTg2LDE3ICYjNDM7MTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAogCQluZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTsKIAotCQlpZiAoc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlKSB7CiYjNDM7CQlpZiAoc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlKQogCQkJc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlKHN1YnJlcSk7Ci0JCQlfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKLQkJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaW92X2l0ZXIgc291cmNlOwotCi0JCQluZXRmc19yZXNldF9pdGVyKHN1YnJlcSk7Ci0JCQlzb3VyY2UgPSBzdWJyZXEtJmd0O2lvX2l0ZXI7Ci0JCQluZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCAmYW1wO3NvdXJjZSk7Ci0JCX0KJiM0MzsJCV9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJbmV0ZnNfc3RhdCgmYW1wO25ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTsKIAl9CiAKIAluZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgY2hhbmdlLiBUaGUgcGF0Y2ggc3BlY2lmaWVzIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2AsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGVyZSBJJiMzOTtsbCBiZWdpbi4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGF0dGVudGlvbiBhcm91bmQgbGluZSAxNjYgaW4gdGhhdCBmaWxlLiBDb250ZXh0IGlzIGtpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0XHRcdHJldHJ5ID0gdHJ1ZTtcbiAxNDE6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MjpcdFx0XHRcdHJldCA9IHN1YnJlcS1cdTAwM2VlcnJvcjtcbiAxNDM6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gcmV0O1xuIDE0NDpcdFx0XHRcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcbiAxNDU6XHRcdFx0XHRzdWJyZXEgPSBOVUxMO1xuIDE0NjpcdFx0XHRcdGJyZWFrO1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHRcdHJldCA9IDA7XG4gMTQ5Olx0XG4gMTUwOlx0XHRcdGlmICghcmV0cnkpIHtcbiAxNTE6XHRcdFx0XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xuIDE1MjpcdFx0XHRcdHN1YnJlcSA9IE5VTEw7XG4gMTUzOlx0XHRcdFx0aWYgKHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlPSB3cmVxLVx1MDAzZWxlbilcbiAxNTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDE1NTpcdFx0XHRcdGlmICghd3JlcS1cdTAwM2Vpb2NiIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuIDE1NjpcdFx0XHRcdFx0cmV0ID0gd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCA/IC1FSU5UUiA6IC1FUkVTVEFSVFNZUztcbiAxNTc6XHRcdFx0XHRcdHRyYWNlX25ldGZzX3JyZXEod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9pbnRyKTtcbiAxNTg6XHRcdFx0XHRcdGJyZWFrO1xuIDE1OTpcdFx0XHRcdH1cbiAxNjA6XHRcdFx0XHRjb250aW51ZTtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0XHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxuIDE2NDpcdFx0XHQgKiBpdGVyYXRvciwgdGFraW5nIGludG8gYWNjb3VudCB3aGF0LCBpZiBhbnl0aGluZywgd2UgbWFuYWdlZFxuIDE2NTpcdFx0XHQgKiB0byB0cmFuc2Zlci5cbiAxNjY6XHRcdFx0ICovXG4gMTY3Olx0XHRcdHN1YnJlcS1cdTAwM2VlcnJvciA9IC1FQUdBSU47XG4gMTY4Olx0XHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcbiAxNjk6XHRcdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMCkge1xuIDE3MDpcdFx0XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIuaXRlciwgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiAxNzE6XHRcdFx0XHR3cmVxLVx1MDAzZXRyYW5zZmVycmVkICYjNDM7PSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTcyOlx0XHRcdH1cbiAxNzM6XHRcbiAxNzQ6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiAxNzU6XHRcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gMTc2Olx0XHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIDE3NzpcdFxuIDE3ODpcdFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTc5Olx0XHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODA6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODE6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTgyOlx0XHRcdHN1YnJlcS1cdTAwM2Vpb19pdGVyXHRcdD0gd3JlcS1cdTAwM2VidWZmZXIuaXRlcjtcbiAxODM6XHRcdFx0c3VicmVxLVx1MDAzZXN0YXJ0XHRcdD0gd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuIDE4NDpcdFx0XHRzdWJyZXEtXHUwMDNlbGVuXHRcdD0gd3JlcS1cdTAwM2VsZW4gICAtIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTg1Olx0XHRcdHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZFx0PSAwO1xuIDE4NjpcdFx0XHRzdWJyZXEtXHUwMDNlcmV0cnlfY291bnRcdCYjNDM7PSAxO1xuIDE4NzpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfbGVuXHQ9IFVJTlRfTUFYO1xuIDE4ODpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfc2Vnc1x0PSBJTlRfTUFYO1xuIDE4OTpcdFxuIDE5MDpcdFx0XHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcbiAxOTE6XHRcbiAxOTI6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKVxuIDE5MzpcdFx0XHRcdHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XG4gMTk0Olx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIDE5NTpcdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiAxOTY6XHRcdH1cbiAxOTc6XHRcbiAxOTg6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbiAxOTk6XHRcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiAyMDA6XHRcdHJldHVybiByZXQ7XG4gMjAxOlx0fVxuIDIwMjpcdFxuIDIwMzpcdHN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDIwNDpcdHtcbiAyMDU6XHRcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcbiAyMDY6XHRcbiAyMDc6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG4gMjA4Olx0XHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XG4gMjA5Olx0fVxuIDIxMDpcdFxuIDIxMTpcdC8qXG4gMjEyOlx0ICogUGVyZm9ybSBhbiB1bmJ1ZmZlcmVkIHdyaXRlIHdoZXJlIHdlIG1heSBoYXZlIHRvIGRvIGFuIFJNVyBvcGVyYXRpb24gb24gYW5cbiAyMTM6XHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXG4gMjE0Olx0ICovXG4gMjE1Olx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIDIxNjpcdFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcTtcbiAyMTk6XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjaGFuZ2luZy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIGhvdyB0aGUgYHRyYW5zZmVycmVkYCBjb3VudCBpcyBiZWluZyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHdyZXEtJmd0O3RyYW5zZmVycmVkYCBpcyBiZWluZyB1cGRhdGVkIGJ5IGFkZGluZyBgc3VicmVxLSZndDt0cmFuc2ZlcnJlZGAuIEFsb25nc2lkZSB0aGlzLCB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZyBpcyBiZWluZyBjbGVhcmVkLiBUaGUgaW50ZXJlc3RpbmcgcGFydCwgdGhvdWdoLCBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgY29uZGl0aW9uYWwgYnJhbmNoIHdpdGhpbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuIFRoZSBjb2RlIHRoYXQgcHJldmlvdXNseSBpbmNsdWRlZCBhbiBgaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSlgIGJsb2NrIGFuZCBhbiBgZWxzZWAgYnJhbmNoIGludm9sdmluZyBgbmV0ZnNfcmVpc3N1ZV93cml0ZWAgaXMgZ29uZS4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGdldCBtb3JlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBjaGFuZ2VzIHdlcmUgbWFkZS4gSSYjMzk7bGwgc2VhcmNoIGZvciByZWxhdGVkIGNvbW1pdCBtZXNzYWdlcywgZG9jdW1lbnRhdGlvbiwgb3IgYW55IG90aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCB3b3JrcyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vdGl2YXRpb25zIGJlaGluZCB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgdXNlZnVsIGhpc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02Ni1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTUte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1MC1cdFx0aWYgKCFyZXRyeSkge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTUxOlx0XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTItXHRcdFx0c3VicmVxID0gTlVMTDtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTctXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxOTg6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTktXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAzOnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA0LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMDc6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA4LVx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfY29tcGxldGUpO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4NC1cdGlmIChhc3luYykge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg1Olx0XHRJTklUX1dPUksoXHUwMDI2d3JlcS1cdTAwM2V3b3JrLCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cdFx0d3JlcS1cdTAwM2Vpb2NiID0gaW9jYjtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODktXHR9IGVsc2Uge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjkwOlx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkxLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMwODpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA5LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzExOiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTItICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyMi0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMyMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzc5LVx0XHRcdCAgIEZTQ0FDSEVfSU5WQUxfRElPX1dSSVRFKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MDpcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtb3V0OlxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NC19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODU6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGJlaGF2aW9yIG9mIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4gTm8gc2hvcnRjdXRzLCBubyBza2ltbWluZyB0aGUgc3VyZmFjZS4gSSB3YW50IHRoZSAqd2hvbGUqIHBpY3R1cmUsIGV2ZXJ5IHNpbmdsZSBudWFuY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiB3aXRoIGEgdmVyeSBrZWVuIGV5ZS4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGZyb20gdGhlIGluaXRpYWwgaW5wdXQgcHJvY2Vzc2luZyBhbmQgY2hlY2tzLCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMsIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB3aGF0ZXZlciB0aGUgdW5kZXJseWluZyBuZXR3b3JrIEkvTyBtZWNoYW5pc20gaXMsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBmYWlsdXJlIHBhdGhzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHRoZSByb2xlIG9mIGFueSBjYWNoaW5nIGlmIGl0JiMzOTtzIHRoZXJlIGF0IGFsbCwgd2hhdCBpdCBtZWFucyBmb3IgYXRvbWljaXR5LCBhbmQgaG93IGl0IGJlaGF2ZXMgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIHRyYW5zcG9ydHMgb3IgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBmb2N1cyBwYXJ0aWN1bGFybHkgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYmVpbmcgJiMzNDt1bmJ1ZmZlcmVkLiYjMzQ7IEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIHByZWNpc2UgbWVudGFsIG1vZGVsIG9mIGl0cyBleGVjdXRpb24gcGF0aCwgaW5jbHVkaW5nIGFsbCBzaWRlIGVmZmVjdHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGFudGljaXBhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyB1bmRlciBkaWZmZXJlbnQgbG9hZHMgYW5kIHByZWRpY3QgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdCAqIGluIHRoZSBkYXRhIHdyaXR0ZW4gZHVlIHRvIGEgZmFpbHVyZSBzdWNoIGFzIEVOT1NQQy4gIFdlIGNvdWxkLCBob3dldmVyXG4gIDkxOlx0ICogYXR0ZW1wdCB0byBkbyBwcmVwYXJhdGlvbiBzdWNoIGFzIGNvbnRlbnQgZW5jcnlwdGlvbiBmb3IgdGhlIG5leHQgc3VicmVxXG4gIDkyOlx0ICogd2hpbHN0IHRoZSBjdXJyZW50IGlzIGluIHByb2dyZXNzLlxuICA5MzpcdCAqL1xuICA5NDpcdHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxID0gTlVMTDtcbiAgOTc6XHRcdHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSA9IFx1MDAyNndyZXEtXHUwMDNlaW9fc3RyZWFtc1swXTtcbiAgOTg6XHRcdGludCByZXQ7XG4gIDk5Olx0XG4gMTAwOlx0XHRfZW50ZXIoXCYjMzQ7JWxseFwmIzM0Oywgd3JlcS1cdTAwM2VsZW4pO1xuIDEwMTpcdFxuIDEwMjpcdFx0aWYgKHdyZXEtXHUwMDNlb3JpZ2luID09IE5FVEZTX0RJT19XUklURSlcbiAxMDM6XHRcdFx0aW5vZGVfZGlvX2JlZ2luKHdyZXEtXHUwMDNlaW5vZGUpO1xuIDEwNDpcdFxuIDEwNTpcdFx0c3RyZWFtLVx1MDAzZWNvbGxlY3RlZF90byA9IHdyZXEtXHUwMDNlc3RhcnQ7XG4gMTA2Olx0XG4gMTA3Olx0XHRmb3IgKDs7KSB7XG4gMTA4Olx0XHRcdGJvb2wgcmV0cnkgPSBmYWxzZTtcbiAxMDk6XHRcbiAxMTA6XHRcdFx0aWYgKCFzdWJyZXEpIHtcbiAxMTE6XHRcdFx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiAxMTI6XHRcdFx0XHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuIDExMzpcdFx0XHRcdHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3QgPSBOVUxMO1xuIDExNDpcdFx0XHR9XG4gMTE1Olx0XG4gMTE2Olx0XHRcdC8qIENoZWNrIGlmIChyZS0pcHJlcGFyYXRpb24gZmFpbGVkLiAqL1xuIDExNzpcdFx0XHRpZiAodW5saWtlbHkodGVzdF9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncykpKSB7XG4gMTE4Olx0XHRcdFx0bmV0ZnNfd3JpdGVfc3VicmVxdWVzdF90ZXJtaW5hdGVkKHN1YnJlcSwgc3VicmVxLVx1MDAzZWVycm9yKTtcbiAxMTk6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gc3VicmVxLVx1MDAzZWVycm9yO1xuIDEyMDpcdFx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0XHR9XG4gMTIyOlx0XG4gMTIzOlx0XHRcdGlvdl9pdGVyX3RydW5jYXRlKFx1MDAyNnN1YnJlcS1cdTAwM2Vpb19pdGVyLCB3cmVxLVx1MDAzZWxlbiAtIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuIDEyNDpcdFx0XHRpZiAoIWlvdl9pdGVyX2NvdW50KFx1MDAyNnN1YnJlcS1cdTAwM2Vpb19pdGVyKSlcbiAxMjU6XHRcdFx0XHRicmVhaztcbiAxMjY6XHRcbiAxMjc6XHRcdFx0c3VicmVxLVx1MDAzZWxlbiA9IG5ldGZzX2xpbWl0X2l0ZXIoXHUwMDI2c3VicmVxLVx1MDAzZWlvX2l0ZXIsIDAsXG4gMTI4Olx0XHRcdFx0XHRcdCAgICAgICBzdHJlYW0tXHUwMDNlc3JlcV9tYXhfbGVuLFxuIDEyOTpcdFx0XHRcdFx0XHQgICAgICAgc3RyZWFtLVx1MDAzZXNyZXFfbWF4X3NlZ3MpO1xuIDEzMDpcdFx0XHRpb3ZfaXRlcl90cnVuY2F0ZShcdTAwMjZzdWJyZXEtXHUwMDNlaW9faXRlciwgc3VicmVxLVx1MDAzZWxlbik7XG4gMTMxOlx0XHRcdHN0cmVhbS1cdTAwM2VzdWJtaXRfZXh0ZW5kYWJsZV90byA9IHN1YnJlcS1cdTAwM2VsZW47XG4gMTMyOlx0XG4gMTMzOlx0XHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3N1Ym1pdCk7XG4gMTM0Olx0XHRcdHN0cmVhbS1cdTAwM2Vpc3N1ZV93cml0ZShzdWJyZXEpO1xuIDEzNTpcdFxuIDEzNjpcdFx0XHQvKiBBc3luYywgbmVlZCB0byB3YWl0LiAqL1xuIDEzNzpcdFx0XHRuZXRmc193YWl0X2Zvcl9pbl9wcm9ncmVzc19zdHJlYW0od3JlcSwgc3RyZWFtKTtcbiAxMzg6XHRcbiAxMzk6XHRcdFx0aWYgKHRlc3RfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MDpcdFx0XHRcdHJldHJ5ID0gdHJ1ZTtcbiAxNDE6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MjpcdFx0XHRcdHJldCA9IHN1YnJlcS1cdTAwM2VlcnJvcjtcbiAxNDM6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gcmV0O1xuIDE0NDpcdFx0XHRcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MQoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiAxMDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBSZXRyeSBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCByZXRyeSBzY2VuYXJpby4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIHdoZW4gYSB3cml0ZSBvcGVyYXRpb24gbmVlZHMgdG8gYmUgcmV0cmllZC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHNlY3Rpb24gZGVhbGluZyB3aXRoIGByZXRyeSA9PSB0cnVlYC4KCkZpcnN0LCBJIG5vdGljZWQgYW4gb2Zmc2V0IGFjY291bnRpbmcgaXNzdWU6IGlmIGEgc3ViLXJlcXVlc3QgKGBzdWJyZXFgKSBoYWQgdHJhbnNmZXJyZWQgZGF0YSwgYnV0IGB3cmVxLSZndDt0cmFuc2ZlcnJlZGAgd2FzbiYjMzk7dCB1cGRhdGVkIGFjY29yZGluZ2x5LCB0aGVuIHN1YnNlcXVlbnQgY2FsY3VsYXRpb25zIGJhc2VkIG9uIGB3cmVxLSZndDt0cmFuc2ZlcnJlZGAgd291bGQgYmUgb2ZmLCBzcGVjaWZpY2FsbHksIGBzdWJyZXEtJmd0O3N0YXJ0ID0gd3JlcS0mZ3Q7c3RhcnQgJiM0Mzsgd3JlcS0mZ3Q7dHJhbnNmZXJyZWRgLiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgYHdyZXEtJmd0O3RyYW5zZmVycmVkICYjNDM7PSBzdWJyZXEtJmd0O3RyYW5zZmVycmVkYCwgd2hpY2ggY29ycmVjdHMgdGhlIG9mZnNldC4KCk5leHQsIEkgb2JzZXJ2ZWQgdGhhdCB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZyB3YXMgYmVpbmcgY2xlYXJlZCwgd2hpY2ggaXMgZXhwZWN0ZWQgYmVoYXZpb3IgZm9yIGEgcmV0cnkuIFRoZSBjb2RlIHRoZW4gcmUtaW5pdGlhbGl6ZXMgdGhlIGBzdWJyZXFgIGZvciB0aGUgcmV0cnksIGluY2x1ZGluZyB0aGUgSU8gaXRlcmF0b3IgYW5kIGNvdW50ZXJzLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gdGhlIHJldHJ5IGxvb3AsIEkgc2VlIHRoZSBjb2RlIHVzZWQgdG8gaGF2ZSBhbiBgZWxzZWAgYnJhbmNoIHRoYXQgZGlyZWN0bHkgY2FsbGVkIGBuZXRmc19yZWlzc3VlX3dyaXRlYC4gSG93ZXZlciwgY2FsbGluZyB0aGlzIGRpcmVjdGx5IHdpdGhpbiB0aGUgcmV0cnkgcGF0aCBjb3VsZCBsZWFkIHRvIGRvdWJsZSBpc3N1YW5jZSBvZiB3cml0ZSByZXF1ZXN0cyBvciBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gVGhlIGZpeCBpcyB0byByZW1vdmUgdGhpcyBjb25kaXRpb25hbCBjYWxsLiBJbnN0ZWFkLCBpZiBgc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlYCBpcyBwcmVzZW50LCBpdCBpcyBjYWxsZWQsIHRoZSBgTkVURlNfU1JFUV9JTl9QUk9HUkVTU2AgZmxhZyBpcyBzZXQsIGFuZCB0aGUgcmV0cnkgbG9vcCByZXN1Ym1pdHMgdGhlIHdyaXRlIG9wZXJhdGlvbiBjbGVhbmx5LiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhIHBvdGVudGlhbCBkb3VibGUtd3JpdGUgaXNzdWUgYW5kIGVuc3VyZXMgdGhlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbnMuCgpJJiMzOTt2ZSBhbHNvIHBlcmZvcm1lZCBhIHRob3JvdWdoIGNoZWNrIGZvciBtZW1vcnktcmVsYXRlZCBpc3N1ZXM6CgoqICAgKipBbGxvY2F0aW9uOioqIE5vIG5ldyBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgaGVyZS4KKiAgICoqVXNlcnNwYWNlIENvcHk6KiogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIHRoaXMgcGF0Y2guCiogICAqKlVuaW5pdGlhbGl6ZWQgRmllbGRzOioqIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgaW50cm9kdWNlZCBvciB1c2VkLgoqICAgKipVbmluaXRpYWxpemVkIEp1bXBzOioqIE5vIGNvbmRpdGlvbmFsIGp1bXBzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4KKiAgICoqRGF0YSBNYW5pcHVsYXRpb246KiogRXZlcnl0aGluZyBpcyBjb25maW5lZCB0byBleGlzdGluZyBzdHJ1Y3R1cmVzIChgbmV0ZnNfaW9fcmVxdWVzdGAsIGBuZXRmc19pb19zdWJyZXF1ZXN0YCwgZmxhZ3MsIGFuZCB2YXJpb3VzIGNvdW50ZXJzKS4KCkNvbnNpZGVyaW5nIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgSSBjYW4gY29uZmlybSB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiB0aGUgZmlsZXN5c3RlbSBJL08gYWNjb3VudGluZyBhbmQgcmV0cnkgc3RhdGUgbWFjaGluZS4gVGhlIGlkZW50aWZpZWQgYnVnIHJlbGF0ZXMgdG8gdGhlIGxvZ2ljYWwgZmxvdyBvZiByZXRyaWVzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gYW5kIHRoZSBjb250cm9sIGZsb3csIHByZXZlbnRpbmcgZG91YmxlIGlzc3VhbmNlIG9mIHJlcXVlc3RzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBLQVNBTiBjb3ZlcnMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiwgYW5kIHdpbGwgY29udGludWUgdG8gd29yayBub3JtYWxseS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpYy9zdGF0ZSBtYWNoaW5lLXJlbGF0ZWQgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDc6MTIuNDE2ODQ5OTU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2ODUyMjE1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZTX1NVUFBPUlRcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIkNFUEhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIixcbiAgICBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IHBhdGggaW4gbmV0ZnMgdW5idWZmZXJlZCB3cml0ZSAoYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBgd3JlcS1cXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGludGVybmFsIHN0YXRlIGFuZCBjb250cm9sIGZsb3cgYWRqdXN0bWVudHMgZm9yIEkvTyB0cmFja2luZyBhbmQgc3VicmVxdWVzdCByZXRyeSBoYW5kbGluZyBpbiB0aGUgbmV0ZnMgc3Vic3lzdGVtLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDc6MTIuNDE2ODU0NzM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI3MDE2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNmJjNzc0YmZhZGY5MDAzYjcyZGM1Y2IyYjJlYjRiOGUzYzhkMzY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDE3OjA3OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5pbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3VicmVxLVxcdTAwM2VlcnJvciA9IC1FQUdBSU47XFxuIFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4tXFx0XFx0aWYgKHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQgXFx1MDAzZSAwKVxcbitcXHRcXHRpZiAoc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbitcXHRcXHRcXHR3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoc3RyZWFtLVxcdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgd3JlcS1cXHUwMDNlbmV0ZnNfb3BzLVxcdTAwM2VyZXRyeV9yZXF1ZXN0KVxcbiBcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gXFxuK1xcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbkBAIC0xODYsMTcgKzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuIFxcbiBcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gXFxuLVxcdFxcdGlmIChzdHJlYW0tXFx1MDAzZXByZXBhcmVfd3JpdGUpIHtcXG4rXFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gXFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XFxuLVxcdFxcdFxcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyIHNvdXJjZTtcXG4tXFxuLVxcdFxcdFxcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcXG4tXFx0XFx0XFx0c291cmNlID0gc3VicmVxLVxcdTAwM2Vpb19pdGVyO1xcbi1cXHRcXHRcXHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcXHUwMDI2c291cmNlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRuZXRmc19zdGF0KFxcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XFxuIFxcdH1cXG4gXFxuIFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDc6MTIuODIwMjk5NzExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODEzNTU3NzA0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURlNfU1VQUE9SVFwiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfZmlsZV93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IGxvZ2ljIGluIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUgd2l0aGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gaGVscGVyIGxpYnJhcnkgKGZzL25ldGZzL2RpcmVjdF93cml0ZS5jKSwgdXBkYXRpbmcgYWNjb3VudGluZyBmb3IgdHJhbnNmZXJyZWQgYnl0ZXMgYW5kIGFkanVzdGluZyBob3cgcmV0cmllZCBzdWJyZXF1ZXN0cyBhcmUgc3VibWl0dGVkLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGRpcmVjdC91bmJ1ZmZlcmVkIHdyaXRlIG9wZXJhdGlvbnMgb24gbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIDlwLCBDSUZTLCBBRlMsIGFuZCBDZXBoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNmJjNzc0YmZhZGY5MDAzYjcyZGM1Y2IyYjJlYjRiOGUzYzhkMzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTc6MDc6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0XHQgKi9cbiBcdFx0c3VicmVxLVx1MDAzZWVycm9yID0gLUVBR0FJTjtcbiBcdFx0dHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpO1xuLVx0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKVxuK1x0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKSB7XG4gXHRcdFx0aW92X2l0ZXJfYWR2YW5jZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlci5pdGVyLCBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuK1x0XHRcdHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChzdHJlYW0tXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB3cmVxLVx1MDAzZW5ldGZzX29wcy1cdTAwM2VyZXRyeV9yZXF1ZXN0KVxuIFx0XHRcdHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcbiBcbitcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuQEAgLTE4NiwxNyArMTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcbiBcdFx0bmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7XG4gXG4tXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSkge1xuK1x0XHRpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpXG4gXHRcdFx0c3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUoc3VicmVxKTtcbi1cdFx0XHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgc291cmNlO1xuLVxuLVx0XHRcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcbi1cdFx0XHRzb3VyY2UgPSBzdWJyZXEtXHUwMDNlaW9faXRlcjtcbi1cdFx0XHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcdTAwMjZzb3VyY2UpO1xuLVx0XHR9XG4rXHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA3OjEyLjgyMDMwMjEyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1OTI3MjI2ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBOZXRGUyBEaXJlY3QgV3JpdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2AuIE15IHNwaWRleSBzZW5zZXMgYXJlIHRpbmdsaW5nIOKAkyB0aW1lIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB3aGF0J3MgZ29pbmcgb24gaGVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgaW4gdGhlIGBmcy9uZXRmcy9gIGRpcmVjdG9yeS4gSSdsbCB0YWtlIGEgcXVpY2sgc2NhbiBvZiB0aGUgb3RoZXIgZmlsZXMsIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgS2NvbmZpZ3MsIGFuZCBzZWUgaWYgYW55IHNwZWNpZmljIHN5bWJvbHMgYXJlIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gXG5cbk9uY2UgSSd2ZSBnb3QgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyZSwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3MuIEknbGwgYmUgbGV2ZXJhZ2luZyBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIOKAkyBjbGFzc2ljIHRvb2xzLCBidXQgdGhleSdsbCBiZSBpbnZhbHVhYmxlIGhlcmUuIEkgd2FudCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgKmV4YWN0KiBjaGFuZ2VzIG1hZGUgaW4gYGRpcmVjdF93cml0ZS5jYCBhbmQsIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgdGhvc2UgY2hhbmdlcyBhcmUgYmVpbmcgKnVzZWQqLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZSBzeXN0ZW1zLCBzbyB0cmFja2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGlzIGNyaXRpY2FsLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzcsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowODo0OC43NDc1MzEyOThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0XFx0XFx0cmV0cnkgPSB0cnVlO1xcbiAxNDE6XFx0XFx0XFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpKSB7XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSBzdWJyZXEtXFx1MDAzZWVycm9yO1xcbiAxNDM6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNlZXJyb3IgPSByZXQ7XFxuIDE0NDpcXHRcXHRcXHRcXHRuZXRmc19zZWVfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2Vfc2VlX2ZhaWxlZCk7XFxuIDE0NTpcXHRcXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbiAxNDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRpZiAoIXJldHJ5KSB7XFxuIDE1MTpcXHRcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbiAxNTI6XFx0XFx0XFx0XFx0c3VicmVxID0gTlVMTDtcXG4gMTUzOlxcdFxcdFxcdFxcdGlmICh3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlPSB3cmVxLVxcdTAwM2VsZW4pXFxuIDE1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU1OlxcdFxcdFxcdFxcdGlmICghd3JlcS1cXHUwMDNlaW9jYiBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbiAxNTY6XFx0XFx0XFx0XFx0XFx0cmV0ID0gd3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgPyAtRUlOVFIgOiAtRVJFU1RBUlRTWVM7XFxuIDE1NzpcXHRcXHRcXHRcXHRcXHR0cmFjZV9uZXRmc19ycmVxKHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfaW50cik7XFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNjE6XFx0XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRcXHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxcbiAxNjQ6XFx0XFx0XFx0ICogaXRlcmF0b3IsIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCwgaWYgYW55dGhpbmcsIHdlIG1hbmFnZWRcXG4gMTY1OlxcdFxcdFxcdCAqIHRvIHRyYW5zZmVyLlxcbiAxNjY6XFx0XFx0XFx0ICovXFxuIDE2NzpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWVycm9yID0gLUVBR0FJTjtcXG4gMTY4OlxcdFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4gMTY5OlxcdFxcdFxcdGlmIChzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkIFxcdTAwM2UgMCkge1xcbiAxNzA6XFx0XFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbiAxNzE6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTcyOlxcdFxcdFxcdH1cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXFx1MDAyNlxcdTAwMjZcXG4gMTc1OlxcdFxcdFxcdCAgICB3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3QpXFxuIDE3NjpcXHRcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE3OTpcXHRcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgwOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgxOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE4MjpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWlvX2l0ZXJcXHRcXHQ9IHdyZXEtXFx1MDAzZWJ1ZmZlci5pdGVyO1xcbiAxODM6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2VzdGFydFxcdFxcdD0gd3JlcS1cXHUwMDNlc3RhcnQgKyB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTg0OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlbGVuXFx0XFx0PSB3cmVxLVxcdTAwM2VsZW4gICAtIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbiAxODU6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZFxcdD0gMDtcXG4gMTg2OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlcmV0cnlfY291bnRcXHQrPSAxO1xcbiAxODc6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9sZW5cXHQ9IFVJTlRfTUFYO1xcbiAxODg6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9zZWdzXFx0PSBJTlRfTUFYO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gMTkzOlxcdFxcdFxcdFxcdHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xcbiAxOTQ6XFx0XFx0XFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTk1OlxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4gMTk2OlxcdFxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xcbiAxOTk6XFx0XFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIDIwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMDE6XFx0fVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcXG4gMjA4OlxcdFxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4gMjA5OlxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0LypcXG4gMjEyOlxcdCAqIFBlcmZvcm0gYW4gdW5idWZmZXJlZCB3cml0ZSB3aGVyZSB3ZSBtYXkgaGF2ZSB0byBkbyBhbiBSTVcgb3BlcmF0aW9uIG9uIGFuXFxuIDIxMzpcXHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXFxuIDIxNDpcXHQgKi9cXG4gMjE1OlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gMjE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4gMjE3OlxcdHtcXG4gMjE4OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxO1xcbiAyMTk6XFx0XFx0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0ID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowODo0OC43NDc2MjIyMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZXRmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBORVRGU19TVVBQT1JUXFxuICAgNDpcXHRcXHR0cmlzdGF0ZVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIGluY2x1ZGluZ1xcbiAgIDc6XFx0XFx0ICBoZWxwZXJzIGZvciBoaWdoLWxldmVsIGJ1ZmZlcmVkIEkvTywgYWJzdHJhY3Rpbmcgb3V0IHJlYWRcXG4gICA4OlxcdFxcdCAgc2VnbWVudGF0aW9uLCBsb2NhbCBjYWNoaW5nIGFuZCB0cmFuc3BhcmVudCBodWdlIHBhZ2Ugc3VwcG9ydC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVEZTX1NUQVRTXFxuICAxMTpcXHRcXHRib29sIFxcXCJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1xcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGNhdXNlcyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBsb2NhbFxcbiAgMTU6XFx0XFx0ICBjYWNoaW5nIGFuZCBleHBvcnRlZCB0aHJvdWdoIGZpbGU6XFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdFxcdC9wcm9jL2ZzL2ZzY2FjaGUvc3RhdHNcXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUaGUgZ2F0aGVyaW5nIG9mIHN0YXRpc3RpY3MgYWRkcyBhIGNlcnRhaW4gYW1vdW50IG9mIG92ZXJoZWFkIHRvXFxuICAyMDpcXHRcXHQgIGV4ZWN1dGlvbiBhcyB0aGVyZSBhcmUgYSBxdWl0ZSBhIGZldyBzdGF0cyBnYXRoZXJlZCwgYW5kIG9uIGFcXG4gIDIxOlxcdFxcdCAgbXVsdGktQ1BVIHN5c3RlbSB0aGVzZSBtYXkgYmUgb24gY2FjaGVsaW5lcyB0aGF0IGtlZXAgYm91bmNpbmdcXG4gIDIyOlxcdFxcdCAgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBzdGF0cyBhcmUgdmVyeSB1c2VmdWwgZm9yXFxuICAyMzpcXHRcXHQgIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFNheWluZyAnWScgaGVyZSBpcyByZWNvbW1lbmRlZC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIE5FVEZTX0RFQlVHXFxuICAyNjpcXHRcXHRib29sIFxcXCJFbmFibGUgZHluYW1pYyBkZWJ1Z2dpbmcgbmV0ZnNsaWIgYW5kIEZTLUNhY2hlXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFRoaXMgcGVybWl0cyBkZWJ1Z2dpbmcgdG8gYmUgZHluYW1pY2FsbHkgZW5hYmxlZCBpbiB0aGUgbG9jYWwgY2FjaGluZ1xcbiAgMzA6XFx0XFx0ICBtYW5hZ2VtZW50IG1vZHVsZS4gIElmIHRoaXMgaXMgc2V0LCB0aGUgZGVidWdnaW5nIG91dHB1dCBtYXkgYmVcXG4gIDMxOlxcdFxcdCAgZW5hYmxlZCBieSBzZXR0aW5nIGJpdHMgaW4gL3N5cy9tb2R1bGUvbmV0ZnMvcGFyYW1ldGVycy9kZWJ1Zy5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIEZTQ0FDSEVcXG4gIDM0OlxcdFxcdGJvb2wgXFxcIkdlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXJcXFwiXFxuICAzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlRcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoaW5nIG1hbmFnZXIgdGhhdCBjYW4gYmVcXG4gIDM4OlxcdFxcdCAgdXNlZCBieSB2YXJpb3VzIG5ldHdvcmsgYW5kIG90aGVyIGZpbGVzeXN0ZW1zIHRvIGNhY2hlIGRhdGEgbG9jYWxseS5cXG4gIDM5OlxcdFxcdCAgRGlmZmVyZW50IHNvcnRzIG9mIGNhY2hlcyBjYW4gYmUgcGx1Z2dlZCBpbiwgZGVwZW5kaW5nIG9uIHRoZVxcbiAgNDA6XFx0XFx0ICByZXNvdXJjZXMgYXZhaWxhYmxlLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBGU0NBQ0hFX1NUQVRTXFxuICA0NTpcXHRcXHRib29sIFxcXCJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1xcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gRlNDQUNIRSBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuICA0NzpcXHRcXHRzZWxlY3QgTkVURlNfU1RBVFNcXG4gIDQ4OlxcdFxcdGhlbHBcXG4gIDQ5OlxcdFxcdCAgVGhpcyBvcHRpb24gY2F1c2VzIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIG9uIGxvY2FsXFxuICA1MDpcXHRcXHQgIGNhY2hpbmcgYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDg6NDguNzQ3NjkzMDM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDgzMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4Mi1cXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlxcdFxcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTYte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6NjU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjk0OnN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05NS17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTAtXFx0XFx0aWYgKCFyZXRyeSkge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1MTpcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1Mi1cXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk3LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE5ODpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk5LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMzpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDQte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA2LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwNzpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC1cXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE1OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg0LVxcdGlmIChhc3luYykge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI4NTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNndyZXEtXFx1MDAzZXdvcmssIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cXHRcXHR3cmVxLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4OS1cXHR9IGVsc2Uge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI5MDpcXHRcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5MS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzIzOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zNzktXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MDpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4MS1vdXQ6XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODQtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4NTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA4OjQ4Ljc5NTc4NzY0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MzI1NTU1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB0aGlua2luZyBhbG91ZCBhcyBJIGdvOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZnMgVW5idWZmZXJlZCBXcml0ZSBJdGVyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXRoaW5nIHRoYXQgY2FsbHMgaXQgZGlyZWN0bHksIG9yIGV2ZW4gaW50ZXJhY3RzIHdpdGggaXQgaW5kaXJlY3RseSB0aHJvdWdoIFwibmV0ZnMgZGlyZWN0IHdyaXRlXCIgb3BlcmF0aW9ucy4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIGRpZyB0aHJvdWdoIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBzZWFyY2ggdGVybXMgYXJlIGNydWNpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgdXNlLiBUaGlzIGNvdWxkIHVuY292ZXIgc29tZSBkZXNpZ24gcGF0dGVybnMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjg4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDk6NDguMTIxMzQ2Mzc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODE4NTY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9MzcxPWZpbGVzeXN0ZW0gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIFZGUyByZWFkL3dyaXRlX2l0ZXIgbWV0aG9kczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3Ni1cXHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjM3NzpcXHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0PTM5Nz1UaGVyZSBhcmUgdGhyZWUgZnVuY3Rpb25zIGZvciB3cml0ZXM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDAzOlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG4tLVxcbmZzLzlwL3Zmc19maWxlLmM9NDAxPXY5ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYy00MDgtXFx0aWYgKGZpZC1cXHUwMDNlbW9kZSBcXHUwMDI2IChQOUxfRElSRUNUIHwgUDlMX05PV1JJVEVDQUNIRSkpXFxuZnMvOXAvdmZzX2ZpbGUuYzo0MDk6XFx0XFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy85cC92ZnNfZmlsZS5jLTQxMC1cXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY5PXNzaXplX3QgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXFx0ICAgIHRlc3RfYml0KE5FVEZTX0lDVFhfVU5CVUZGRVJFRCwgXFx1MDAyNmljdHgtXFx1MDAzZWZsYWdzKSlcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4MzpcXHRcXHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDg0LVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjAzPXN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE0LSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwNy19XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA5LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMC0vKipcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTE6ICogbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyIC0gVW5idWZmZXJlZCB3cml0ZSB0byBhIGZpbGVcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTItICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzIyLSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMyMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjQte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzc5LVxcdFxcdFxcdCAgIEZTQ0FDSEVfSU5WQUxfRElPX1dSSVRFKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODA6XFx0cmV0ID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChpb2NiLCBmcm9tLCBOVUxMKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtb3V0Olxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzg0LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODU6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9Mjk1OT1zc2l6ZV90IGNpZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMjk2Ni1cXHRpZiAoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fRElSRUNUKSB7XFxuZnMvc21iL2NsaWVudC9maWxlLmM6Mjk2NzpcXHRcXHR3cml0dGVuID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTI5NjgtXFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IENJRlNfQ0FDSEVfUkVBRChjaW5vZGUpKSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMzIzPXN0YXRpYyBpbnQgY2lmc19zd2FwX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzMyOS1cXHRlbHNlXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzMzMDpcXHRcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGl0ZXIsIE5VTEwpO1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9Mzk5PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cCk7XFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMjpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMy1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDk6NTAuMDAzMjExODM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MjEzMjE3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGZzL25ldGZzIE1ha2VmaWxlKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIGBNYWtlZmlsZWAgaW4gYGZzL25ldGZzYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUgbmV0d29ya2luZyBmaWxlc3lzdGVtIGlzIGNvbnN0cnVjdGVkLCBtYW5hZ2VkLCBhbmQgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN1c3BlY3RzOiBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGxpbmtpbmcgcnVsZXMsIG1vZHVsZSBkZWZpbml0aW9ucywgYW5kIGhvcGVmdWxseSBzb21lIGNsZXZlciB1c2Ugb2Yga2VybmVsIGJ1aWxkIHN5c3RlbSBtYWNyb3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGV5J3JlIHVzaW5nIGFueSBjdXN0b20gbWFrZSB2YXJpYWJsZXMgb3IgdHJpY2tzIHRvIG9wdGltaXplIHRoZSBidWlsZCBmb3IgZGlmZmVyZW50IG5ldHdvcmsgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIHByb3RvY29sIHNlbGVjdGlvbiAoaWYgaXQncyBtb2R1bGFyKSwgYW55IHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIGhvdyB0aGV5J3ZlIGludGVncmF0ZWQgdGhlaXIgZmlsZXN5c3RlbSBpbnRvIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0gbGF5ZXIgKGBWRlNgKS4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCB0aGUgb3ZlcmFsbCBidWlsZCBzdHJhdGVneSBhbmQgaWRlbnRpZnkgYW55IGFyZWFzIHJpcGUgZm9yIHBvdGVudGlhbCBpbXByb3ZlbWVudHMgb3IgYXJlYXMgdG8gYXZvaWQgaW4gbXkgb3duIGZ1dHVyZSBidWlsZHMuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDowOS45MjQ1MzcxODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmV0ZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG5ldGZzLXkgOj0gXFxcXFxcbiAgIDQ6XFx0XFx0YnVmZmVyZWRfcmVhZC5vIFxcXFxcXG4gICA1OlxcdFxcdGJ1ZmZlcmVkX3dyaXRlLm8gXFxcXFxcbiAgIDY6XFx0XFx0ZGlyZWN0X3JlYWQubyBcXFxcXFxuICAgNzpcXHRcXHRkaXJlY3Rfd3JpdGUubyBcXFxcXFxuICAgODpcXHRcXHRpdGVyYXRvci5vIFxcXFxcXG4gICA5OlxcdFxcdGxvY2tpbmcubyBcXFxcXFxuICAxMDpcXHRcXHRtYWluLm8gXFxcXFxcbiAgMTE6XFx0XFx0bWlzYy5vIFxcXFxcXG4gIDEyOlxcdFxcdG9iamVjdHMubyBcXFxcXFxuICAxMzpcXHRcXHRyZWFkX2NvbGxlY3QubyBcXFxcXFxuICAxNDpcXHRcXHRyZWFkX3BncHJpdjIubyBcXFxcXFxuICAxNTpcXHRcXHRyZWFkX3JldHJ5Lm8gXFxcXFxcbiAgMTY6XFx0XFx0cmVhZF9zaW5nbGUubyBcXFxcXFxuICAxNzpcXHRcXHRyb2xsaW5nX2J1ZmZlci5vIFxcXFxcXG4gIDE4OlxcdFxcdHdyaXRlX2NvbGxlY3QubyBcXFxcXFxuICAxOTpcXHRcXHR3cml0ZV9pc3N1ZS5vIFxcXFxcXG4gIDIwOlxcdFxcdHdyaXRlX3JldHJ5Lm9cXG4gIDIxOlxcdFxcbiAgMjI6XFx0bmV0ZnMtJChDT05GSUdfTkVURlNfU1RBVFMpICs9IHN0YXRzLm9cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0bmV0ZnMtJChDT05GSUdfRlNDQUNIRSkgKz0gXFxcXFxcbiAgMjU6XFx0XFx0ZnNjYWNoZV9jYWNoZS5vIFxcXFxcXG4gIDI2OlxcdFxcdGZzY2FjaGVfY29va2llLm8gXFxcXFxcbiAgMjc6XFx0XFx0ZnNjYWNoZV9pby5vIFxcXFxcXG4gIDI4OlxcdFxcdGZzY2FjaGVfbWFpbi5vIFxcXFxcXG4gIDI5OlxcdFxcdGZzY2FjaGVfdm9sdW1lLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0aWZlcSAoJChDT05GSUdfUFJPQ19GUykseSlcXG4gIDMyOlxcdG5ldGZzLSQoQ09ORklHX0ZTQ0FDSEUpICs9IGZzY2FjaGVfcHJvYy5vXFxuICAzMzpcXHRlbmRpZlxcbiAgMzQ6XFx0bmV0ZnMtJChDT05GSUdfRlNDQUNIRV9TVEFUUykgKz0gZnNjYWNoZV9zdGF0cy5vXFxuICAzNTpcXHRcXG4gIDM2OlxcdG9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKSArPSBuZXRmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjEwOjA5LjkyNDYxNTYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTI1MDkzNTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5FVEZTX1NVUFBPUlQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGBORVRGU19TVVBQT1JUYCBpbiB0aGlzIEtjb25maWcgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMuIEknbGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBLY29uZmlnIGZpbGVzIHV0aWxpemUgYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdG8gYnVpbGQgYSBjbGVhciBkZXBlbmRlbmN5IHRyZWUgY2VudGVyZWQgYXJvdW5kIGBORVRGU19TVVBQT1JUYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIGJlY29tZSBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYWN0aXZhdGVkIHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgc2VsZWN0aW9uIG9yIGRlcGVuZGVuY2Ugb2NjdXJzIGF0IGEgaGlnaC1sZXZlbCwgcG90ZW50aWFsbHkgcHVsbGluZyBpbiBhIGxhcmdlciBuZXR3b3JrIHN1YnN5c3RlbS4gSSdsbCBxdWlja2x5IG5lZWQgdG8gbWFwIG91dCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGVuYWJsaW5nIG9mIG5ldHdvcmsgZmlsZXN5c3RlbSBzdXBwb3J0IGFjdHVhbGx5ICptZWFucyogYXQgYSBjb25maWcgbGV2ZWwsIG5vdCBqdXN0IHdoYXQgaXQgKnNheXMqIGl0IG1lYW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2lkZS1lZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDo1MS4xNzU1NTQxNDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTA0NzU4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVURlNfU1VQUE9SVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWc9MzY9Q09ORklHX1FVT1RBPXlcXG5hcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWc6Mzc6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxcbmFyY2gvY3NreS9jb25maWdzL2RlZmNvbmZpZy0zOC1DT05GSUdfRlNDQUNIRT15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZz0yODQ9Q09ORklHX0NVU0U9bVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnOjI4NTpDT05GSUdfTkVURlNfU1VQUE9SVD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWctMjg2LUNPTkZJR19GU0NBQ0hFPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWc9NzA9Q09ORklHX0ZVU0VfRlM9bVxcbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWc6NzE6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxcbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWctNzItQ09ORklHX0ZTQ0FDSEU9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnPTE3MD1DT05GSUdfQ1VTRT1tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnOjE3MTpDT05GSUdfTkVURlNfU1VQUE9SVD1tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnLTE3Mi1DT05GSUdfRlNDQUNIRT15XFxuLS1cXG5mcy85cC9LY29uZmlnPTI9Y29uZmlnIDlQX0ZTXFxuLS1cXG5mcy85cC9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBORVRfOVBcXG5mcy85cC9LY29uZmlnOjU6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy85cC9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX0RMTSlcXHRcXHQrPSBkbG0vXFxuLS1cXG5mcy9NYWtlZmlsZS02My0jIERvIG5vdCBhZGQgYW55IGZpbGVzeXN0ZW1zIGJlZm9yZSB0aGlzIGxpbmVcXG5mcy9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVURlNfU1VQUE9SVClcXHQrPSBuZXRmcy9cXG5mcy9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfRVhUNF9GUylcXHRcXHQrPSBleHQ0L1xcbi0tXFxuZnMvYWZzL0tjb25maWc9Mj1jb25maWcgQUZTX0ZTXFxuLS1cXG5mcy9hZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBETlNfUkVTT0xWRVJcXG5mcy9hZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvYWZzL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0tSQjVcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZz0zPWNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgRlNDQUNIRSBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZz0yPWNvbmZpZyBDRVBIX0ZTXFxuLS1cXG5mcy9jZXBoL0tjb25maWctNS1cXHRzZWxlY3QgQ0VQSF9MSUJcXG5mcy9jZXBoL0tjb25maWc6NjpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL2NlcGgvS2NvbmZpZy03LVxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVCBpZiBFUk9GU19GU19PTkRFTUFORFxcbmZzL2Vyb2ZzL0tjb25maWctMTMtXFx0c2VsZWN0IFhYSEFTSCBpZiBFUk9GU19GU19YQVRUUlxcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZy0yLVxcbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxcbmZzL25ldGZzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZz0xMD1jb25maWcgTkVURlNfU1RBVFNcXG5mcy9uZXRmcy9LY29uZmlnLTExLVxcdGJvb2wgXFxcIkdhdGhlciBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBvbiBsb2NhbCBjYWNoaW5nXFxcIlxcbmZzL25ldGZzL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5mcy9uZXRmcy9LY29uZmlnLTEzLVxcdGhlbHBcXG4tLVxcbmZzL25ldGZzL0tjb25maWc9MjU9Y29uZmlnIE5FVEZTX0RFQlVHXFxuZnMvbmV0ZnMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJFbmFibGUgZHluYW1pYyBkZWJ1Z2dpbmcgbmV0ZnNsaWIgYW5kIEZTLUNhY2hlXFxcIlxcbmZzL25ldGZzL0tjb25maWc6Mjc6XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy0yOC1cXHRoZWxwXFxuLS1cXG5mcy9uZXRmcy9LY29uZmlnPTMzPWNvbmZpZyBGU0NBQ0hFXFxuZnMvbmV0ZnMvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJHZW5lcmFsIGZpbGVzeXN0ZW0gbG9jYWwgY2FjaGluZyBtYW5hZ2VyXFxcIlxcbmZzL25ldGZzL0tjb25maWc6MzU6XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy0zNi1cXHRoZWxwXFxuLS1cXG5mcy9uZXRmcy9NYWtlZmlsZT0zND1uZXRmcy0kKENPTkZJR19GU0NBQ0hFX1NUQVRTKSArPSBmc2NhY2hlX3N0YXRzLm9cXG5mcy9uZXRmcy9NYWtlZmlsZS0zNS1cXG5mcy9uZXRmcy9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTkVURlNfU1VQUE9SVCkgKz0gbmV0ZnMub1xcbi0tXFxuZnMvbmZzL0tjb25maWc9MTczPWNvbmZpZyBORlNfRlNDQUNIRVxcbi0tXFxuZnMvbmZzL0tjb25maWctMTc1LVxcdGRlcGVuZHMgb24gTkZTX0ZTXFxuZnMvbmZzL0tjb25maWc6MTc2OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvbmZzL0tjb25maWctMTc3LVxcdHNlbGVjdCBGU0NBQ0hFXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9Mj1jb25maWcgQ0lGU1xcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIxLVxcdHNlbGVjdCBPSURfUkVHSVNUUllcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjI6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxubmV0LzlwL0tjb25maWc9Nj1tZW51Y29uZmlnIE5FVF85UFxcbm5ldC85cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcXFwiXFxubmV0LzlwL0tjb25maWc6ODpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbm5ldC85cC9LY29uZmlnLTktXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDo1My4wMjYwMzc2MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxMDc0NzY1MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBOZXRmcyBEaXJlY3QgV3JpdGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgdW5idWZmZXJlZCB3cml0ZSBwYXRoIGZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCByZWxldmFudCB0byBmaWxlc3lzdGVtcyBzdWNoIGFzIDlwLCBDSUZTL1NNQiwgQUZTLCBhbmQgQ2VwaCwgd2hpY2ggYXJlIGFsbCBpbXBvcnRhbnQgZm9yIG5ldHdvcmtlZCBzdG9yYWdlIGFuZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgd2hlbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgcmV0cmllcyBhIHN1YnJlcXVlc3QgKGByZXRyeSA9PSB0cnVlYCksIHRoZXJlIGFyZSBzZXZlcmFsIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIHRvIGBpb3ZfaXRlcl9hZHZhbmNlYCBhbmQgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIGxvb2sgc3RyYWlnaHRmb3J3YXJkLCBhY2NvdW50aW5nIGZvciB0cmFuc2ZlcnJlZCBkYXRhLiBUaGUgYWRkZWQgYF9fY2xlYXJfYml0YCBhbmQgY29uZGl0aW9uYWwgY2FsbCB0byBgc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGVgIGFyZSB0aGUgbW9yZSBpbnRlcmVzdGluZyBhc3BlY3RzLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYGVsc2VgIGJyYW5jaCwgYW5kIHRoZSBpbnNlcnRpb24gb2Ygd2hhdCBhcHBlYXJzIHRvIGJlIGEgbW9yZSBkZWxpYmVyYXRlIHByZXBhcmF0aW9uIHN0ZXAgd2l0aCBgc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGVgIHBvdGVudGlhbGx5IGluZGljYXRlIGEgY2hhbmdlIGluIHJldHJ5IGxvZ2ljLiBUaGlzIGNvdWxkIGJlIHNpZ25pZmljYW50LCBiZWNhdXNlIHRoZSBjb2RlIHBhdGggaXMgZXhlY3V0ZWQgd2l0aCBhIE5VTEwgYHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlYCB3aGljaCBjb3VsZCBiZSBhbiBpc3N1ZSwgYW5kIG5vdyBpdCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseS5cblxuTm93LCBpcyB0aGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldGZzIGZ1bmN0aW9uYWxpdHkgYW5kLCBhc3N1bWluZyB0aGUgZmlsZXN5c3RlbXMgdGhhdCB1c2UgYE5FVEZTX1NVUFBPUlRgIGFyZSBlbmFibGVkLCBpdCdzIGEgY3JpdGljYWwgcGF0aC4gSXMgaXQgcmVhY2hhYmxlIGluIFFFTVUgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBZZXMsIHRocm91Z2ggYW55IG9mIHRoZSBuZXR3b3JrZWQgZmlsZXN5c3RlbXMgSSBtZW50aW9uZWQg4oCTIDlwLCBDSUZTLCBBRlMsIG9yIENlcGgsIGFuZCBvZiBjb3Vyc2Ugd2l0aCBkaXJlY3QgbmV0ZnMgdGVzdGluZy5cblxuU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB1bmJ1ZmZlcmVkIHdyaXRlIHJldHJpZXMgYXJlIGhhbmRsZWQuIEEgc3VidGxlIGNoYW5nZSBpbiB0aGUgcmV0cnkgbG9naWMgY291bGQgaGF2ZSBhIGhpZ2ggaW1wYWN0IGluIHRlcm1zIG9mIHN0YWJpbGl0eSBvciBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggbmV0d29yayBmaWxlc3lzdGVtcy5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlIGNvZGUsIHRoZSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhcmUgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYW5kIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgLiBJIHdpbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgZGlyZWN0X3dyaXRlLmMgYW5kIGJ1ZmZlcmVkX3dyaXRlLmMgdG8gdmVyaWZ5LiBMb29raW5nIGF0IHRoZSBzeW1ib2xzLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHRoZSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGFyZSB0aGUgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbnMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBjb2RlIGlzIHJlbGV2YW50IHRvIG90aGVyIGNvZGUuXG5cbkNvbmZpZy13aXNlLCBgTkVURlNfU1VQUE9SVGAgaXMgdGhlIGNvcmUsIGFuZCB0aGVuIGZpbGVzeXN0ZW1zIHN1Y2ggYXMgYDlQX0ZTYCwgYENJRlNgLCBgQUZTX0ZTYCwgYW5kIGBDRVBIX0ZTYCBzZWxlY3QgaXQuIFRoZSBrZXJuZWwgY29uZmlnIGNvbmZpcm1zIHRoYXQgYE5FVEZTX1NVUFBPUlRgIGlzIHRyaXN0YXRlIGFuZCBzZWxlY3RlZCBieSB0aG9zZSBmaWxlc3lzdGVtcy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHRlbGxzIG1lIHdoaWNoIG1vZHVsZXMgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoaXMgY29kZS5cblxuU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBlbmFibGUgYE5FVEZTX1NVUFBPUlRgLCBhcyB3ZWxsIGFzIGF0IGxlYXN0IGA5UF9GU2AgYW5kIGBDSUZTYC4gYEFGU19GU2AgYW5kIGBDRVBIX0ZTYCBhcmUgYWxzbyBhcHBsaWNhYmxlIHRvIGV4cGFuZCB0ZXN0aW5nLlxuXG5Ob3csIGxldCdzIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLiBJIHdpbGwgZ2VuZXJhdGUgYSBsaXN0IHRvIGdpdmUgdGhlIGNvcnJlY3QgaW5mb3JtYXRpb24sIGFzIGRlZmluZWQgaW4gdGhlIGluc3RydWN0aW9ucy5cblxuLSAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbi0gICBgRm9jdXNTeW1ib2xzYDogYFtcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLCBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIiwgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIl1gXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVURlNfU1VQUE9SVFwiLCBcIjlQX0ZTXCIsIFwiQ0lGU1wiLCBcIkFGU19GU1wiLCBcIkNFUEhfRlNcIl1gXG4tICAgYFJlYXNvbmluZ2A6IEZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgcmV0cnkgaGFuZGxpbmcgbG9naWMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IG1lY2hhbmlzbSB3aXRoaW4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBtYWtpbmcgaXQgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBpbiBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLiBUaGlzIGFmZmVjdHMgdW5idWZmZXJlZCB3cml0ZXMgd2l0aGluIG5ldHdvcmtlZCBmaWxlc3lzdGVtcy5cblxuV2l0aCB0aGF0LCBJJ20gc2F0aXNmaWVkLiBJdCdzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3NywiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjE1OjE0LjEwMDgwNjcyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MjYwMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGU19TVVBQT1JUXCIsXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0lGU1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0cnkgbG9naWMgaW4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZSB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSBoZWxwZXIgbGlicmFyeSAoZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMpLCB1cGRhdGluZyBhY2NvdW50aW5nIGZvciB0cmFuc2ZlcnJlZCBieXRlcyBhbmQgYWRqdXN0aW5nIGhvdyByZXRyaWVkIHN1YnJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgZGlyZWN0L3VuYnVmZmVyZWQgd3JpdGUgb3BlcmF0aW9ucyBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zIHN1Y2ggYXMgOXAsIENJRlMsIEFGUywgYW5kIENlcGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURlNfU1VQUE9SVFwiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfZmlsZV93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IGxvZ2ljIGluIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUgd2l0aGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gaGVscGVyIGxpYnJhcnkgKGZzL25ldGZzL2RpcmVjdF93cml0ZS5jKSwgdXBkYXRpbmcgYWNjb3VudGluZyBmb3IgdHJhbnNmZXJyZWQgYnl0ZXMgYW5kIGFkanVzdGluZyBob3cgcmV0cmllZCBzdWJyZXF1ZXN0cyBhcmUgc3VibWl0dGVkLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGRpcmVjdC91bmJ1ZmZlcmVkIHdyaXRlIG9wZXJhdGlvbnMgb24gbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIDlwLCBDSUZTLCBBRlMsIGFuZCBDZXBoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxNToxNC4xNzYwNzQyOTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTA5Mjk4MTczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjE1OjE0LjE3NjU1MjA4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzNTA5MjQ5ODA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IHBhdGggaW4gbmV0ZnMgdW5idWZmZXJlZCB3cml0ZSAoYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBgd3JlcS1cXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGludGVybmFsIHN0YXRlIGFuZCBjb250cm9sIGZsb3cgYWRqdXN0bWVudHMgZm9yIEkvTyB0cmFja2luZyBhbmQgc3VicmVxdWVzdCByZXRyeSBoYW5kbGluZyBpbiB0aGUgbmV0ZnMgc3Vic3lzdGVtLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE2YmM3NzRiZmFkZjkwMDNiNzJkYzVjYjJiMmViNGI4ZTNjOGQzNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzowNzoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbmluZGV4IGY5YWI2OWRlM2UyOTguLmMyODczZWNiZWNlYjYgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbkBAIC0xNjYsMTMgKzE2NiwxNiBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXHRcdCAqL1xuIFx0XHRzdWJyZXEtXHUwMDNlZXJyb3IgPSAtRUFHQUlOO1xuIFx0XHR0cmFjZV9uZXRmc19zcmVxKHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9yZXRyeSk7XG4tXHRcdGlmIChzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlIDApXG4rXHRcdGlmIChzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlIDApIHtcbiBcdFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCk7XG4rXHRcdFx0d3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gXHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIFxuK1x0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG5AQCAtMTg2LDE3ICsxODksMTAgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFxuIFx0XHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcbiBcbi1cdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKSB7XG4rXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSlcbiBcdFx0XHRzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xuLVx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHN0cnVjdCBpb3ZfaXRlciBzb3VyY2U7XG4tXG4tXHRcdFx0bmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpO1xuLVx0XHRcdHNvdXJjZSA9IHN1YnJlcS1cdTAwM2Vpb19pdGVyO1xuLVx0XHRcdG5ldGZzX3JlaXNzdWVfd3JpdGUoc3RyZWFtLCBzdWJyZXEsIFx1MDAyNnNvdXJjZSk7XG4tXHRcdH1cbitcdFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4rXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpO1xuIFx0fVxuIFxuIFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTU6MTQuMTc2NTUzNDI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTAwMDU5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIG9mIHRoZSBjaGFuZ2UuIFRoZSBwYXRjaCBzcGVjaWZpZXMgYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCwgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hlcmUgSSdsbCBiZWdpbi4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGluaXRpYWwgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDE2NiBpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMga2luZywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTY6MDMuMjc2NjE2NzAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0XFx0XFx0cmV0cnkgPSB0cnVlO1xcbiAxNDE6XFx0XFx0XFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpKSB7XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSBzdWJyZXEtXFx1MDAzZWVycm9yO1xcbiAxNDM6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNlZXJyb3IgPSByZXQ7XFxuIDE0NDpcXHRcXHRcXHRcXHRuZXRmc19zZWVfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2Vfc2VlX2ZhaWxlZCk7XFxuIDE0NTpcXHRcXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbiAxNDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRpZiAoIXJldHJ5KSB7XFxuIDE1MTpcXHRcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbiAxNTI6XFx0XFx0XFx0XFx0c3VicmVxID0gTlVMTDtcXG4gMTUzOlxcdFxcdFxcdFxcdGlmICh3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlPSB3cmVxLVxcdTAwM2VsZW4pXFxuIDE1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU1OlxcdFxcdFxcdFxcdGlmICghd3JlcS1cXHUwMDNlaW9jYiBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbiAxNTY6XFx0XFx0XFx0XFx0XFx0cmV0ID0gd3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgPyAtRUlOVFIgOiAtRVJFU1RBUlRTWVM7XFxuIDE1NzpcXHRcXHRcXHRcXHRcXHR0cmFjZV9uZXRmc19ycmVxKHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfaW50cik7XFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNjE6XFx0XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRcXHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxcbiAxNjQ6XFx0XFx0XFx0ICogaXRlcmF0b3IsIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCwgaWYgYW55dGhpbmcsIHdlIG1hbmFnZWRcXG4gMTY1OlxcdFxcdFxcdCAqIHRvIHRyYW5zZmVyLlxcbiAxNjY6XFx0XFx0XFx0ICovXFxuIDE2NzpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWVycm9yID0gLUVBR0FJTjtcXG4gMTY4OlxcdFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4gMTY5OlxcdFxcdFxcdGlmIChzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkIFxcdTAwM2UgMCkge1xcbiAxNzA6XFx0XFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbiAxNzE6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTcyOlxcdFxcdFxcdH1cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXFx1MDAyNlxcdTAwMjZcXG4gMTc1OlxcdFxcdFxcdCAgICB3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3QpXFxuIDE3NjpcXHRcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE3OTpcXHRcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgwOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgxOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE4MjpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWlvX2l0ZXJcXHRcXHQ9IHdyZXEtXFx1MDAzZWJ1ZmZlci5pdGVyO1xcbiAxODM6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2VzdGFydFxcdFxcdD0gd3JlcS1cXHUwMDNlc3RhcnQgKyB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTg0OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlbGVuXFx0XFx0PSB3cmVxLVxcdTAwM2VsZW4gICAtIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbiAxODU6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZFxcdD0gMDtcXG4gMTg2OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlcmV0cnlfY291bnRcXHQrPSAxO1xcbiAxODc6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9sZW5cXHQ9IFVJTlRfTUFYO1xcbiAxODg6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9zZWdzXFx0PSBJTlRfTUFYO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gMTkzOlxcdFxcdFxcdFxcdHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xcbiAxOTQ6XFx0XFx0XFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTk1OlxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4gMTk2OlxcdFxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xcbiAxOTk6XFx0XFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIDIwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMDE6XFx0fVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcXG4gMjA4OlxcdFxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4gMjA5OlxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0LypcXG4gMjEyOlxcdCAqIFBlcmZvcm0gYW4gdW5idWZmZXJlZCB3cml0ZSB3aGVyZSB3ZSBtYXkgaGF2ZSB0byBkbyBhbiBSTVcgb3BlcmF0aW9uIG9uIGFuXFxuIDIxMzpcXHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXFxuIDIxNDpcXHQgKi9cXG4gMjE1OlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gMjE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4gMjE3OlxcdHtcXG4gMjE4OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxO1xcbiAyMTk6XFx0XFx0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0ID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxNjowMy4yNzY3MzgxNjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NTcyMDQxODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgY2hhbmdpbmcuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiBob3cgdGhlIGB0cmFuc2ZlcnJlZGAgY291bnQgaXMgYmVpbmcgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGB3cmVxLVx1MDAzZXRyYW5zZmVycmVkYCBpcyBiZWluZyB1cGRhdGVkIGJ5IGFkZGluZyBgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkYC4gQWxvbmdzaWRlIHRoaXMsIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnIGlzIGJlaW5nIGNsZWFyZWQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBjb25kaXRpb25hbCBicmFuY2ggd2l0aGluIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4gVGhlIGNvZGUgdGhhdCBwcmV2aW91c2x5IGluY2x1ZGVkIGFuIGBpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpYCBibG9jayBhbmQgYW4gYGVsc2VgIGJyYW5jaCBpbnZvbHZpbmcgYG5ldGZzX3JlaXNzdWVfd3JpdGVgIGlzIGdvbmUuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGdldCBtb3JlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBjaGFuZ2VzIHdlcmUgbWFkZS4gSSdsbCBzZWFyY2ggZm9yIHJlbGF0ZWQgY29tbWl0IG1lc3NhZ2VzLCBkb2N1bWVudGF0aW9uLCBvciBhbnkgb3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbW90aXZhdGlvbnMgYmVoaW5kIHRoaXMgcGF0Y2guIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIHVzZWZ1bCBoaXN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxOToyMS44NDg3ODQ0NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDAwNzU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTQ2OT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDgyLVxcdCAgICB0ZXN0X2JpdChORVRGU19JQ1RYX1VOQlVGRkVSRUQsIFxcdTAwMjZpY3R4LVxcdTAwM2VmbGFncykpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODM6XFx0XFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NC1cXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE0LSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02NC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTMtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTk1LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1MC1cXHRcXHRpZiAoIXJldHJ5KSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTUxOlxcdFxcdFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTUyLVxcdFxcdFxcdHN1YnJlcSA9IE5VTEw7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTctXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTk4OlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTktXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDItXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAzOnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwNC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjA3OlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA4LVxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTU6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODQtXFx0aWYgKGFzeW5jKSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg1OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2d3JlcS1cXHUwMDNld29yaywgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg2LVxcdFxcdHdyZXEtXFx1MDAzZWlvY2IgPSBpb2NiO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg5LVxcdH0gZWxzZSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjkwOlxcdFxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkxLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDctfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMwODpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwOS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTAtLyoqXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzExOiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEyLSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyMi0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjM6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI0LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM3OS1cXHRcXHRcXHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzgwOlxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgxLW91dDpcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NC19XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg1OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTk6MjIuMjU4Nzk3NDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjU1Mzk1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBiZWhhdmlvciBvZiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuIE5vIHNob3J0Y3V0cywgbm8gc2tpbW1pbmcgdGhlIHN1cmZhY2UuIEkgd2FudCB0aGUgKndob2xlKiBwaWN0dXJlLCBldmVyeSBzaW5nbGUgbnVhbmNlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiB3aXRoIGEgdmVyeSBrZWVuIGV5ZS4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGZyb20gdGhlIGluaXRpYWwgaW5wdXQgcHJvY2Vzc2luZyBhbmQgY2hlY2tzLCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMsIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB3aGF0ZXZlciB0aGUgdW5kZXJseWluZyBuZXR3b3JrIEkvTyBtZWNoYW5pc20gaXMsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBmYWlsdXJlIHBhdGhzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHRoZSByb2xlIG9mIGFueSBjYWNoaW5nIGlmIGl0J3MgdGhlcmUgYXQgYWxsLCB3aGF0IGl0IG1lYW5zIGZvciBhdG9taWNpdHksIGFuZCBob3cgaXQgYmVoYXZlcyBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgdHJhbnNwb3J0cyBvciBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuIEknbGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGJlaW5nIFwidW5idWZmZXJlZC5cIiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyB0byBidWlsZCBhIHByZWNpc2UgbWVudGFsIG1vZGVsIG9mIGl0cyBleGVjdXRpb24gcGF0aCwgaW5jbHVkaW5nIGFsbCBzaWRlIGVmZmVjdHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGFudGljaXBhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyB1bmRlciBkaWZmZXJlbnQgbG9hZHMgYW5kIHByZWRpY3QgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBnb3RjaGFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTk6NTAuNTE0MTk3MTE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25ldGZzL2RpcmVjdF93cml0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdCAqIGluIHRoZSBkYXRhIHdyaXR0ZW4gZHVlIHRvIGEgZmFpbHVyZSBzdWNoIGFzIEVOT1NQQy4gIFdlIGNvdWxkLCBob3dldmVyXFxuICA5MTpcXHQgKiBhdHRlbXB0IHRvIGRvIHByZXBhcmF0aW9uIHN1Y2ggYXMgY29udGVudCBlbmNyeXB0aW9uIGZvciB0aGUgbmV4dCBzdWJyZXFcXG4gIDkyOlxcdCAqIHdoaWxzdCB0aGUgY3VycmVudCBpcyBpbiBwcm9ncmVzcy5cXG4gIDkzOlxcdCAqL1xcbiAgOTQ6XFx0c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbiAgOTU6XFx0e1xcbiAgOTY6XFx0XFx0c3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSA9IE5VTEw7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0gPSBcXHUwMDI2d3JlcS1cXHUwMDNlaW9fc3RyZWFtc1swXTtcXG4gIDk4OlxcdFxcdGludCByZXQ7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdF9lbnRlcihcXFwiJWxseFxcXCIsIHdyZXEtXFx1MDAzZWxlbik7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdGlmICh3cmVxLVxcdTAwM2VvcmlnaW4gPT0gTkVURlNfRElPX1dSSVRFKVxcbiAxMDM6XFx0XFx0XFx0aW5vZGVfZGlvX2JlZ2luKHdyZXEtXFx1MDAzZWlub2RlKTtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0c3RyZWFtLVxcdTAwM2Vjb2xsZWN0ZWRfdG8gPSB3cmVxLVxcdTAwM2VzdGFydDtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0Zm9yICg7Oykge1xcbiAxMDg6XFx0XFx0XFx0Ym9vbCByZXRyeSA9IGZhbHNlO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRcXHRpZiAoIXN1YnJlcSkge1xcbiAxMTE6XFx0XFx0XFx0XFx0bmV0ZnNfcHJlcGFyZV93cml0ZSh3cmVxLCBzdHJlYW0sIHdyZXEtXFx1MDAzZXN0YXJ0ICsgd3JlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbiAxMTI6XFx0XFx0XFx0XFx0c3VicmVxID0gc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3Q7XFxuIDExMzpcXHRcXHRcXHRcXHRzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdCA9IE5VTEw7XFxuIDExNDpcXHRcXHRcXHR9XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFxcdC8qIENoZWNrIGlmIChyZS0pcHJlcGFyYXRpb24gZmFpbGVkLiAqL1xcbiAxMTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHRlc3RfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncykpKSB7XFxuIDExODpcXHRcXHRcXHRcXHRuZXRmc193cml0ZV9zdWJyZXF1ZXN0X3Rlcm1pbmF0ZWQoc3VicmVxLCBzdWJyZXEtXFx1MDAzZWVycm9yKTtcXG4gMTE5OlxcdFxcdFxcdFxcdHdyZXEtXFx1MDAzZWVycm9yID0gc3VicmVxLVxcdTAwM2VlcnJvcjtcXG4gMTIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjE6XFx0XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRcXHRpb3ZfaXRlcl90cnVuY2F0ZShcXHUwMDI2c3VicmVxLVxcdTAwM2Vpb19pdGVyLCB3cmVxLVxcdTAwM2VsZW4gLSB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCk7XFxuIDEyNDpcXHRcXHRcXHRpZiAoIWlvdl9pdGVyX2NvdW50KFxcdTAwMjZzdWJyZXEtXFx1MDAzZWlvX2l0ZXIpKVxcbiAxMjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlbGVuID0gbmV0ZnNfbGltaXRfaXRlcihcXHUwMDI2c3VicmVxLVxcdTAwM2Vpb19pdGVyLCAwLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cmVhbS1cXHUwMDNlc3JlcV9tYXhfbGVuLFxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cmVhbS1cXHUwMDNlc3JlcV9tYXhfc2Vncyk7XFxuIDEzMDpcXHRcXHRcXHRpb3ZfaXRlcl90cnVuY2F0ZShcXHUwMDI2c3VicmVxLVxcdTAwM2Vpb19pdGVyLCBzdWJyZXEtXFx1MDAzZWxlbik7XFxuIDEzMTpcXHRcXHRcXHRzdHJlYW0tXFx1MDAzZXN1Ym1pdF9leHRlbmRhYmxlX3RvID0gc3VicmVxLVxcdTAwM2VsZW47XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3N1Ym1pdCk7XFxuIDEzNDpcXHRcXHRcXHRzdHJlYW0tXFx1MDAzZWlzc3VlX3dyaXRlKHN1YnJlcSk7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdC8qIEFzeW5jLCBuZWVkIHRvIHdhaXQuICovXFxuIDEzNzpcXHRcXHRcXHRuZXRmc193YWl0X2Zvcl9pbl9wcm9ncmVzc19zdHJlYW0od3JlcSwgc3RyZWFtKTtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0XFx0aWYgKHRlc3RfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpKSB7XFxuIDE0MDpcXHRcXHRcXHRcXHRyZXRyeSA9IHRydWU7XFxuIDE0MTpcXHRcXHRcXHR9IGVsc2UgaWYgKHRlc3RfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncykpIHtcXG4gMTQyOlxcdFxcdFxcdFxcdHJldCA9IHN1YnJlcS1cXHUwMDNlZXJyb3I7XFxuIDE0MzpcXHRcXHRcXHRcXHR3cmVxLVxcdTAwM2VlcnJvciA9IHJldDtcXG4gMTQ0OlxcdFxcdFxcdFxcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTk6NTAuNTE0MjkxNjE4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1ODc1NDczNTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgUmV0cnkgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIHJldHJ5IHNjZW5hcmlvLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGNvZGUncyBiZWhhdmlvciB3aGVuIGEgd3JpdGUgb3BlcmF0aW9uIG5lZWRzIHRvIGJlIHJldHJpZWQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBgcmV0cnkgPT0gdHJ1ZWAuXG5cbkZpcnN0LCBJIG5vdGljZWQgYW4gb2Zmc2V0IGFjY291bnRpbmcgaXNzdWU6IGlmIGEgc3ViLXJlcXVlc3QgKGBzdWJyZXFgKSBoYWQgdHJhbnNmZXJyZWQgZGF0YSwgYnV0IGB3cmVxLVx1MDAzZXRyYW5zZmVycmVkYCB3YXNuJ3QgdXBkYXRlZCBhY2NvcmRpbmdseSwgdGhlbiBzdWJzZXF1ZW50IGNhbGN1bGF0aW9ucyBiYXNlZCBvbiBgd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZGAgd291bGQgYmUgb2ZmLCBzcGVjaWZpY2FsbHksIGBzdWJyZXEtXHUwMDNlc3RhcnQgPSB3cmVxLVx1MDAzZXN0YXJ0ICsgd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZGAuIFRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSBlbnN1cmluZyBgd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWRgLCB3aGljaCBjb3JyZWN0cyB0aGUgb2Zmc2V0LlxuXG5OZXh0LCBJIG9ic2VydmVkIHRoYXQgdGhlIGBORVRGU19TUkVRX01BREVfUFJPR1JFU1NgIGZsYWcgd2FzIGJlaW5nIGNsZWFyZWQsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGZvciBhIHJldHJ5LiBUaGUgY29kZSB0aGVuIHJlLWluaXRpYWxpemVzIHRoZSBgc3VicmVxYCBmb3IgdGhlIHJldHJ5LCBpbmNsdWRpbmcgdGhlIElPIGl0ZXJhdG9yIGFuZCBjb3VudGVycy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gdGhlIHJldHJ5IGxvb3AsIEkgc2VlIHRoZSBjb2RlIHVzZWQgdG8gaGF2ZSBhbiBgZWxzZWAgYnJhbmNoIHRoYXQgZGlyZWN0bHkgY2FsbGVkIGBuZXRmc19yZWlzc3VlX3dyaXRlYC4gSG93ZXZlciwgY2FsbGluZyB0aGlzIGRpcmVjdGx5IHdpdGhpbiB0aGUgcmV0cnkgcGF0aCBjb3VsZCBsZWFkIHRvIGRvdWJsZSBpc3N1YW5jZSBvZiB3cml0ZSByZXF1ZXN0cyBvciBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gVGhlIGZpeCBpcyB0byByZW1vdmUgdGhpcyBjb25kaXRpb25hbCBjYWxsLiBJbnN0ZWFkLCBpZiBgc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGVgIGlzIHByZXNlbnQsIGl0IGlzIGNhbGxlZCwgdGhlIGBORVRGU19TUkVRX0lOX1BST0dSRVNTYCBmbGFnIGlzIHNldCwgYW5kIHRoZSByZXRyeSBsb29wIHJlc3VibWl0cyB0aGUgd3JpdGUgb3BlcmF0aW9uIGNsZWFubHkuIFRoaXMgY2hhbmdlIHJlc29sdmVzIGEgcG90ZW50aWFsIGRvdWJsZS13cml0ZSBpc3N1ZSBhbmQgZW5zdXJlcyB0aGUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucy5cblxuSSd2ZSBhbHNvIHBlcmZvcm1lZCBhIHRob3JvdWdoIGNoZWNrIGZvciBtZW1vcnktcmVsYXRlZCBpc3N1ZXM6XG5cbiogICAqKkFsbG9jYXRpb246KiogTm8gbmV3IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBoZXJlLlxuKiAgICoqVXNlcnNwYWNlIENvcHk6KiogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIHRoaXMgcGF0Y2guXG4qICAgKipVbmluaXRpYWxpemVkIEZpZWxkczoqKiBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgdXNlZC5cbiogICAqKlVuaW5pdGlhbGl6ZWQgSnVtcHM6KiogTm8gY29uZGl0aW9uYWwganVtcHMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuKiAgICoqRGF0YSBNYW5pcHVsYXRpb246KiogRXZlcnl0aGluZyBpcyBjb25maW5lZCB0byBleGlzdGluZyBzdHJ1Y3R1cmVzIChgbmV0ZnNfaW9fcmVxdWVzdGAsIGBuZXRmc19pb19zdWJyZXF1ZXN0YCwgZmxhZ3MsIGFuZCB2YXJpb3VzIGNvdW50ZXJzKS5cblxuQ29uc2lkZXJpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBJIGNhbiBjb25maXJtIHRoYXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBmb2N1c2VkIG9uIHRoZSBmaWxlc3lzdGVtIEkvTyBhY2NvdW50aW5nIGFuZCByZXRyeSBzdGF0ZSBtYWNoaW5lLiBUaGUgaWRlbnRpZmllZCBidWcgcmVsYXRlcyB0byB0aGUgbG9naWNhbCBmbG93IG9mIHJldHJpZXMgYW5kIHN0YXRlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSwgdGhlIG9mZnNldCBjYWxjdWxhdGlvbiBhbmQgdGhlIGNvbnRyb2wgZmxvdywgcHJldmVudGluZyBkb3VibGUgaXNzdWFuY2Ugb2YgcmVxdWVzdHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gS0FTQU4gY292ZXJzIHRoZSBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RzLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4sIGFuZCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgbm9ybWFsbHkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWMvc3RhdGUgbWFjaGluZS1yZWxhdGVkIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYxLCJPdXRwdXRUb2tlbnMiOjE4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoyMjoyOS4yNjkwMzA3NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkYCB3aGVuIGEgcGFydGlhbGx5IHRyYW5zZmVycmVkIHN1YnJlcXVlc3QgbmVlZHMgcmV0cnksIGNsZWFycyB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZywgYW5kIHNpbXBsaWZpZXMgcmV0cnkgcHJlcGFyYXRpb24gYnkgcmVtb3ZpbmcgYSByZWR1bmRhbnQgYG5ldGZzX3JlaXNzdWVfd3JpdGUoKWAgYnJhbmNoLiBcXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0cnkgcGF0aCBpbiBuZXRmcyB1bmJ1ZmZlcmVkIHdyaXRlIChgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIGB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZGAgd2hlbiBhIHBhcnRpYWxseSB0cmFuc2ZlcnJlZCBzdWJyZXF1ZXN0IG5lZWRzIHJldHJ5LCBjbGVhcnMgdGhlIGBORVRGU19TUkVRX01BREVfUFJPR1JFU1NgIGZsYWcsIGFuZCBzaW1wbGlmaWVzIHJldHJ5IHByZXBhcmF0aW9uIGJ5IHJlbW92aW5nIGEgcmVkdW5kYW50IGBuZXRmc19yZWlzc3VlX3dyaXRlKClgIGJyYW5jaC4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgc3RyaWN0bHkgaW50ZXJuYWwgc3RhdGUgYW5kIGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cyBmb3IgSS9PIHRyYWNraW5nIGFuZCBzdWJyZXF1ZXN0IHJldHJ5IGhhbmRsaW5nIGluIHRoZSBuZXRmcyBzdWJzeXN0ZW0uIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow84w5c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 16:47:27 +0000 UTC FinishedAt: 2026-08-31 17:22:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb049bdbf2b98d103d93daef44a5e1a0164d01eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "9P_FS", "CIFS", "AFS_FS", "CEPH_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb049bdbf2b98d103d93daef44a5e1a0164d01eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "9P_FS", "CIFS", "AFS_FS", "CEPH_FS" ], "series_id": "66b0c2a1-cc45-4f4c-8482-d8221e5aab81" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_unbuffered_write_iter", "netfs_unbuffered_write_iter_locked", "netfs_file_write_iter" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGU19TVVBQT1JUJiMzNDssCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc19maWxlX3dyaXRlX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0cnkgcGF0aCBpbiBuZXRmcyB1bmJ1ZmZlcmVkIHdyaXRlIChgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIGB3cmVxLVx1MDAzZXRyYW5zZmVycmVkYCB3aGVuIGEgcGFydGlhbGx5IHRyYW5zZmVycmVkIHN1YnJlcXVlc3QgbmVlZHMgcmV0cnksIGNsZWFycyB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZywgYW5kIHNpbXBsaWZpZXMgcmV0cnkgcHJlcGFyYXRpb24gYnkgcmVtb3ZpbmcgYSByZWR1bmRhbnQgYG5ldGZzX3JlaXNzdWVfd3JpdGUoKWAgYnJhbmNoLiBcblxuVGhlc2UgY2hhbmdlcyBhcmUgc3RyaWN0bHkgaW50ZXJuYWwgc3RhdGUgYW5kIGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cyBmb3IgSS9PIHRyYWNraW5nIGFuZCBzdWJyZXF1ZXN0IHJldHJ5IGhhbmRsaW5nIGluIHRoZSBuZXRmcyBzdWJzeXN0ZW0uIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE2YmM3NzRiZmFkZjkwMDNiNzJkYzVjYjJiMmViNGI4ZTNjOGQzNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzowNzoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTY2LDEzICYjNDM7MTY2LDE2IEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcdFx0ICovXG4gXHRcdHN1YnJlcS1cdTAwM2VlcnJvciA9IC1FQUdBSU47XG4gXHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcbi1cdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMClcbiYjNDM7XHRcdGlmIChzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlIDApIHtcbiBcdFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCk7XG4mIzQzO1x0XHRcdHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgJiM0Mzs9IHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gXHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIFxuJiM0MztcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuQEAgLTE4NiwxNyAmIzQzOzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXG4gXHRcdG5ldGZzX2dldF9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9nZXRfcmVzdWJtaXQpO1xuIFxuLVx0XHRpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpIHtcbiYjNDM7XHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSlcbiBcdFx0XHRzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xuLVx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHN0cnVjdCBpb3ZfaXRlciBzb3VyY2U7XG4tXG4tXHRcdFx0bmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpO1xuLVx0XHRcdHNvdXJjZSA9IHN1YnJlcS1cdTAwM2Vpb19pdGVyO1xuLVx0XHRcdG5ldGZzX3JlaXNzdWVfd3JpdGUoc3RyZWFtLCBzdWJyZXEsIFx1MDAyNnNvdXJjZSk7XG4tXHRcdH1cbiYjNDM7XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XG4gXHR9XG4gXG4gXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE2YmM3NzRiZmFkZjkwMDNiNzJkYzVjYjJiMmViNGI4ZTNjOGQzNjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzowNzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKaW5kZXggZjlhYjY5ZGUzZTI5OC4uYzI4NzNlY2JlY2ViNiAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKQEAgLTE2NiwxMyAmIzQzOzE2NiwxNiBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAJCSAqLwogCQlzdWJyZXEtJmd0O2Vycm9yID0gLUVBR0FJTjsKIAkJdHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpOwotCQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApCiYjNDM7CQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApIHsKIAkJCWlvdl9pdGVyX2FkdmFuY2UoJmFtcDt3cmVxLSZndDtidWZmZXIuaXRlciwgc3VicmVxLSZndDt0cmFuc2ZlcnJlZCk7CiYjNDM7CQkJd3JlcS0mZ3Q7dHJhbnNmZXJyZWQgJiM0Mzs9IHN1YnJlcS0mZ3Q7dHJhbnNmZXJyZWQ7CiYjNDM7CQl9CiAKIAkJaWYgKHN0cmVhbS0mZ3Q7c291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgJmFtcDsmYW1wOwogCQkgICAgd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KQogCQkJd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KHdyZXEsIHN0cmVhbSk7CiAKJiM0MzsJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKIAkJX19jbGVhcl9iaXQoTkVURlNfU1JFUV9ORUVEX1JFVFJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0JPVU5EQVJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKQEAgLTE4NiwxNyAmIzQzOzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAKIAkJbmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7CiAKLQkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkgewomIzQzOwkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkKIAkJCXN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZShzdWJyZXEpOwotCQkJX19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsICZhbXA7c3VicmVxLSZndDtmbGFncyk7Ci0JCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGlvdl9pdGVyIHNvdXJjZTsKLQotCQkJbmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpOwotCQkJc291cmNlID0gc3VicmVxLSZndDtpb19pdGVyOwotCQkJbmV0ZnNfcmVpc3N1ZV93cml0ZShzdHJlYW0sIHN1YnJlcSwgJmFtcDtzb3VyY2UpOwotCQl9CiYjNDM7CQlfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKJiM0MzsJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7CiAJfQogCiAJbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3CgkJCQkJCQlvdXRwdXQ6IDEwMgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBOZXRGUyBEaXJlY3QgV3JpdGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLiBNeSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBpbiB0aGUgYGZzL25ldGZzL2AgZGlyZWN0b3J5LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiBvZiB0aGUgb3RoZXIgZmlsZXMsIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgS2NvbmZpZ3MsIGFuZCBzZWUgaWYgYW55IHNwZWNpZmljIHN5bWJvbHMgYXJlIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gCgpPbmNlIEkmIzM5O3ZlIGdvdCBhIGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3MuIEkmIzM5O2xsIGJlIGxldmVyYWdpbmcgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCDigJMgY2xhc3NpYyB0b29scywgYnV0IHRoZXkmIzM5O2xsIGJlIGludmFsdWFibGUgaGVyZS4gSSB3YW50IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSAqZXhhY3QqIGNoYW5nZXMgbWFkZSBpbiBgZGlyZWN0X3dyaXRlLmNgIGFuZCwgZXZlbiBtb3JlIGltcG9ydGFudGx5LCB3aGVyZSB0aG9zZSBjaGFuZ2VzIGFyZSBiZWluZyAqdXNlZCouIENvbnRleHQgaXMgZXZlcnl0aGluZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmaWxlIHN5c3RlbXMsIHNvIHRyYWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaXMgY3JpdGljYWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0XHRcdHJldHJ5ID0gdHJ1ZTtcbiAxNDE6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MjpcdFx0XHRcdHJldCA9IHN1YnJlcS1cdTAwM2VlcnJvcjtcbiAxNDM6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gcmV0O1xuIDE0NDpcdFx0XHRcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcbiAxNDU6XHRcdFx0XHRzdWJyZXEgPSBOVUxMO1xuIDE0NjpcdFx0XHRcdGJyZWFrO1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHRcdHJldCA9IDA7XG4gMTQ5Olx0XG4gMTUwOlx0XHRcdGlmICghcmV0cnkpIHtcbiAxNTE6XHRcdFx0XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xuIDE1MjpcdFx0XHRcdHN1YnJlcSA9IE5VTEw7XG4gMTUzOlx0XHRcdFx0aWYgKHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlPSB3cmVxLVx1MDAzZWxlbilcbiAxNTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDE1NTpcdFx0XHRcdGlmICghd3JlcS1cdTAwM2Vpb2NiIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuIDE1NjpcdFx0XHRcdFx0cmV0ID0gd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCA/IC1FSU5UUiA6IC1FUkVTVEFSVFNZUztcbiAxNTc6XHRcdFx0XHRcdHRyYWNlX25ldGZzX3JyZXEod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9pbnRyKTtcbiAxNTg6XHRcdFx0XHRcdGJyZWFrO1xuIDE1OTpcdFx0XHRcdH1cbiAxNjA6XHRcdFx0XHRjb250aW51ZTtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0XHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxuIDE2NDpcdFx0XHQgKiBpdGVyYXRvciwgdGFraW5nIGludG8gYWNjb3VudCB3aGF0LCBpZiBhbnl0aGluZywgd2UgbWFuYWdlZFxuIDE2NTpcdFx0XHQgKiB0byB0cmFuc2Zlci5cbiAxNjY6XHRcdFx0ICovXG4gMTY3Olx0XHRcdHN1YnJlcS1cdTAwM2VlcnJvciA9IC1FQUdBSU47XG4gMTY4Olx0XHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcbiAxNjk6XHRcdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMCkge1xuIDE3MDpcdFx0XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIuaXRlciwgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiAxNzE6XHRcdFx0XHR3cmVxLVx1MDAzZXRyYW5zZmVycmVkICYjNDM7PSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTcyOlx0XHRcdH1cbiAxNzM6XHRcbiAxNzQ6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiAxNzU6XHRcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gMTc2Olx0XHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIDE3NzpcdFxuIDE3ODpcdFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTc5Olx0XHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODA6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODE6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTgyOlx0XHRcdHN1YnJlcS1cdTAwM2Vpb19pdGVyXHRcdD0gd3JlcS1cdTAwM2VidWZmZXIuaXRlcjtcbiAxODM6XHRcdFx0c3VicmVxLVx1MDAzZXN0YXJ0XHRcdD0gd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuIDE4NDpcdFx0XHRzdWJyZXEtXHUwMDNlbGVuXHRcdD0gd3JlcS1cdTAwM2VsZW4gICAtIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTg1Olx0XHRcdHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZFx0PSAwO1xuIDE4NjpcdFx0XHRzdWJyZXEtXHUwMDNlcmV0cnlfY291bnRcdCYjNDM7PSAxO1xuIDE4NzpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfbGVuXHQ9IFVJTlRfTUFYO1xuIDE4ODpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfc2Vnc1x0PSBJTlRfTUFYO1xuIDE4OTpcdFxuIDE5MDpcdFx0XHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcbiAxOTE6XHRcbiAxOTI6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKVxuIDE5MzpcdFx0XHRcdHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XG4gMTk0Olx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIDE5NTpcdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiAxOTY6XHRcdH1cbiAxOTc6XHRcbiAxOTg6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbiAxOTk6XHRcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiAyMDA6XHRcdHJldHVybiByZXQ7XG4gMjAxOlx0fVxuIDIwMjpcdFxuIDIwMzpcdHN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDIwNDpcdHtcbiAyMDU6XHRcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcbiAyMDY6XHRcbiAyMDc6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG4gMjA4Olx0XHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XG4gMjA5Olx0fVxuIDIxMDpcdFxuIDIxMTpcdC8qXG4gMjEyOlx0ICogUGVyZm9ybSBhbiB1bmJ1ZmZlcmVkIHdyaXRlIHdoZXJlIHdlIG1heSBoYXZlIHRvIGRvIGFuIFJNVyBvcGVyYXRpb24gb24gYW5cbiAyMTM6XHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXG4gMjE0Olx0ICovXG4gMjE1Olx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIDIxNjpcdFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcTtcbiAyMTk6XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBORVRGU19TVVBQT1JUXG4gICA0Olx0XHR0cmlzdGF0ZVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIGluY2x1ZGluZ1xuICAgNzpcdFx0ICBoZWxwZXJzIGZvciBoaWdoLWxldmVsIGJ1ZmZlcmVkIEkvTywgYWJzdHJhY3Rpbmcgb3V0IHJlYWRcbiAgIDg6XHRcdCAgc2VnbWVudGF0aW9uLCBsb2NhbCBjYWNoaW5nIGFuZCB0cmFuc3BhcmVudCBodWdlIHBhZ2Ugc3VwcG9ydC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkVURlNfU1RBVFNcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7R2F0aGVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIG9uIGxvY2FsIGNhY2hpbmdcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBjYXVzZXMgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gdG8gYmUgZ2F0aGVyZWQgb24gbG9jYWxcbiAgMTU6XHRcdCAgY2FjaGluZyBhbmQgZXhwb3J0ZWQgdGhyb3VnaCBmaWxlOlxuICAxNjpcdFxuICAxNzpcdFx0XHQvcHJvYy9mcy9mc2NhY2hlL3N0YXRzXG4gIDE4Olx0XG4gIDE5Olx0XHQgIFRoZSBnYXRoZXJpbmcgb2Ygc3RhdGlzdGljcyBhZGRzIGEgY2VydGFpbiBhbW91bnQgb2Ygb3ZlcmhlYWQgdG9cbiAgMjA6XHRcdCAgZXhlY3V0aW9uIGFzIHRoZXJlIGFyZSBhIHF1aXRlIGEgZmV3IHN0YXRzIGdhdGhlcmVkLCBhbmQgb24gYVxuICAyMTpcdFx0ICBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcCBib3VuY2luZ1xuICAyMjpcdFx0ICBiZXR3ZWVuIENQVXMuICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHN0YXRzIGFyZSB2ZXJ5IHVzZWZ1bCBmb3JcbiAgMjM6XHRcdCAgZGVidWdnaW5nIHB1cnBvc2VzLiAgU2F5aW5nICYjMzk7WSYjMzk7IGhlcmUgaXMgcmVjb21tZW5kZWQuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIE5FVEZTX0RFQlVHXG4gIDI2Olx0XHRib29sIFwmIzM0O0VuYWJsZSBkeW5hbWljIGRlYnVnZ2luZyBuZXRmc2xpYiBhbmQgRlMtQ2FjaGVcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVFxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIHBlcm1pdHMgZGVidWdnaW5nIHRvIGJlIGR5bmFtaWNhbGx5IGVuYWJsZWQgaW4gdGhlIGxvY2FsIGNhY2hpbmdcbiAgMzA6XHRcdCAgbWFuYWdlbWVudCBtb2R1bGUuICBJZiB0aGlzIGlzIHNldCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgbWF5IGJlXG4gIDMxOlx0XHQgIGVuYWJsZWQgYnkgc2V0dGluZyBiaXRzIGluIC9zeXMvbW9kdWxlL25ldGZzL3BhcmFtZXRlcnMvZGVidWcuXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIEZTQ0FDSEVcbiAgMzQ6XHRcdGJvb2wgXCYjMzQ7R2VuZXJhbCBmaWxlc3lzdGVtIGxvY2FsIGNhY2hpbmcgbWFuYWdlclwmIzM0O1xuICAzNTpcdFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBnZW5lcmljIGZpbGVzeXN0ZW0gY2FjaGluZyBtYW5hZ2VyIHRoYXQgY2FuIGJlXG4gIDM4Olx0XHQgIHVzZWQgYnkgdmFyaW91cyBuZXR3b3JrIGFuZCBvdGhlciBmaWxlc3lzdGVtcyB0byBjYWNoZSBkYXRhIGxvY2FsbHkuXG4gIDM5Olx0XHQgIERpZmZlcmVudCBzb3J0cyBvZiBjYWNoZXMgY2FuIGJlIHBsdWdnZWQgaW4sIGRlcGVuZGluZyBvbiB0aGVcbiAgNDA6XHRcdCAgcmVzb3VyY2VzIGF2YWlsYWJsZS5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgRlNDQUNIRV9TVEFUU1xuICA0NTpcdFx0Ym9vbCBcJiMzNDtHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1wmIzM0O1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBGU0NBQ0hFIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG4gIDQ3Olx0XHRzZWxlY3QgTkVURlNfU1RBVFNcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgVGhpcyBvcHRpb24gY2F1c2VzIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIG9uIGxvY2FsXG4gIDUwOlx0XHQgIGNhY2hpbmcgYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02Ni1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTUte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1MC1cdFx0aWYgKCFyZXRyeSkge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTUxOlx0XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTItXHRcdFx0c3VicmVxID0gTlVMTDtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTctXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxOTg6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTktXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAzOnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA0LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMDc6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA4LVx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfY29tcGxldGUpO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4NC1cdGlmIChhc3luYykge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg1Olx0XHRJTklUX1dPUksoXHUwMDI2d3JlcS1cdTAwM2V3b3JrLCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cdFx0d3JlcS1cdTAwM2Vpb2NiID0gaW9jYjtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODktXHR9IGVsc2Uge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjkwOlx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkxLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMwODpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA5LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzExOiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTItICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyMi0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMyMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzc5LVx0XHRcdCAgIEZTQ0FDSEVfSU5WQUxfRElPX1dSSVRFKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MDpcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtb3V0OlxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NC19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODU6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgYWxvdWQgYXMgSSBnbzoKCioqSW52ZXN0aWdhdGluZyBOZXRmcyBVbmJ1ZmZlcmVkIFdyaXRlIEl0ZXJhdGlvbioqCgpSaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXRoaW5nIHRoYXQgY2FsbHMgaXQgZGlyZWN0bHksIG9yIGV2ZW4gaW50ZXJhY3RzIHdpdGggaXQgaW5kaXJlY3RseSB0aHJvdWdoICYjMzQ7bmV0ZnMgZGlyZWN0IHdyaXRlJiMzNDsgb3BlcmF0aW9ucy4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIGRpZyB0aHJvdWdoIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9uIHBvaW50cy4gVGhlIHNwZWNpZmljcyBvZiB0aGUgc2VhcmNoIHRlcm1zIGFyZSBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHVzZS4gVGhpcyBjb3VsZCB1bmNvdmVyIHNvbWUgZGVzaWduIHBhdHRlcm5zIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zNzE9ZmlsZXN5c3RlbSBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgVkZTIHJlYWQvd3JpdGVfaXRlciBtZXRob2RzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3Ni1cdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDozNzc6XHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3OC1cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0PTM5Nz1UaGVyZSBhcmUgdGhyZWUgZnVuY3Rpb25zIGZvciB3cml0ZXM6OlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDAyLVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0MDM6XHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwNC1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbi0tXG5mcy85cC92ZnNfZmlsZS5jPTQwMT12OWZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy85cC92ZnNfZmlsZS5jLTQwOC1cdGlmIChmaWQtXHUwMDNlbW9kZSBcdTAwMjYgKFA5TF9ESVJFQ1QgfCBQOUxfTk9XUklURUNBQ0hFKSlcbmZzLzlwL3Zmc19maWxlLmM6NDA5Olx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvOXAvdmZzX2ZpbGUuYy00MTAtXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjAzPXN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwNy19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwOS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMC0vKipcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEyLSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjM6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjQte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM3OS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODA6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgxLW91dDpcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODQtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg1OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0yOTU5PXNzaXplX3QgY2lmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMjk2Ni1cdGlmIChpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpIHtcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjI5Njc6XHRcdHdyaXR0ZW4gPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0yOTY4LVx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgQ0lGU19DQUNIRV9SRUFEKGNpbm9kZSkpIHtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMzIzPXN0YXRpYyBpbnQgY2lmc19zd2FwX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzMjktXHRlbHNlXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzMwOlx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGl0ZXIsIE5VTEwpO1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzMzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTM5OT1zc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMC1cdFx0XHRcdFx0IHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDAyOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MDMtXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBmcy9uZXRmcyBNYWtlZmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIGBNYWtlZmlsZWAgaW4gYGZzL25ldGZzYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIG5ldHdvcmtpbmcgZmlsZXN5c3RlbSBpcyBjb25zdHJ1Y3RlZCwgbWFuYWdlZCwgYW5kIGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3VzcGVjdHM6IG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgbGlua2luZyBydWxlcywgbW9kdWxlIGRlZmluaXRpb25zLCBhbmQgaG9wZWZ1bGx5IHNvbWUgY2xldmVyIHVzZSBvZiBrZXJuZWwgYnVpbGQgc3lzdGVtIG1hY3Jvcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGV5JiMzOTtyZSB1c2luZyBhbnkgY3VzdG9tIG1ha2UgdmFyaWFibGVzIG9yIHRyaWNrcyB0byBvcHRpbWl6ZSB0aGUgYnVpbGQgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhleSBoYW5kbGUgdGhpbmdzIGxpa2UgcHJvdG9jb2wgc2VsZWN0aW9uIChpZiBpdCYjMzk7cyBtb2R1bGFyKSwgYW55IHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIGhvdyB0aGV5JiMzOTt2ZSBpbnRlZ3JhdGVkIHRoZWlyIGZpbGVzeXN0ZW0gaW50byB0aGUgdmlydHVhbCBmaWxlc3lzdGVtIGxheWVyIChgVkZTYCkuIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kgYW5kIGlkZW50aWZ5IGFueSBhcmVhcyByaXBlIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzIG9yIGFyZWFzIHRvIGF2b2lkIGluIG15IG93biBmdXR1cmUgYnVpbGRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZXRmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRuZXRmcy15IDo9IFxcXG4gICA0Olx0XHRidWZmZXJlZF9yZWFkLm8gXFxcbiAgIDU6XHRcdGJ1ZmZlcmVkX3dyaXRlLm8gXFxcbiAgIDY6XHRcdGRpcmVjdF9yZWFkLm8gXFxcbiAgIDc6XHRcdGRpcmVjdF93cml0ZS5vIFxcXG4gICA4Olx0XHRpdGVyYXRvci5vIFxcXG4gICA5Olx0XHRsb2NraW5nLm8gXFxcbiAgMTA6XHRcdG1haW4ubyBcXFxuICAxMTpcdFx0bWlzYy5vIFxcXG4gIDEyOlx0XHRvYmplY3RzLm8gXFxcbiAgMTM6XHRcdHJlYWRfY29sbGVjdC5vIFxcXG4gIDE0Olx0XHRyZWFkX3BncHJpdjIubyBcXFxuICAxNTpcdFx0cmVhZF9yZXRyeS5vIFxcXG4gIDE2Olx0XHRyZWFkX3NpbmdsZS5vIFxcXG4gIDE3Olx0XHRyb2xsaW5nX2J1ZmZlci5vIFxcXG4gIDE4Olx0XHR3cml0ZV9jb2xsZWN0Lm8gXFxcbiAgMTk6XHRcdHdyaXRlX2lzc3VlLm8gXFxcbiAgMjA6XHRcdHdyaXRlX3JldHJ5Lm9cbiAgMjE6XHRcbiAgMjI6XHRuZXRmcy0kKENPTkZJR19ORVRGU19TVEFUUykgJiM0Mzs9IHN0YXRzLm9cbiAgMjM6XHRcbiAgMjQ6XHRuZXRmcy0kKENPTkZJR19GU0NBQ0hFKSAmIzQzOz0gXFxcbiAgMjU6XHRcdGZzY2FjaGVfY2FjaGUubyBcXFxuICAyNjpcdFx0ZnNjYWNoZV9jb29raWUubyBcXFxuICAyNzpcdFx0ZnNjYWNoZV9pby5vIFxcXG4gIDI4Olx0XHRmc2NhY2hlX21haW4ubyBcXFxuICAyOTpcdFx0ZnNjYWNoZV92b2x1bWUub1xuICAzMDpcdFxuICAzMTpcdGlmZXEgKCQoQ09ORklHX1BST0NfRlMpLHkpXG4gIDMyOlx0bmV0ZnMtJChDT05GSUdfRlNDQUNIRSkgJiM0Mzs9IGZzY2FjaGVfcHJvYy5vXG4gIDMzOlx0ZW5kaWZcbiAgMzQ6XHRuZXRmcy0kKENPTkZJR19GU0NBQ0hFX1NUQVRTKSAmIzQzOz0gZnNjYWNoZV9zdGF0cy5vXG4gIDM1Olx0XG4gIDM2Olx0b2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpICYjNDM7PSBuZXRmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTkVURlNfU1VQUE9SVCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGBORVRGU19TVVBQT1JUYCBpbiB0aGlzIEtjb25maWcgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggS2NvbmZpZyBmaWxlcyB1dGlsaXplIGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIGJ1aWxkIGEgY2xlYXIgZGVwZW5kZW5jeSB0cmVlIGNlbnRlcmVkIGFyb3VuZCBgTkVURlNfU1VQUE9SVGAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBiZWNvbWUgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFjdGl2YXRlZCB3aGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBzZWxlY3Rpb24gb3IgZGVwZW5kZW5jZSBvY2N1cnMgYXQgYSBoaWdoLWxldmVsLCBwb3RlbnRpYWxseSBwdWxsaW5nIGluIGEgbGFyZ2VyIG5ldHdvcmsgc3Vic3lzdGVtLiBJJiMzOTtsbCBxdWlja2x5IG5lZWQgdG8gbWFwIG91dCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBlbmFibGluZyBvZiBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VwcG9ydCBhY3R1YWxseSAqbWVhbnMqIGF0IGEgY29uZmlnIGxldmVsLCBub3QganVzdCB3aGF0IGl0ICpzYXlzKiBpdCBtZWFucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNpZGUtZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWc9MzY9Q09ORklHX1FVT1RBPXlcbmFyY2gvY3NreS9jb25maWdzL2RlZmNvbmZpZzozNzpDT05GSUdfTkVURlNfU1VQUE9SVD1tXG5hcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWctMzgtQ09ORklHX0ZTQ0FDSEU9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTI4ND1DT05GSUdfQ1VTRT1tXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZzoyODU6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWctMjg2LUNPTkZJR19GU0NBQ0hFPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9waWMzMm16ZGFfZGVmY29uZmlnPTcwPUNPTkZJR19GVVNFX0ZTPW1cbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWc6NzE6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxuYXJjaC9taXBzL2NvbmZpZ3MvcGljMzJtemRhX2RlZmNvbmZpZy03Mi1DT05GSUdfRlNDQUNIRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnPTE3MD1DT05GSUdfQ1VTRT1tXG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWc6MTcxOkNPTkZJR19ORVRGU19TVVBQT1JUPW1cbmFyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZy0xNzItQ09ORklHX0ZTQ0FDSEU9eVxuLS1cbmZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcbi0tXG5mcy85cC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE5FVF85UFxuZnMvOXAvS2NvbmZpZzo1Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzLzlwL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfRExNKVx0XHQmIzQzOz0gZGxtL1xuLS1cbmZzL01ha2VmaWxlLTYzLSMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZVxuZnMvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX05FVEZTX1NVUFBPUlQpXHQmIzQzOz0gbmV0ZnMvXG5mcy9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfRVhUNF9GUylcdFx0JiM0Mzs9IGV4dDQvXG4tLVxuZnMvYWZzL0tjb25maWc9Mj1jb25maWcgQUZTX0ZTXG4tLVxuZnMvYWZzL0tjb25maWctNi1cdHNlbGVjdCBETlNfUkVTT0xWRVJcbmZzL2Fmcy9LY29uZmlnOjc6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvYWZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fS1JCNVxuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZz0zPWNvbmZpZyBDQUNIRUZJTEVTXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0ZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1wmIzM0O1xuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlQgXHUwMDI2XHUwMDI2IEZTQ0FDSEUgXHUwMDI2XHUwMDI2IEJMT0NLXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9jZXBoL0tjb25maWc9Mj1jb25maWcgQ0VQSF9GU1xuLS1cbmZzL2NlcGgvS2NvbmZpZy01LVx0c2VsZWN0IENFUEhfTElCXG5mcy9jZXBoL0tjb25maWc6NjpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9jZXBoL0tjb25maWctNy1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxuZnMvZXJvZnMvS2NvbmZpZzoxMjpcdHNlbGVjdCBORVRGU19TVVBQT1JUIGlmIEVST0ZTX0ZTX09OREVNQU5EXG5mcy9lcm9mcy9LY29uZmlnLTEzLVx0c2VsZWN0IFhYSEFTSCBpZiBFUk9GU19GU19YQVRUUlxuLS1cbmZzL25ldGZzL0tjb25maWctMi1cbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbi0tXG5mcy9uZXRmcy9LY29uZmlnPTEwPWNvbmZpZyBORVRGU19TVEFUU1xuZnMvbmV0ZnMvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7R2F0aGVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIG9uIGxvY2FsIGNhY2hpbmdcJiMzNDtcbmZzL25ldGZzL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlQgXHUwMDI2XHUwMDI2IFBST0NfRlNcbmZzL25ldGZzL0tjb25maWctMTMtXHRoZWxwXG4tLVxuZnMvbmV0ZnMvS2NvbmZpZz0yNT1jb25maWcgTkVURlNfREVCVUdcbmZzL25ldGZzL0tjb25maWctMjYtXHRib29sIFwmIzM0O0VuYWJsZSBkeW5hbWljIGRlYnVnZ2luZyBuZXRmc2xpYiBhbmQgRlMtQ2FjaGVcJiMzNDtcbmZzL25ldGZzL0tjb25maWc6Mjc6XHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlRcbmZzL25ldGZzL0tjb25maWctMjgtXHRoZWxwXG4tLVxuZnMvbmV0ZnMvS2NvbmZpZz0zMz1jb25maWcgRlNDQUNIRVxuZnMvbmV0ZnMvS2NvbmZpZy0zNC1cdGJvb2wgXCYjMzQ7R2VuZXJhbCBmaWxlc3lzdGVtIGxvY2FsIGNhY2hpbmcgbWFuYWdlclwmIzM0O1xuZnMvbmV0ZnMvS2NvbmZpZzozNTpcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy0zNi1cdGhlbHBcbi0tXG5mcy9uZXRmcy9NYWtlZmlsZT0zND1uZXRmcy0kKENPTkZJR19GU0NBQ0hFX1NUQVRTKSAmIzQzOz0gZnNjYWNoZV9zdGF0cy5vXG5mcy9uZXRmcy9NYWtlZmlsZS0zNS1cbmZzL25ldGZzL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKSAmIzQzOz0gbmV0ZnMub1xuLS1cbmZzL25mcy9LY29uZmlnPTE3Mz1jb25maWcgTkZTX0ZTQ0FDSEVcbi0tXG5mcy9uZnMvS2NvbmZpZy0xNzUtXHRkZXBlbmRzIG9uIE5GU19GU1xuZnMvbmZzL0tjb25maWc6MTc2Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzL25mcy9LY29uZmlnLTE3Ny1cdHNlbGVjdCBGU0NBQ0hFXG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnPTI9Y29uZmlnIENJRlNcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjEtXHRzZWxlY3QgT0lEX1JFR0lTVFJZXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjI6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIzLVx0aGVscFxuLS1cbm5ldC85cC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRfOVBcbm5ldC85cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQbGFuIDkgUmVzb3VyY2UgU2hhcmluZyBTdXBwb3J0ICg5UDIwMDApXCYjMzQ7XG5uZXQvOXAvS2NvbmZpZzo4Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbm5ldC85cC9LY29uZmlnLTktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc3CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDEwNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS2VybmVsIE5ldGZzIERpcmVjdCBXcml0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHVuYnVmZmVyZWQgd3JpdGUgcGF0aCBmb3IgbmV0d29yayBmaWxlc3lzdGVtcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgcmVsZXZhbnQgdG8gZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUy9TTUIsIEFGUywgYW5kIENlcGgsIHdoaWNoIGFyZSBhbGwgaW1wb3J0YW50IGZvciBuZXR3b3JrZWQgc3RvcmFnZSBhbmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB3aGVuIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCByZXRyaWVzIGEgc3VicmVxdWVzdCAoYHJldHJ5ID09IHRydWVgKSwgdGhlcmUgYXJlIHNldmVyYWwgbW9kaWZpY2F0aW9ucy4gVGhlIGNoYW5nZXMgdG8gYGlvdl9pdGVyX2FkdmFuY2VgIGFuZCBgd3JlcS0mZ3Q7dHJhbnNmZXJyZWRgIGxvb2sgc3RyYWlnaHRmb3J3YXJkLCBhY2NvdW50aW5nIGZvciB0cmFuc2ZlcnJlZCBkYXRhLiBUaGUgYWRkZWQgYF9fY2xlYXJfYml0YCBhbmQgY29uZGl0aW9uYWwgY2FsbCB0byBgc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlYCBhcmUgdGhlIG1vcmUgaW50ZXJlc3RpbmcgYXNwZWN0cy4gVGhlIHJlbW92YWwgb2YgdGhlIGBlbHNlYCBicmFuY2gsIGFuZCB0aGUgaW5zZXJ0aW9uIG9mIHdoYXQgYXBwZWFycyB0byBiZSBhIG1vcmUgZGVsaWJlcmF0ZSBwcmVwYXJhdGlvbiBzdGVwIHdpdGggYHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZWAgcG90ZW50aWFsbHkgaW5kaWNhdGUgYSBjaGFuZ2UgaW4gcmV0cnkgbG9naWMuIFRoaXMgY291bGQgYmUgc2lnbmlmaWNhbnQsIGJlY2F1c2UgdGhlIGNvZGUgcGF0aCBpcyBleGVjdXRlZCB3aXRoIGEgTlVMTCBgc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlYCB3aGljaCBjb3VsZCBiZSBhbiBpc3N1ZSwgYW5kIG5vdyBpdCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseS4KCk5vdywgaXMgdGhpcyByZWFjaGFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXRmcyBmdW5jdGlvbmFsaXR5IGFuZCwgYXNzdW1pbmcgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGBORVRGU19TVVBQT1JUYCBhcmUgZW5hYmxlZCwgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoLiBJcyBpdCByZWFjaGFibGUgaW4gUUVNVSBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFllcywgdGhyb3VnaCBhbnkgb2YgdGhlIG5ldHdvcmtlZCBmaWxlc3lzdGVtcyBJIG1lbnRpb25lZCDigJMgOXAsIENJRlMsIEFGUywgb3IgQ2VwaCwgYW5kIG9mIGNvdXJzZSB3aXRoIGRpcmVjdCBuZXRmcyB0ZXN0aW5nLgoKU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB1bmJ1ZmZlcmVkIHdyaXRlIHJldHJpZXMgYXJlIGhhbmRsZWQuIEEgc3VidGxlIGNoYW5nZSBpbiB0aGUgcmV0cnkgbG9naWMgY291bGQgaGF2ZSBhIGhpZ2ggaW1wYWN0IGluIHRlcm1zIG9mIHN0YWJpbGl0eSBvciBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggbmV0d29yayBmaWxlc3lzdGVtcy4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMgYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBGcm9tIHRoZSBjb2RlLCB0aGUgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgYXJlIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFuZCBgbmV0ZnNfZmlsZV93cml0ZV9pdGVyYC4gSSB3aWxsIGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGRpcmVjdF93cml0ZS5jIGFuZCBidWZmZXJlZF93cml0ZS5jIHRvIHZlcmlmeS4gTG9va2luZyBhdCB0aGUgc3ltYm9scywgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBhcmUgdGhlIG5vbi1zdGF0aWMgZXhwb3J0ZWQgZnVuY3Rpb25zLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCkkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgY29kZSBpcyByZWxldmFudCB0byBvdGhlciBjb2RlLgoKQ29uZmlnLXdpc2UsIGBORVRGU19TVVBQT1JUYCBpcyB0aGUgY29yZSwgYW5kIHRoZW4gZmlsZXN5c3RlbXMgc3VjaCBhcyBgOVBfRlNgLCBgQ0lGU2AsIGBBRlNfRlNgLCBhbmQgYENFUEhfRlNgIHNlbGVjdCBpdC4gVGhlIGtlcm5lbCBjb25maWcgY29uZmlybXMgdGhhdCBgTkVURlNfU1VQUE9SVGAgaXMgdHJpc3RhdGUgYW5kIHNlbGVjdGVkIGJ5IHRob3NlIGZpbGVzeXN0ZW1zLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgdGVsbHMgbWUgd2hpY2ggbW9kdWxlcyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlLgoKU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBlbmFibGUgYE5FVEZTX1NVUFBPUlRgLCBhcyB3ZWxsIGFzIGF0IGxlYXN0IGA5UF9GU2AgYW5kIGBDSUZTYC4gYEFGU19GU2AgYW5kIGBDRVBIX0ZTYCBhcmUgYWxzbyBhcHBsaWNhYmxlIHRvIGV4cGFuZCB0ZXN0aW5nLgoKTm93LCBsZXQmIzM5O3MgY29uc3RydWN0IHRoZSBgc2V0LXJlc3VsdHNgIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMuIEkgd2lsbCBnZW5lcmF0ZSBhIGxpc3QgdG8gZ2l2ZSB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGUgaW5zdHJ1Y3Rpb25zLgoKLSAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKLSAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LCAmIzM0O25ldGZzX2ZpbGVfd3JpdGVfaXRlciYjMzQ7XWAKLSAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O05FVEZTX1NVUFBPUlQmIzM0OywgJiMzNDs5UF9GUyYjMzQ7LCAmIzM0O0NJRlMmIzM0OywgJiMzNDtBRlNfRlMmIzM0OywgJiMzNDtDRVBIX0ZTJiMzNDtdYAotICAgYFJlYXNvbmluZ2A6IEZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgcmV0cnkgaGFuZGxpbmcgbG9naWMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IG1lY2hhbmlzbSB3aXRoaW4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBtYWtpbmcgaXQgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBpbiBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLiBUaGlzIGFmZmVjdHMgdW5idWZmZXJlZCB3cml0ZXMgd2l0aGluIG5ldHdvcmtlZCBmaWxlc3lzdGVtcy4KCldpdGggdGhhdCwgSSYjMzk7bSBzYXRpc2ZpZWQuIEl0JiMzOTtzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTZiYzc3NGJmYWRmOTAwM2I3MmRjNWNiMmIyZWI0YjhlM2M4ZDM2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDE3OjA3OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYwppbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NAotLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYwpAQCAtMTY2LDEzICYjNDM7MTY2LDE2IEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAkJICovCiAJCXN1YnJlcS0mZ3Q7ZXJyb3IgPSAtRUFHQUlOOwogCQl0cmFjZV9uZXRmc19zcmVxKHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9yZXRyeSk7Ci0JCWlmIChzdWJyZXEtJmd0O3RyYW5zZmVycmVkICZndDsgMCkKJiM0MzsJCWlmIChzdWJyZXEtJmd0O3RyYW5zZmVycmVkICZndDsgMCkgewogCQkJaW92X2l0ZXJfYWR2YW5jZSgmYW1wO3dyZXEtJmd0O2J1ZmZlci5pdGVyLCBzdWJyZXEtJmd0O3RyYW5zZmVycmVkKTsKJiM0MzsJCQl3cmVxLSZndDt0cmFuc2ZlcnJlZCAmIzQzOz0gc3VicmVxLSZndDt0cmFuc2ZlcnJlZDsKJiM0MzsJCX0KIAogCQlpZiAoc3RyZWFtLSZndDtzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiAmYW1wOyZhbXA7CiAJCSAgICB3cmVxLSZndDtuZXRmc19vcHMtJmd0O3JldHJ5X3JlcXVlc3QpCiAJCQl3cmVxLSZndDtuZXRmc19vcHMtJmd0O3JldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTsKIAomIzQzOwkJX19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksICZhbXA7c3VicmVxLSZndDtmbGFncyk7CiAJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksICZhbXA7c3VicmVxLSZndDtmbGFncyk7CiAJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwpAQCAtMTg2LDE3ICYjNDM7MTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAogCQluZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTsKIAotCQlpZiAoc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlKSB7CiYjNDM7CQlpZiAoc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlKQogCQkJc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlKHN1YnJlcSk7Ci0JCQlfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKLQkJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaW92X2l0ZXIgc291cmNlOwotCi0JCQluZXRmc19yZXNldF9pdGVyKHN1YnJlcSk7Ci0JCQlzb3VyY2UgPSBzdWJyZXEtJmd0O2lvX2l0ZXI7Ci0JCQluZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCAmYW1wO3NvdXJjZSk7Ci0JCX0KJiM0MzsJCV9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJbmV0ZnNfc3RhdCgmYW1wO25ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTsKIAl9CiAKIAluZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgY2hhbmdlLiBUaGUgcGF0Y2ggc3BlY2lmaWVzIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2AsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGVyZSBJJiMzOTtsbCBiZWdpbi4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGF0dGVudGlvbiBhcm91bmQgbGluZSAxNjYgaW4gdGhhdCBmaWxlLiBDb250ZXh0IGlzIGtpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0XHRcdHJldHJ5ID0gdHJ1ZTtcbiAxNDE6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MjpcdFx0XHRcdHJldCA9IHN1YnJlcS1cdTAwM2VlcnJvcjtcbiAxNDM6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gcmV0O1xuIDE0NDpcdFx0XHRcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcbiAxNDU6XHRcdFx0XHRzdWJyZXEgPSBOVUxMO1xuIDE0NjpcdFx0XHRcdGJyZWFrO1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHRcdHJldCA9IDA7XG4gMTQ5Olx0XG4gMTUwOlx0XHRcdGlmICghcmV0cnkpIHtcbiAxNTE6XHRcdFx0XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xuIDE1MjpcdFx0XHRcdHN1YnJlcSA9IE5VTEw7XG4gMTUzOlx0XHRcdFx0aWYgKHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlPSB3cmVxLVx1MDAzZWxlbilcbiAxNTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDE1NTpcdFx0XHRcdGlmICghd3JlcS1cdTAwM2Vpb2NiIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuIDE1NjpcdFx0XHRcdFx0cmV0ID0gd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCA/IC1FSU5UUiA6IC1FUkVTVEFSVFNZUztcbiAxNTc6XHRcdFx0XHRcdHRyYWNlX25ldGZzX3JyZXEod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9pbnRyKTtcbiAxNTg6XHRcdFx0XHRcdGJyZWFrO1xuIDE1OTpcdFx0XHRcdH1cbiAxNjA6XHRcdFx0XHRjb250aW51ZTtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0XHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxuIDE2NDpcdFx0XHQgKiBpdGVyYXRvciwgdGFraW5nIGludG8gYWNjb3VudCB3aGF0LCBpZiBhbnl0aGluZywgd2UgbWFuYWdlZFxuIDE2NTpcdFx0XHQgKiB0byB0cmFuc2Zlci5cbiAxNjY6XHRcdFx0ICovXG4gMTY3Olx0XHRcdHN1YnJlcS1cdTAwM2VlcnJvciA9IC1FQUdBSU47XG4gMTY4Olx0XHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcbiAxNjk6XHRcdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMCkge1xuIDE3MDpcdFx0XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIuaXRlciwgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiAxNzE6XHRcdFx0XHR3cmVxLVx1MDAzZXRyYW5zZmVycmVkICYjNDM7PSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTcyOlx0XHRcdH1cbiAxNzM6XHRcbiAxNzQ6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiAxNzU6XHRcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gMTc2Olx0XHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIDE3NzpcdFxuIDE3ODpcdFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTc5Olx0XHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODA6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiAxODE6XHRcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gMTgyOlx0XHRcdHN1YnJlcS1cdTAwM2Vpb19pdGVyXHRcdD0gd3JlcS1cdTAwM2VidWZmZXIuaXRlcjtcbiAxODM6XHRcdFx0c3VicmVxLVx1MDAzZXN0YXJ0XHRcdD0gd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuIDE4NDpcdFx0XHRzdWJyZXEtXHUwMDNlbGVuXHRcdD0gd3JlcS1cdTAwM2VsZW4gICAtIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4gMTg1Olx0XHRcdHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZFx0PSAwO1xuIDE4NjpcdFx0XHRzdWJyZXEtXHUwMDNlcmV0cnlfY291bnRcdCYjNDM7PSAxO1xuIDE4NzpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfbGVuXHQ9IFVJTlRfTUFYO1xuIDE4ODpcdFx0XHRzdHJlYW0tXHUwMDNlc3JlcV9tYXhfc2Vnc1x0PSBJTlRfTUFYO1xuIDE4OTpcdFxuIDE5MDpcdFx0XHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcbiAxOTE6XHRcbiAxOTI6XHRcdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKVxuIDE5MzpcdFx0XHRcdHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XG4gMTk0Olx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIDE5NTpcdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiAxOTY6XHRcdH1cbiAxOTc6XHRcbiAxOTg6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbiAxOTk6XHRcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiAyMDA6XHRcdHJldHVybiByZXQ7XG4gMjAxOlx0fVxuIDIwMjpcdFxuIDIwMzpcdHN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDIwNDpcdHtcbiAyMDU6XHRcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcbiAyMDY6XHRcbiAyMDc6XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XG4gMjA4Olx0XHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XG4gMjA5Olx0fVxuIDIxMDpcdFxuIDIxMTpcdC8qXG4gMjEyOlx0ICogUGVyZm9ybSBhbiB1bmJ1ZmZlcmVkIHdyaXRlIHdoZXJlIHdlIG1heSBoYXZlIHRvIGRvIGFuIFJNVyBvcGVyYXRpb24gb24gYW5cbiAyMTM6XHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXG4gMjE0Olx0ICovXG4gMjE1Olx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIDIxNjpcdFx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbiAyMTc6XHR7XG4gMjE4Olx0XHRzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcTtcbiAyMTk6XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjaGFuZ2luZy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIGhvdyB0aGUgYHRyYW5zZmVycmVkYCBjb3VudCBpcyBiZWluZyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHdyZXEtJmd0O3RyYW5zZmVycmVkYCBpcyBiZWluZyB1cGRhdGVkIGJ5IGFkZGluZyBgc3VicmVxLSZndDt0cmFuc2ZlcnJlZGAuIEFsb25nc2lkZSB0aGlzLCB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZyBpcyBiZWluZyBjbGVhcmVkLiBUaGUgaW50ZXJlc3RpbmcgcGFydCwgdGhvdWdoLCBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgY29uZGl0aW9uYWwgYnJhbmNoIHdpdGhpbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuIFRoZSBjb2RlIHRoYXQgcHJldmlvdXNseSBpbmNsdWRlZCBhbiBgaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSlgIGJsb2NrIGFuZCBhbiBgZWxzZWAgYnJhbmNoIGludm9sdmluZyBgbmV0ZnNfcmVpc3N1ZV93cml0ZWAgaXMgZ29uZS4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGdldCBtb3JlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBjaGFuZ2VzIHdlcmUgbWFkZS4gSSYjMzk7bGwgc2VhcmNoIGZvciByZWxhdGVkIGNvbW1pdCBtZXNzYWdlcywgZG9jdW1lbnRhdGlvbiwgb3IgYW55IG90aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCB3b3JrcyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vdGl2YXRpb25zIGJlaGluZCB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgdXNlZnVsIGhpc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlx0XHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02Ni1cdFx0XHRcdFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTUte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1MC1cdFx0aWYgKCFyZXRyeSkge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTUxOlx0XHRcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTItXHRcdFx0c3VicmVxID0gTlVMTDtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTctXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxOTg6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTktXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAzOnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA0LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMDc6XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA4LVx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfY29tcGxldGUpO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4NC1cdGlmIChhc3luYykge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg1Olx0XHRJTklUX1dPUksoXHUwMDI2d3JlcS1cdTAwM2V3b3JrLCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cdFx0d3JlcS1cdTAwM2Vpb2NiID0gaW9jYjtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODktXHR9IGVsc2Uge1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjkwOlx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkxLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMwODpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA5LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzExOiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTItICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyMi0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMyMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzc5LVx0XHRcdCAgIEZTQ0FDSEVfSU5WQUxfRElPX1dSSVRFKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MDpcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtb3V0OlxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NC19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODU6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGJlaGF2aW9yIG9mIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4gTm8gc2hvcnRjdXRzLCBubyBza2ltbWluZyB0aGUgc3VyZmFjZS4gSSB3YW50IHRoZSAqd2hvbGUqIHBpY3R1cmUsIGV2ZXJ5IHNpbmdsZSBudWFuY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiB3aXRoIGEgdmVyeSBrZWVuIGV5ZS4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGZyb20gdGhlIGluaXRpYWwgaW5wdXQgcHJvY2Vzc2luZyBhbmQgY2hlY2tzLCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMsIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB3aGF0ZXZlciB0aGUgdW5kZXJseWluZyBuZXR3b3JrIEkvTyBtZWNoYW5pc20gaXMsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBmYWlsdXJlIHBhdGhzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHRoZSByb2xlIG9mIGFueSBjYWNoaW5nIGlmIGl0JiMzOTtzIHRoZXJlIGF0IGFsbCwgd2hhdCBpdCBtZWFucyBmb3IgYXRvbWljaXR5LCBhbmQgaG93IGl0IGJlaGF2ZXMgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIHRyYW5zcG9ydHMgb3IgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBmb2N1cyBwYXJ0aWN1bGFybHkgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYmVpbmcgJiMzNDt1bmJ1ZmZlcmVkLiYjMzQ7IEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIHByZWNpc2UgbWVudGFsIG1vZGVsIG9mIGl0cyBleGVjdXRpb24gcGF0aCwgaW5jbHVkaW5nIGFsbCBzaWRlIGVmZmVjdHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGFudGljaXBhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyB1bmRlciBkaWZmZXJlbnQgbG9hZHMgYW5kIHByZWRpY3QgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdCAqIGluIHRoZSBkYXRhIHdyaXR0ZW4gZHVlIHRvIGEgZmFpbHVyZSBzdWNoIGFzIEVOT1NQQy4gIFdlIGNvdWxkLCBob3dldmVyXG4gIDkxOlx0ICogYXR0ZW1wdCB0byBkbyBwcmVwYXJhdGlvbiBzdWNoIGFzIGNvbnRlbnQgZW5jcnlwdGlvbiBmb3IgdGhlIG5leHQgc3VicmVxXG4gIDkyOlx0ICogd2hpbHN0IHRoZSBjdXJyZW50IGlzIGluIHByb2dyZXNzLlxuICA5MzpcdCAqL1xuICA5NDpcdHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxID0gTlVMTDtcbiAgOTc6XHRcdHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSA9IFx1MDAyNndyZXEtXHUwMDNlaW9fc3RyZWFtc1swXTtcbiAgOTg6XHRcdGludCByZXQ7XG4gIDk5Olx0XG4gMTAwOlx0XHRfZW50ZXIoXCYjMzQ7JWxseFwmIzM0Oywgd3JlcS1cdTAwM2VsZW4pO1xuIDEwMTpcdFxuIDEwMjpcdFx0aWYgKHdyZXEtXHUwMDNlb3JpZ2luID09IE5FVEZTX0RJT19XUklURSlcbiAxMDM6XHRcdFx0aW5vZGVfZGlvX2JlZ2luKHdyZXEtXHUwMDNlaW5vZGUpO1xuIDEwNDpcdFxuIDEwNTpcdFx0c3RyZWFtLVx1MDAzZWNvbGxlY3RlZF90byA9IHdyZXEtXHUwMDNlc3RhcnQ7XG4gMTA2Olx0XG4gMTA3Olx0XHRmb3IgKDs7KSB7XG4gMTA4Olx0XHRcdGJvb2wgcmV0cnkgPSBmYWxzZTtcbiAxMDk6XHRcbiAxMTA6XHRcdFx0aWYgKCFzdWJyZXEpIHtcbiAxMTE6XHRcdFx0XHRuZXRmc19wcmVwYXJlX3dyaXRlKHdyZXEsIHN0cmVhbSwgd3JlcS1cdTAwM2VzdGFydCAmIzQzOyB3cmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiAxMTI6XHRcdFx0XHRzdWJyZXEgPSBzdHJlYW0tXHUwMDNlY29uc3RydWN0O1xuIDExMzpcdFx0XHRcdHN0cmVhbS1cdTAwM2Vjb25zdHJ1Y3QgPSBOVUxMO1xuIDExNDpcdFx0XHR9XG4gMTE1Olx0XG4gMTE2Olx0XHRcdC8qIENoZWNrIGlmIChyZS0pcHJlcGFyYXRpb24gZmFpbGVkLiAqL1xuIDExNzpcdFx0XHRpZiAodW5saWtlbHkodGVzdF9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncykpKSB7XG4gMTE4Olx0XHRcdFx0bmV0ZnNfd3JpdGVfc3VicmVxdWVzdF90ZXJtaW5hdGVkKHN1YnJlcSwgc3VicmVxLVx1MDAzZWVycm9yKTtcbiAxMTk6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gc3VicmVxLVx1MDAzZWVycm9yO1xuIDEyMDpcdFx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0XHR9XG4gMTIyOlx0XG4gMTIzOlx0XHRcdGlvdl9pdGVyX3RydW5jYXRlKFx1MDAyNnN1YnJlcS1cdTAwM2Vpb19pdGVyLCB3cmVxLVx1MDAzZWxlbiAtIHdyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuIDEyNDpcdFx0XHRpZiAoIWlvdl9pdGVyX2NvdW50KFx1MDAyNnN1YnJlcS1cdTAwM2Vpb19pdGVyKSlcbiAxMjU6XHRcdFx0XHRicmVhaztcbiAxMjY6XHRcbiAxMjc6XHRcdFx0c3VicmVxLVx1MDAzZWxlbiA9IG5ldGZzX2xpbWl0X2l0ZXIoXHUwMDI2c3VicmVxLVx1MDAzZWlvX2l0ZXIsIDAsXG4gMTI4Olx0XHRcdFx0XHRcdCAgICAgICBzdHJlYW0tXHUwMDNlc3JlcV9tYXhfbGVuLFxuIDEyOTpcdFx0XHRcdFx0XHQgICAgICAgc3RyZWFtLVx1MDAzZXNyZXFfbWF4X3NlZ3MpO1xuIDEzMDpcdFx0XHRpb3ZfaXRlcl90cnVuY2F0ZShcdTAwMjZzdWJyZXEtXHUwMDNlaW9faXRlciwgc3VicmVxLVx1MDAzZWxlbik7XG4gMTMxOlx0XHRcdHN0cmVhbS1cdTAwM2VzdWJtaXRfZXh0ZW5kYWJsZV90byA9IHN1YnJlcS1cdTAwM2VsZW47XG4gMTMyOlx0XG4gMTMzOlx0XHRcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3N1Ym1pdCk7XG4gMTM0Olx0XHRcdHN0cmVhbS1cdTAwM2Vpc3N1ZV93cml0ZShzdWJyZXEpO1xuIDEzNTpcdFxuIDEzNjpcdFx0XHQvKiBBc3luYywgbmVlZCB0byB3YWl0LiAqL1xuIDEzNzpcdFx0XHRuZXRmc193YWl0X2Zvcl9pbl9wcm9ncmVzc19zdHJlYW0od3JlcSwgc3RyZWFtKTtcbiAxMzg6XHRcbiAxMzk6XHRcdFx0aWYgKHRlc3RfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MDpcdFx0XHRcdHJldHJ5ID0gdHJ1ZTtcbiAxNDE6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKSkge1xuIDE0MjpcdFx0XHRcdHJldCA9IHN1YnJlcS1cdTAwM2VlcnJvcjtcbiAxNDM6XHRcdFx0XHR3cmVxLVx1MDAzZWVycm9yID0gcmV0O1xuIDE0NDpcdFx0XHRcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MQoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiAxMDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBSZXRyeSBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCByZXRyeSBzY2VuYXJpby4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIHdoZW4gYSB3cml0ZSBvcGVyYXRpb24gbmVlZHMgdG8gYmUgcmV0cmllZC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHNlY3Rpb24gZGVhbGluZyB3aXRoIGByZXRyeSA9PSB0cnVlYC4KCkZpcnN0LCBJIG5vdGljZWQgYW4gb2Zmc2V0IGFjY291bnRpbmcgaXNzdWU6IGlmIGEgc3ViLXJlcXVlc3QgKGBzdWJyZXFgKSBoYWQgdHJhbnNmZXJyZWQgZGF0YSwgYnV0IGB3cmVxLSZndDt0cmFuc2ZlcnJlZGAgd2FzbiYjMzk7dCB1cGRhdGVkIGFjY29yZGluZ2x5LCB0aGVuIHN1YnNlcXVlbnQgY2FsY3VsYXRpb25zIGJhc2VkIG9uIGB3cmVxLSZndDt0cmFuc2ZlcnJlZGAgd291bGQgYmUgb2ZmLCBzcGVjaWZpY2FsbHksIGBzdWJyZXEtJmd0O3N0YXJ0ID0gd3JlcS0mZ3Q7c3RhcnQgJiM0Mzsgd3JlcS0mZ3Q7dHJhbnNmZXJyZWRgLiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgYHdyZXEtJmd0O3RyYW5zZmVycmVkICYjNDM7PSBzdWJyZXEtJmd0O3RyYW5zZmVycmVkYCwgd2hpY2ggY29ycmVjdHMgdGhlIG9mZnNldC4KCk5leHQsIEkgb2JzZXJ2ZWQgdGhhdCB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZyB3YXMgYmVpbmcgY2xlYXJlZCwgd2hpY2ggaXMgZXhwZWN0ZWQgYmVoYXZpb3IgZm9yIGEgcmV0cnkuIFRoZSBjb2RlIHRoZW4gcmUtaW5pdGlhbGl6ZXMgdGhlIGBzdWJyZXFgIGZvciB0aGUgcmV0cnksIGluY2x1ZGluZyB0aGUgSU8gaXRlcmF0b3IgYW5kIGNvdW50ZXJzLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gdGhlIHJldHJ5IGxvb3AsIEkgc2VlIHRoZSBjb2RlIHVzZWQgdG8gaGF2ZSBhbiBgZWxzZWAgYnJhbmNoIHRoYXQgZGlyZWN0bHkgY2FsbGVkIGBuZXRmc19yZWlzc3VlX3dyaXRlYC4gSG93ZXZlciwgY2FsbGluZyB0aGlzIGRpcmVjdGx5IHdpdGhpbiB0aGUgcmV0cnkgcGF0aCBjb3VsZCBsZWFkIHRvIGRvdWJsZSBpc3N1YW5jZSBvZiB3cml0ZSByZXF1ZXN0cyBvciBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gVGhlIGZpeCBpcyB0byByZW1vdmUgdGhpcyBjb25kaXRpb25hbCBjYWxsLiBJbnN0ZWFkLCBpZiBgc3RyZWFtLSZndDtwcmVwYXJlX3dyaXRlYCBpcyBwcmVzZW50LCBpdCBpcyBjYWxsZWQsIHRoZSBgTkVURlNfU1JFUV9JTl9QUk9HUkVTU2AgZmxhZyBpcyBzZXQsIGFuZCB0aGUgcmV0cnkgbG9vcCByZXN1Ym1pdHMgdGhlIHdyaXRlIG9wZXJhdGlvbiBjbGVhbmx5LiBUaGlzIGNoYW5nZSByZXNvbHZlcyBhIHBvdGVudGlhbCBkb3VibGUtd3JpdGUgaXNzdWUgYW5kIGVuc3VyZXMgdGhlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbnMuCgpJJiMzOTt2ZSBhbHNvIHBlcmZvcm1lZCBhIHRob3JvdWdoIGNoZWNrIGZvciBtZW1vcnktcmVsYXRlZCBpc3N1ZXM6CgoqICAgKipBbGxvY2F0aW9uOioqIE5vIG5ldyBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgaGVyZS4KKiAgICoqVXNlcnNwYWNlIENvcHk6KiogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIHRoaXMgcGF0Y2guCiogICAqKlVuaW5pdGlhbGl6ZWQgRmllbGRzOioqIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgaW50cm9kdWNlZCBvciB1c2VkLgoqICAgKipVbmluaXRpYWxpemVkIEp1bXBzOioqIE5vIGNvbmRpdGlvbmFsIGp1bXBzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4KKiAgICoqRGF0YSBNYW5pcHVsYXRpb246KiogRXZlcnl0aGluZyBpcyBjb25maW5lZCB0byBleGlzdGluZyBzdHJ1Y3R1cmVzIChgbmV0ZnNfaW9fcmVxdWVzdGAsIGBuZXRmc19pb19zdWJyZXF1ZXN0YCwgZmxhZ3MsIGFuZCB2YXJpb3VzIGNvdW50ZXJzKS4KCkNvbnNpZGVyaW5nIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgSSBjYW4gY29uZmlybSB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiB0aGUgZmlsZXN5c3RlbSBJL08gYWNjb3VudGluZyBhbmQgcmV0cnkgc3RhdGUgbWFjaGluZS4gVGhlIGlkZW50aWZpZWQgYnVnIHJlbGF0ZXMgdG8gdGhlIGxvZ2ljYWwgZmxvdyBvZiByZXRyaWVzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHksIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gYW5kIHRoZSBjb250cm9sIGZsb3csIHByZXZlbnRpbmcgZG91YmxlIGlzc3VhbmNlIG9mIHJlcXVlc3RzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBLQVNBTiBjb3ZlcnMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdHMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiwgYW5kIHdpbGwgY29udGludWUgdG8gd29yayBub3JtYWxseS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpYy9zdGF0ZSBtYWNoaW5lLXJlbGF0ZWQgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDc6MTIuNDE2ODQ5OTU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2ODUyMjE1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZTX1NVUFBPUlRcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIkNFUEhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIixcbiAgICBcIm5ldGZzX2ZpbGVfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IHBhdGggaW4gbmV0ZnMgdW5idWZmZXJlZCB3cml0ZSAoYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBgd3JlcS1cXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGludGVybmFsIHN0YXRlIGFuZCBjb250cm9sIGZsb3cgYWRqdXN0bWVudHMgZm9yIEkvTyB0cmFja2luZyBhbmQgc3VicmVxdWVzdCByZXRyeSBoYW5kbGluZyBpbiB0aGUgbmV0ZnMgc3Vic3lzdGVtLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBsb2dpYyBpbiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGhlbHBlciBsaWJyYXJ5IChmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyksIHVwZGF0aW5nIGFjY291bnRpbmcgZm9yIHRyYW5zZmVycmVkIGJ5dGVzIGFuZCBhZGp1c3RpbmcgaG93IHJldHJpZWQgc3VicmVxdWVzdHMgYXJlIHN1Ym1pdHRlZC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBkaXJlY3QvdW5idWZmZXJlZCB3cml0ZSBvcGVyYXRpb25zIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgc3VjaCBhcyA5cCwgQ0lGUywgQUZTLCBhbmQgQ2VwaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDc6MTIuNDE2ODU0NzM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI3MDE2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNmJjNzc0YmZhZGY5MDAzYjcyZGM1Y2IyYjJlYjRiOGUzYzhkMzY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDE3OjA3OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5pbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3VicmVxLVxcdTAwM2VlcnJvciA9IC1FQUdBSU47XFxuIFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4tXFx0XFx0aWYgKHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQgXFx1MDAzZSAwKVxcbitcXHRcXHRpZiAoc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbitcXHRcXHRcXHR3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoc3RyZWFtLVxcdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgd3JlcS1cXHUwMDNlbmV0ZnNfb3BzLVxcdTAwM2VyZXRyeV9yZXF1ZXN0KVxcbiBcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gXFxuK1xcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbkBAIC0xODYsMTcgKzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuIFxcbiBcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gXFxuLVxcdFxcdGlmIChzdHJlYW0tXFx1MDAzZXByZXBhcmVfd3JpdGUpIHtcXG4rXFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gXFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XFxuLVxcdFxcdFxcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyIHNvdXJjZTtcXG4tXFxuLVxcdFxcdFxcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcXG4tXFx0XFx0XFx0c291cmNlID0gc3VicmVxLVxcdTAwM2Vpb19pdGVyO1xcbi1cXHRcXHRcXHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcXHUwMDI2c291cmNlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRuZXRmc19zdGF0KFxcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XFxuIFxcdH1cXG4gXFxuIFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDc6MTIuODIwMjk5NzExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODEzNTU3NzA0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURlNfU1VQUE9SVFwiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfZmlsZV93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IGxvZ2ljIGluIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUgd2l0aGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gaGVscGVyIGxpYnJhcnkgKGZzL25ldGZzL2RpcmVjdF93cml0ZS5jKSwgdXBkYXRpbmcgYWNjb3VudGluZyBmb3IgdHJhbnNmZXJyZWQgYnl0ZXMgYW5kIGFkanVzdGluZyBob3cgcmV0cmllZCBzdWJyZXF1ZXN0cyBhcmUgc3VibWl0dGVkLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGRpcmVjdC91bmJ1ZmZlcmVkIHdyaXRlIG9wZXJhdGlvbnMgb24gbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIDlwLCBDSUZTLCBBRlMsIGFuZCBDZXBoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNmJjNzc0YmZhZGY5MDAzYjcyZGM1Y2IyYjJlYjRiOGUzYzhkMzY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTc6MDc6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCBmOWFiNjlkZTNlMjk4Li5jMjg3M2VjYmVjZWI2IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0XHQgKi9cbiBcdFx0c3VicmVxLVx1MDAzZWVycm9yID0gLUVBR0FJTjtcbiBcdFx0dHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpO1xuLVx0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKVxuK1x0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKSB7XG4gXHRcdFx0aW92X2l0ZXJfYWR2YW5jZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlci5pdGVyLCBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuK1x0XHRcdHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChzdHJlYW0tXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB3cmVxLVx1MDAzZW5ldGZzX29wcy1cdTAwM2VyZXRyeV9yZXF1ZXN0KVxuIFx0XHRcdHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcbiBcbitcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuQEAgLTE4NiwxNyArMTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcbiBcdFx0bmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7XG4gXG4tXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSkge1xuK1x0XHRpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpXG4gXHRcdFx0c3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUoc3VicmVxKTtcbi1cdFx0XHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgc291cmNlO1xuLVxuLVx0XHRcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcbi1cdFx0XHRzb3VyY2UgPSBzdWJyZXEtXHUwMDNlaW9faXRlcjtcbi1cdFx0XHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcdTAwMjZzb3VyY2UpO1xuLVx0XHR9XG4rXHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA3OjEyLjgyMDMwMjEyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1OTI3MjI2ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBOZXRGUyBEaXJlY3QgV3JpdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2AuIE15IHNwaWRleSBzZW5zZXMgYXJlIHRpbmdsaW5nIOKAkyB0aW1lIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB3aGF0J3MgZ29pbmcgb24gaGVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgaW4gdGhlIGBmcy9uZXRmcy9gIGRpcmVjdG9yeS4gSSdsbCB0YWtlIGEgcXVpY2sgc2NhbiBvZiB0aGUgb3RoZXIgZmlsZXMsIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgS2NvbmZpZ3MsIGFuZCBzZWUgaWYgYW55IHNwZWNpZmljIHN5bWJvbHMgYXJlIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gXG5cbk9uY2UgSSd2ZSBnb3QgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyZSwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3MuIEknbGwgYmUgbGV2ZXJhZ2luZyBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIOKAkyBjbGFzc2ljIHRvb2xzLCBidXQgdGhleSdsbCBiZSBpbnZhbHVhYmxlIGhlcmUuIEkgd2FudCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgKmV4YWN0KiBjaGFuZ2VzIG1hZGUgaW4gYGRpcmVjdF93cml0ZS5jYCBhbmQsIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgdGhvc2UgY2hhbmdlcyBhcmUgYmVpbmcgKnVzZWQqLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZSBzeXN0ZW1zLCBzbyB0cmFja2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGlzIGNyaXRpY2FsLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzcsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowODo0OC43NDc1MzEyOThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0XFx0XFx0cmV0cnkgPSB0cnVlO1xcbiAxNDE6XFx0XFx0XFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpKSB7XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSBzdWJyZXEtXFx1MDAzZWVycm9yO1xcbiAxNDM6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNlZXJyb3IgPSByZXQ7XFxuIDE0NDpcXHRcXHRcXHRcXHRuZXRmc19zZWVfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2Vfc2VlX2ZhaWxlZCk7XFxuIDE0NTpcXHRcXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbiAxNDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRpZiAoIXJldHJ5KSB7XFxuIDE1MTpcXHRcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbiAxNTI6XFx0XFx0XFx0XFx0c3VicmVxID0gTlVMTDtcXG4gMTUzOlxcdFxcdFxcdFxcdGlmICh3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlPSB3cmVxLVxcdTAwM2VsZW4pXFxuIDE1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU1OlxcdFxcdFxcdFxcdGlmICghd3JlcS1cXHUwMDNlaW9jYiBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbiAxNTY6XFx0XFx0XFx0XFx0XFx0cmV0ID0gd3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgPyAtRUlOVFIgOiAtRVJFU1RBUlRTWVM7XFxuIDE1NzpcXHRcXHRcXHRcXHRcXHR0cmFjZV9uZXRmc19ycmVxKHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfaW50cik7XFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNjE6XFx0XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRcXHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxcbiAxNjQ6XFx0XFx0XFx0ICogaXRlcmF0b3IsIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCwgaWYgYW55dGhpbmcsIHdlIG1hbmFnZWRcXG4gMTY1OlxcdFxcdFxcdCAqIHRvIHRyYW5zZmVyLlxcbiAxNjY6XFx0XFx0XFx0ICovXFxuIDE2NzpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWVycm9yID0gLUVBR0FJTjtcXG4gMTY4OlxcdFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4gMTY5OlxcdFxcdFxcdGlmIChzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkIFxcdTAwM2UgMCkge1xcbiAxNzA6XFx0XFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbiAxNzE6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTcyOlxcdFxcdFxcdH1cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXFx1MDAyNlxcdTAwMjZcXG4gMTc1OlxcdFxcdFxcdCAgICB3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3QpXFxuIDE3NjpcXHRcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE3OTpcXHRcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgwOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgxOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE4MjpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWlvX2l0ZXJcXHRcXHQ9IHdyZXEtXFx1MDAzZWJ1ZmZlci5pdGVyO1xcbiAxODM6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2VzdGFydFxcdFxcdD0gd3JlcS1cXHUwMDNlc3RhcnQgKyB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTg0OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlbGVuXFx0XFx0PSB3cmVxLVxcdTAwM2VsZW4gICAtIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbiAxODU6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZFxcdD0gMDtcXG4gMTg2OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlcmV0cnlfY291bnRcXHQrPSAxO1xcbiAxODc6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9sZW5cXHQ9IFVJTlRfTUFYO1xcbiAxODg6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9zZWdzXFx0PSBJTlRfTUFYO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gMTkzOlxcdFxcdFxcdFxcdHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xcbiAxOTQ6XFx0XFx0XFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTk1OlxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4gMTk2OlxcdFxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xcbiAxOTk6XFx0XFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIDIwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMDE6XFx0fVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcXG4gMjA4OlxcdFxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4gMjA5OlxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0LypcXG4gMjEyOlxcdCAqIFBlcmZvcm0gYW4gdW5idWZmZXJlZCB3cml0ZSB3aGVyZSB3ZSBtYXkgaGF2ZSB0byBkbyBhbiBSTVcgb3BlcmF0aW9uIG9uIGFuXFxuIDIxMzpcXHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXFxuIDIxNDpcXHQgKi9cXG4gMjE1OlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gMjE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4gMjE3OlxcdHtcXG4gMjE4OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxO1xcbiAyMTk6XFx0XFx0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0ID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzowODo0OC43NDc2MjIyMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZXRmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBORVRGU19TVVBQT1JUXFxuICAgNDpcXHRcXHR0cmlzdGF0ZVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIGluY2x1ZGluZ1xcbiAgIDc6XFx0XFx0ICBoZWxwZXJzIGZvciBoaWdoLWxldmVsIGJ1ZmZlcmVkIEkvTywgYWJzdHJhY3Rpbmcgb3V0IHJlYWRcXG4gICA4OlxcdFxcdCAgc2VnbWVudGF0aW9uLCBsb2NhbCBjYWNoaW5nIGFuZCB0cmFuc3BhcmVudCBodWdlIHBhZ2Ugc3VwcG9ydC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVEZTX1NUQVRTXFxuICAxMTpcXHRcXHRib29sIFxcXCJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1xcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gTkVURlNfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGNhdXNlcyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBsb2NhbFxcbiAgMTU6XFx0XFx0ICBjYWNoaW5nIGFuZCBleHBvcnRlZCB0aHJvdWdoIGZpbGU6XFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdFxcdC9wcm9jL2ZzL2ZzY2FjaGUvc3RhdHNcXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUaGUgZ2F0aGVyaW5nIG9mIHN0YXRpc3RpY3MgYWRkcyBhIGNlcnRhaW4gYW1vdW50IG9mIG92ZXJoZWFkIHRvXFxuICAyMDpcXHRcXHQgIGV4ZWN1dGlvbiBhcyB0aGVyZSBhcmUgYSBxdWl0ZSBhIGZldyBzdGF0cyBnYXRoZXJlZCwgYW5kIG9uIGFcXG4gIDIxOlxcdFxcdCAgbXVsdGktQ1BVIHN5c3RlbSB0aGVzZSBtYXkgYmUgb24gY2FjaGVsaW5lcyB0aGF0IGtlZXAgYm91bmNpbmdcXG4gIDIyOlxcdFxcdCAgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBzdGF0cyBhcmUgdmVyeSB1c2VmdWwgZm9yXFxuICAyMzpcXHRcXHQgIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFNheWluZyAnWScgaGVyZSBpcyByZWNvbW1lbmRlZC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIE5FVEZTX0RFQlVHXFxuICAyNjpcXHRcXHRib29sIFxcXCJFbmFibGUgZHluYW1pYyBkZWJ1Z2dpbmcgbmV0ZnNsaWIgYW5kIEZTLUNhY2hlXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFRoaXMgcGVybWl0cyBkZWJ1Z2dpbmcgdG8gYmUgZHluYW1pY2FsbHkgZW5hYmxlZCBpbiB0aGUgbG9jYWwgY2FjaGluZ1xcbiAgMzA6XFx0XFx0ICBtYW5hZ2VtZW50IG1vZHVsZS4gIElmIHRoaXMgaXMgc2V0LCB0aGUgZGVidWdnaW5nIG91dHB1dCBtYXkgYmVcXG4gIDMxOlxcdFxcdCAgZW5hYmxlZCBieSBzZXR0aW5nIGJpdHMgaW4gL3N5cy9tb2R1bGUvbmV0ZnMvcGFyYW1ldGVycy9kZWJ1Zy5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIEZTQ0FDSEVcXG4gIDM0OlxcdFxcdGJvb2wgXFxcIkdlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXJcXFwiXFxuICAzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlRcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoaW5nIG1hbmFnZXIgdGhhdCBjYW4gYmVcXG4gIDM4OlxcdFxcdCAgdXNlZCBieSB2YXJpb3VzIG5ldHdvcmsgYW5kIG90aGVyIGZpbGVzeXN0ZW1zIHRvIGNhY2hlIGRhdGEgbG9jYWxseS5cXG4gIDM5OlxcdFxcdCAgRGlmZmVyZW50IHNvcnRzIG9mIGNhY2hlcyBjYW4gYmUgcGx1Z2dlZCBpbiwgZGVwZW5kaW5nIG9uIHRoZVxcbiAgNDA6XFx0XFx0ICByZXNvdXJjZXMgYXZhaWxhYmxlLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBGU0NBQ0hFX1NUQVRTXFxuICA0NTpcXHRcXHRib29sIFxcXCJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1xcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gRlNDQUNIRSBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuICA0NzpcXHRcXHRzZWxlY3QgTkVURlNfU1RBVFNcXG4gIDQ4OlxcdFxcdGhlbHBcXG4gIDQ5OlxcdFxcdCAgVGhpcyBvcHRpb24gY2F1c2VzIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIG9uIGxvY2FsXFxuICA1MDpcXHRcXHQgIGNhY2hpbmcgYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDg6NDguNzQ3NjkzMDM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDgzMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njk9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4Mi1cXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDgzOlxcdFxcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODQtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTYte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6NjU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjk0OnN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05NS17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTAtXFx0XFx0aWYgKCFyZXRyeSkge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1MTpcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1Mi1cXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk3LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE5ODpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk5LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMzpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDQte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA2LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwNzpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC1cXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE1OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg0LVxcdGlmIChhc3luYykge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI4NTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNndyZXEtXFx1MDAzZXdvcmssIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cXHRcXHR3cmVxLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4OS1cXHR9IGVsc2Uge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI5MDpcXHRcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5MS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzIzOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zNzktXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MDpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4MS1vdXQ6XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODQtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4NTpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjA4OjQ4Ljc5NTc4NzY0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MzI1NTU1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB0aGlua2luZyBhbG91ZCBhcyBJIGdvOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZnMgVW5idWZmZXJlZCBXcml0ZSBJdGVyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXRoaW5nIHRoYXQgY2FsbHMgaXQgZGlyZWN0bHksIG9yIGV2ZW4gaW50ZXJhY3RzIHdpdGggaXQgaW5kaXJlY3RseSB0aHJvdWdoIFwibmV0ZnMgZGlyZWN0IHdyaXRlXCIgb3BlcmF0aW9ucy4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIGRpZyB0aHJvdWdoIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBzZWFyY2ggdGVybXMgYXJlIGNydWNpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgdXNlLiBUaGlzIGNvdWxkIHVuY292ZXIgc29tZSBkZXNpZ24gcGF0dGVybnMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjg4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDk6NDguMTIxMzQ2Mzc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODE4NTY1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9MzcxPWZpbGVzeXN0ZW0gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIFZGUyByZWFkL3dyaXRlX2l0ZXIgbWV0aG9kczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3Ni1cXHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjM3NzpcXHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0PTM5Nz1UaGVyZSBhcmUgdGhyZWUgZnVuY3Rpb25zIGZvciB3cml0ZXM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDAzOlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG4tLVxcbmZzLzlwL3Zmc19maWxlLmM9NDAxPXY5ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYy00MDgtXFx0aWYgKGZpZC1cXHUwMDNlbW9kZSBcXHUwMDI2IChQOUxfRElSRUNUIHwgUDlMX05PV1JJVEVDQUNIRSkpXFxuZnMvOXAvdmZzX2ZpbGUuYzo0MDk6XFx0XFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy85cC92ZnNfZmlsZS5jLTQxMC1cXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY5PXNzaXplX3QgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODItXFx0ICAgIHRlc3RfYml0KE5FVEZTX0lDVFhfVU5CVUZGRVJFRCwgXFx1MDAyNmljdHgtXFx1MDAzZWZsYWdzKSlcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4MzpcXHRcXHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDg0LVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjAzPXN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE0LSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIxNTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwNy19XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA5LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMC0vKipcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMTE6ICogbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyIC0gVW5idWZmZXJlZCB3cml0ZSB0byBhIGZpbGVcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTItICogQGlvY2I6IElPIHN0YXRlIHN0cnVjdHVyZVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzIyLSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMyMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjQte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzc5LVxcdFxcdFxcdCAgIEZTQ0FDSEVfSU5WQUxfRElPX1dSSVRFKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODA6XFx0cmV0ID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChpb2NiLCBmcm9tLCBOVUxMKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtb3V0Olxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzg0LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODU6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9Mjk1OT1zc2l6ZV90IGNpZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMjk2Ni1cXHRpZiAoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fRElSRUNUKSB7XFxuZnMvc21iL2NsaWVudC9maWxlLmM6Mjk2NzpcXHRcXHR3cml0dGVuID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTI5NjgtXFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IENJRlNfQ0FDSEVfUkVBRChjaW5vZGUpKSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMzIzPXN0YXRpYyBpbnQgY2lmc19zd2FwX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzMyOS1cXHRlbHNlXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzMzMDpcXHRcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGl0ZXIsIE5VTEwpO1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9Mzk5PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cCk7XFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMTpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMjpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMy1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MDk6NTAuMDAzMjExODM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MjEzMjE3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGZzL25ldGZzIE1ha2VmaWxlKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIGBNYWtlZmlsZWAgaW4gYGZzL25ldGZzYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUgbmV0d29ya2luZyBmaWxlc3lzdGVtIGlzIGNvbnN0cnVjdGVkLCBtYW5hZ2VkLCBhbmQgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN1c3BlY3RzOiBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGxpbmtpbmcgcnVsZXMsIG1vZHVsZSBkZWZpbml0aW9ucywgYW5kIGhvcGVmdWxseSBzb21lIGNsZXZlciB1c2Ugb2Yga2VybmVsIGJ1aWxkIHN5c3RlbSBtYWNyb3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGV5J3JlIHVzaW5nIGFueSBjdXN0b20gbWFrZSB2YXJpYWJsZXMgb3IgdHJpY2tzIHRvIG9wdGltaXplIHRoZSBidWlsZCBmb3IgZGlmZmVyZW50IG5ldHdvcmsgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIHByb3RvY29sIHNlbGVjdGlvbiAoaWYgaXQncyBtb2R1bGFyKSwgYW55IHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIGhvdyB0aGV5J3ZlIGludGVncmF0ZWQgdGhlaXIgZmlsZXN5c3RlbSBpbnRvIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0gbGF5ZXIgKGBWRlNgKS4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCB0aGUgb3ZlcmFsbCBidWlsZCBzdHJhdGVneSBhbmQgaWRlbnRpZnkgYW55IGFyZWFzIHJpcGUgZm9yIHBvdGVudGlhbCBpbXByb3ZlbWVudHMgb3IgYXJlYXMgdG8gYXZvaWQgaW4gbXkgb3duIGZ1dHVyZSBidWlsZHMuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDowOS45MjQ1MzcxODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmV0ZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG5ldGZzLXkgOj0gXFxcXFxcbiAgIDQ6XFx0XFx0YnVmZmVyZWRfcmVhZC5vIFxcXFxcXG4gICA1OlxcdFxcdGJ1ZmZlcmVkX3dyaXRlLm8gXFxcXFxcbiAgIDY6XFx0XFx0ZGlyZWN0X3JlYWQubyBcXFxcXFxuICAgNzpcXHRcXHRkaXJlY3Rfd3JpdGUubyBcXFxcXFxuICAgODpcXHRcXHRpdGVyYXRvci5vIFxcXFxcXG4gICA5OlxcdFxcdGxvY2tpbmcubyBcXFxcXFxuICAxMDpcXHRcXHRtYWluLm8gXFxcXFxcbiAgMTE6XFx0XFx0bWlzYy5vIFxcXFxcXG4gIDEyOlxcdFxcdG9iamVjdHMubyBcXFxcXFxuICAxMzpcXHRcXHRyZWFkX2NvbGxlY3QubyBcXFxcXFxuICAxNDpcXHRcXHRyZWFkX3BncHJpdjIubyBcXFxcXFxuICAxNTpcXHRcXHRyZWFkX3JldHJ5Lm8gXFxcXFxcbiAgMTY6XFx0XFx0cmVhZF9zaW5nbGUubyBcXFxcXFxuICAxNzpcXHRcXHRyb2xsaW5nX2J1ZmZlci5vIFxcXFxcXG4gIDE4OlxcdFxcdHdyaXRlX2NvbGxlY3QubyBcXFxcXFxuICAxOTpcXHRcXHR3cml0ZV9pc3N1ZS5vIFxcXFxcXG4gIDIwOlxcdFxcdHdyaXRlX3JldHJ5Lm9cXG4gIDIxOlxcdFxcbiAgMjI6XFx0bmV0ZnMtJChDT05GSUdfTkVURlNfU1RBVFMpICs9IHN0YXRzLm9cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0bmV0ZnMtJChDT05GSUdfRlNDQUNIRSkgKz0gXFxcXFxcbiAgMjU6XFx0XFx0ZnNjYWNoZV9jYWNoZS5vIFxcXFxcXG4gIDI2OlxcdFxcdGZzY2FjaGVfY29va2llLm8gXFxcXFxcbiAgMjc6XFx0XFx0ZnNjYWNoZV9pby5vIFxcXFxcXG4gIDI4OlxcdFxcdGZzY2FjaGVfbWFpbi5vIFxcXFxcXG4gIDI5OlxcdFxcdGZzY2FjaGVfdm9sdW1lLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0aWZlcSAoJChDT05GSUdfUFJPQ19GUykseSlcXG4gIDMyOlxcdG5ldGZzLSQoQ09ORklHX0ZTQ0FDSEUpICs9IGZzY2FjaGVfcHJvYy5vXFxuICAzMzpcXHRlbmRpZlxcbiAgMzQ6XFx0bmV0ZnMtJChDT05GSUdfRlNDQUNIRV9TVEFUUykgKz0gZnNjYWNoZV9zdGF0cy5vXFxuICAzNTpcXHRcXG4gIDM2OlxcdG9iai0kKENPTkZJR19ORVRGU19TVVBQT1JUKSArPSBuZXRmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjEwOjA5LjkyNDYxNTYwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTI1MDkzNTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5FVEZTX1NVUFBPUlQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGBORVRGU19TVVBQT1JUYCBpbiB0aGlzIEtjb25maWcgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHJlbGF0aW9uc2hpcHMuIEknbGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBLY29uZmlnIGZpbGVzIHV0aWxpemUgYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdG8gYnVpbGQgYSBjbGVhciBkZXBlbmRlbmN5IHRyZWUgY2VudGVyZWQgYXJvdW5kIGBORVRGU19TVVBQT1JUYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIGJlY29tZSBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYWN0aXZhdGVkIHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgc2VsZWN0aW9uIG9yIGRlcGVuZGVuY2Ugb2NjdXJzIGF0IGEgaGlnaC1sZXZlbCwgcG90ZW50aWFsbHkgcHVsbGluZyBpbiBhIGxhcmdlciBuZXR3b3JrIHN1YnN5c3RlbS4gSSdsbCBxdWlja2x5IG5lZWQgdG8gbWFwIG91dCB0aGUgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGVuYWJsaW5nIG9mIG5ldHdvcmsgZmlsZXN5c3RlbSBzdXBwb3J0IGFjdHVhbGx5ICptZWFucyogYXQgYSBjb25maWcgbGV2ZWwsIG5vdCBqdXN0IHdoYXQgaXQgKnNheXMqIGl0IG1lYW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2lkZS1lZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDo1MS4xNzU1NTQxNDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTA0NzU4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVURlNfU1VQUE9SVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWc9MzY9Q09ORklHX1FVT1RBPXlcXG5hcmNoL2Nza3kvY29uZmlncy9kZWZjb25maWc6Mzc6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxcbmFyY2gvY3NreS9jb25maWdzL2RlZmNvbmZpZy0zOC1DT05GSUdfRlNDQUNIRT15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZz0yODQ9Q09ORklHX0NVU0U9bVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnOjI4NTpDT05GSUdfTkVURlNfU1VQUE9SVD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWctMjg2LUNPTkZJR19GU0NBQ0hFPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWc9NzA9Q09ORklHX0ZVU0VfRlM9bVxcbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWc6NzE6Q09ORklHX05FVEZTX1NVUFBPUlQ9bVxcbmFyY2gvbWlwcy9jb25maWdzL3BpYzMybXpkYV9kZWZjb25maWctNzItQ09ORklHX0ZTQ0FDSEU9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnPTE3MD1DT05GSUdfQ1VTRT1tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnOjE3MTpDT05GSUdfTkVURlNfU1VQUE9SVD1tXFxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnLTE3Mi1DT05GSUdfRlNDQUNIRT15XFxuLS1cXG5mcy85cC9LY29uZmlnPTI9Y29uZmlnIDlQX0ZTXFxuLS1cXG5mcy85cC9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBORVRfOVBcXG5mcy85cC9LY29uZmlnOjU6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy85cC9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX0RMTSlcXHRcXHQrPSBkbG0vXFxuLS1cXG5mcy9NYWtlZmlsZS02My0jIERvIG5vdCBhZGQgYW55IGZpbGVzeXN0ZW1zIGJlZm9yZSB0aGlzIGxpbmVcXG5mcy9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVURlNfU1VQUE9SVClcXHQrPSBuZXRmcy9cXG5mcy9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfRVhUNF9GUylcXHRcXHQrPSBleHQ0L1xcbi0tXFxuZnMvYWZzL0tjb25maWc9Mj1jb25maWcgQUZTX0ZTXFxuLS1cXG5mcy9hZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBETlNfUkVTT0xWRVJcXG5mcy9hZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvYWZzL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0tSQjVcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZz0zPWNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIE5FVEZTX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgRlNDQUNIRSBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZz0yPWNvbmZpZyBDRVBIX0ZTXFxuLS1cXG5mcy9jZXBoL0tjb25maWctNS1cXHRzZWxlY3QgQ0VQSF9MSUJcXG5mcy9jZXBoL0tjb25maWc6NjpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL2NlcGgvS2NvbmZpZy03LVxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVCBpZiBFUk9GU19GU19PTkRFTUFORFxcbmZzL2Vyb2ZzL0tjb25maWctMTMtXFx0c2VsZWN0IFhYSEFTSCBpZiBFUk9GU19GU19YQVRUUlxcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZy0yLVxcbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxcbmZzL25ldGZzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZz0xMD1jb25maWcgTkVURlNfU1RBVFNcXG5mcy9uZXRmcy9LY29uZmlnLTExLVxcdGJvb2wgXFxcIkdhdGhlciBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBvbiBsb2NhbCBjYWNoaW5nXFxcIlxcbmZzL25ldGZzL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG5mcy9uZXRmcy9LY29uZmlnLTEzLVxcdGhlbHBcXG4tLVxcbmZzL25ldGZzL0tjb25maWc9MjU9Y29uZmlnIE5FVEZTX0RFQlVHXFxuZnMvbmV0ZnMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJFbmFibGUgZHluYW1pYyBkZWJ1Z2dpbmcgbmV0ZnNsaWIgYW5kIEZTLUNhY2hlXFxcIlxcbmZzL25ldGZzL0tjb25maWc6Mjc6XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy0yOC1cXHRoZWxwXFxuLS1cXG5mcy9uZXRmcy9LY29uZmlnPTMzPWNvbmZpZyBGU0NBQ0hFXFxuZnMvbmV0ZnMvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJHZW5lcmFsIGZpbGVzeXN0ZW0gbG9jYWwgY2FjaGluZyBtYW5hZ2VyXFxcIlxcbmZzL25ldGZzL0tjb25maWc6MzU6XFx0ZGVwZW5kcyBvbiBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy0zNi1cXHRoZWxwXFxuLS1cXG5mcy9uZXRmcy9NYWtlZmlsZT0zND1uZXRmcy0kKENPTkZJR19GU0NBQ0hFX1NUQVRTKSArPSBmc2NhY2hlX3N0YXRzLm9cXG5mcy9uZXRmcy9NYWtlZmlsZS0zNS1cXG5mcy9uZXRmcy9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTkVURlNfU1VQUE9SVCkgKz0gbmV0ZnMub1xcbi0tXFxuZnMvbmZzL0tjb25maWc9MTczPWNvbmZpZyBORlNfRlNDQUNIRVxcbi0tXFxuZnMvbmZzL0tjb25maWctMTc1LVxcdGRlcGVuZHMgb24gTkZTX0ZTXFxuZnMvbmZzL0tjb25maWc6MTc2OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvbmZzL0tjb25maWctMTc3LVxcdHNlbGVjdCBGU0NBQ0hFXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9Mj1jb25maWcgQ0lGU1xcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIxLVxcdHNlbGVjdCBPSURfUkVHSVNUUllcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjI6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxubmV0LzlwL0tjb25maWc9Nj1tZW51Y29uZmlnIE5FVF85UFxcbm5ldC85cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlBsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcXFwiXFxubmV0LzlwL0tjb25maWc6ODpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbm5ldC85cC9LY29uZmlnLTktXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxMDo1My4wMjYwMzc2MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxMDc0NzY1MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBOZXRmcyBEaXJlY3QgV3JpdGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgdW5idWZmZXJlZCB3cml0ZSBwYXRoIGZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCByZWxldmFudCB0byBmaWxlc3lzdGVtcyBzdWNoIGFzIDlwLCBDSUZTL1NNQiwgQUZTLCBhbmQgQ2VwaCwgd2hpY2ggYXJlIGFsbCBpbXBvcnRhbnQgZm9yIG5ldHdvcmtlZCBzdG9yYWdlIGFuZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgd2hlbiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgcmV0cmllcyBhIHN1YnJlcXVlc3QgKGByZXRyeSA9PSB0cnVlYCksIHRoZXJlIGFyZSBzZXZlcmFsIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIHRvIGBpb3ZfaXRlcl9hZHZhbmNlYCBhbmQgYHdyZXEtXHUwMDNldHJhbnNmZXJyZWRgIGxvb2sgc3RyYWlnaHRmb3J3YXJkLCBhY2NvdW50aW5nIGZvciB0cmFuc2ZlcnJlZCBkYXRhLiBUaGUgYWRkZWQgYF9fY2xlYXJfYml0YCBhbmQgY29uZGl0aW9uYWwgY2FsbCB0byBgc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGVgIGFyZSB0aGUgbW9yZSBpbnRlcmVzdGluZyBhc3BlY3RzLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYGVsc2VgIGJyYW5jaCwgYW5kIHRoZSBpbnNlcnRpb24gb2Ygd2hhdCBhcHBlYXJzIHRvIGJlIGEgbW9yZSBkZWxpYmVyYXRlIHByZXBhcmF0aW9uIHN0ZXAgd2l0aCBgc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGVgIHBvdGVudGlhbGx5IGluZGljYXRlIGEgY2hhbmdlIGluIHJldHJ5IGxvZ2ljLiBUaGlzIGNvdWxkIGJlIHNpZ25pZmljYW50LCBiZWNhdXNlIHRoZSBjb2RlIHBhdGggaXMgZXhlY3V0ZWQgd2l0aCBhIE5VTEwgYHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlYCB3aGljaCBjb3VsZCBiZSBhbiBpc3N1ZSwgYW5kIG5vdyBpdCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseS5cblxuTm93LCBpcyB0aGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldGZzIGZ1bmN0aW9uYWxpdHkgYW5kLCBhc3N1bWluZyB0aGUgZmlsZXN5c3RlbXMgdGhhdCB1c2UgYE5FVEZTX1NVUFBPUlRgIGFyZSBlbmFibGVkLCBpdCdzIGEgY3JpdGljYWwgcGF0aC4gSXMgaXQgcmVhY2hhYmxlIGluIFFFTVUgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBZZXMsIHRocm91Z2ggYW55IG9mIHRoZSBuZXR3b3JrZWQgZmlsZXN5c3RlbXMgSSBtZW50aW9uZWQg4oCTIDlwLCBDSUZTLCBBRlMsIG9yIENlcGgsIGFuZCBvZiBjb3Vyc2Ugd2l0aCBkaXJlY3QgbmV0ZnMgdGVzdGluZy5cblxuU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB1bmJ1ZmZlcmVkIHdyaXRlIHJldHJpZXMgYXJlIGhhbmRsZWQuIEEgc3VidGxlIGNoYW5nZSBpbiB0aGUgcmV0cnkgbG9naWMgY291bGQgaGF2ZSBhIGhpZ2ggaW1wYWN0IGluIHRlcm1zIG9mIHN0YWJpbGl0eSBvciBzZWN1cml0eSwgcGFydGljdWxhcmx5IHdpdGggbmV0d29yayBmaWxlc3lzdGVtcy5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlIGNvZGUsIHRoZSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhcmUgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYW5kIGBuZXRmc19maWxlX3dyaXRlX2l0ZXJgLiBJIHdpbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgZGlyZWN0X3dyaXRlLmMgYW5kIGJ1ZmZlcmVkX3dyaXRlLmMgdG8gdmVyaWZ5LiBMb29raW5nIGF0IHRoZSBzeW1ib2xzLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHRoZSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGFyZSB0aGUgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbnMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBjb2RlIGlzIHJlbGV2YW50IHRvIG90aGVyIGNvZGUuXG5cbkNvbmZpZy13aXNlLCBgTkVURlNfU1VQUE9SVGAgaXMgdGhlIGNvcmUsIGFuZCB0aGVuIGZpbGVzeXN0ZW1zIHN1Y2ggYXMgYDlQX0ZTYCwgYENJRlNgLCBgQUZTX0ZTYCwgYW5kIGBDRVBIX0ZTYCBzZWxlY3QgaXQuIFRoZSBrZXJuZWwgY29uZmlnIGNvbmZpcm1zIHRoYXQgYE5FVEZTX1NVUFBPUlRgIGlzIHRyaXN0YXRlIGFuZCBzZWxlY3RlZCBieSB0aG9zZSBmaWxlc3lzdGVtcy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IHRlbGxzIG1lIHdoaWNoIG1vZHVsZXMgSSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoaXMgY29kZS5cblxuU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBlbmFibGUgYE5FVEZTX1NVUFBPUlRgLCBhcyB3ZWxsIGFzIGF0IGxlYXN0IGA5UF9GU2AgYW5kIGBDSUZTYC4gYEFGU19GU2AgYW5kIGBDRVBIX0ZTYCBhcmUgYWxzbyBhcHBsaWNhYmxlIHRvIGV4cGFuZCB0ZXN0aW5nLlxuXG5Ob3csIGxldCdzIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLiBJIHdpbGwgZ2VuZXJhdGUgYSBsaXN0IHRvIGdpdmUgdGhlIGNvcnJlY3QgaW5mb3JtYXRpb24sIGFzIGRlZmluZWQgaW4gdGhlIGluc3RydWN0aW9ucy5cblxuLSAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbi0gICBgRm9jdXNTeW1ib2xzYDogYFtcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLCBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIiwgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIl1gXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVURlNfU1VQUE9SVFwiLCBcIjlQX0ZTXCIsIFwiQ0lGU1wiLCBcIkFGU19GU1wiLCBcIkNFUEhfRlNcIl1gXG4tICAgYFJlYXNvbmluZ2A6IEZ1bmN0aW9uYWwgY2hhbmdlIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgcmV0cnkgaGFuZGxpbmcgbG9naWMuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IG1lY2hhbmlzbSB3aXRoaW4gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBtYWtpbmcgaXQgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBpbiBgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgLiBUaGlzIGFmZmVjdHMgdW5idWZmZXJlZCB3cml0ZXMgd2l0aGluIG5ldHdvcmtlZCBmaWxlc3lzdGVtcy5cblxuV2l0aCB0aGF0LCBJJ20gc2F0aXNmaWVkLiBJdCdzIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3NywiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjE1OjE0LjEwMDgwNjcyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MjYwMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGU19TVVBQT1JUXCIsXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0lGU1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc19maWxlX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0cnkgbG9naWMgaW4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZSB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSBoZWxwZXIgbGlicmFyeSAoZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMpLCB1cGRhdGluZyBhY2NvdW50aW5nIGZvciB0cmFuc2ZlcnJlZCBieXRlcyBhbmQgYWRqdXN0aW5nIGhvdyByZXRyaWVkIHN1YnJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgZGlyZWN0L3VuYnVmZmVyZWQgd3JpdGUgb3BlcmF0aW9ucyBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zIHN1Y2ggYXMgOXAsIENJRlMsIEFGUywgYW5kIENlcGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURlNfU1VQUE9SVFwiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfZmlsZV93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IGxvZ2ljIGluIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUgd2l0aGluIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gaGVscGVyIGxpYnJhcnkgKGZzL25ldGZzL2RpcmVjdF93cml0ZS5jKSwgdXBkYXRpbmcgYWNjb3VudGluZyBmb3IgdHJhbnNmZXJyZWQgYnl0ZXMgYW5kIGFkanVzdGluZyBob3cgcmV0cmllZCBzdWJyZXF1ZXN0cyBhcmUgc3VibWl0dGVkLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGRpcmVjdC91bmJ1ZmZlcmVkIHdyaXRlIG9wZXJhdGlvbnMgb24gbmV0d29yayBmaWxlc3lzdGVtcyBzdWNoIGFzIDlwLCBDSUZTLCBBRlMsIGFuZCBDZXBoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxNToxNC4xNzYwNzQyOTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTA5Mjk4MTczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE3OjE1OjE0LjE3NjU1MjA4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzNTA5MjQ5ODA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHJ5IHBhdGggaW4gbmV0ZnMgdW5idWZmZXJlZCB3cml0ZSAoYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBgd3JlcS1cXHUwMDNldHJhbnNmZXJyZWRgIHdoZW4gYSBwYXJ0aWFsbHkgdHJhbnNmZXJyZWQgc3VicmVxdWVzdCBuZWVkcyByZXRyeSwgY2xlYXJzIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnLCBhbmQgc2ltcGxpZmllcyByZXRyeSBwcmVwYXJhdGlvbiBieSByZW1vdmluZyBhIHJlZHVuZGFudCBgbmV0ZnNfcmVpc3N1ZV93cml0ZSgpYCBicmFuY2guIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGludGVybmFsIHN0YXRlIGFuZCBjb250cm9sIGZsb3cgYWRqdXN0bWVudHMgZm9yIEkvTyB0cmFja2luZyBhbmQgc3VicmVxdWVzdCByZXRyeSBoYW5kbGluZyBpbiB0aGUgbmV0ZnMgc3Vic3lzdGVtLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE2YmM3NzRiZmFkZjkwMDNiNzJkYzVjYjJiMmViNGI4ZTNjOGQzNjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNzowNzoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbmluZGV4IGY5YWI2OWRlM2UyOTguLmMyODczZWNiZWNlYjYgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbkBAIC0xNjYsMTMgKzE2NiwxNiBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXHRcdCAqL1xuIFx0XHRzdWJyZXEtXHUwMDNlZXJyb3IgPSAtRUFHQUlOO1xuIFx0XHR0cmFjZV9uZXRmc19zcmVxKHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9yZXRyeSk7XG4tXHRcdGlmIChzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlIDApXG4rXHRcdGlmIChzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQgXHUwMDNlIDApIHtcbiBcdFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCk7XG4rXHRcdFx0d3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKHN0cmVhbS1cdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3QpXG4gXHRcdFx0d3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdCh3cmVxLCBzdHJlYW0pO1xuIFxuK1x0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG5AQCAtMTg2LDE3ICsxODksMTAgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFxuIFx0XHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcbiBcbi1cdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKSB7XG4rXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSlcbiBcdFx0XHRzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xuLVx0XHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHN0cnVjdCBpb3ZfaXRlciBzb3VyY2U7XG4tXG4tXHRcdFx0bmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpO1xuLVx0XHRcdHNvdXJjZSA9IHN1YnJlcS1cdTAwM2Vpb19pdGVyO1xuLVx0XHRcdG5ldGZzX3JlaXNzdWVfd3JpdGUoc3RyZWFtLCBzdWJyZXEsIFx1MDAyNnNvdXJjZSk7XG4tXHRcdH1cbitcdFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4rXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpO1xuIFx0fVxuIFxuIFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTU6MTQuMTc2NTUzNDI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTAwMDU5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIG9mIHRoZSBjaGFuZ2UuIFRoZSBwYXRjaCBzcGVjaWZpZXMgYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCwgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hlcmUgSSdsbCBiZWdpbi4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGluaXRpYWwgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDE2NiBpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMga2luZywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTY6MDMuMjc2NjE2NzAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0XFx0XFx0cmV0cnkgPSB0cnVlO1xcbiAxNDE6XFx0XFx0XFx0fSBlbHNlIGlmICh0ZXN0X2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpKSB7XFxuIDE0MjpcXHRcXHRcXHRcXHRyZXQgPSBzdWJyZXEtXFx1MDAzZWVycm9yO1xcbiAxNDM6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNlZXJyb3IgPSByZXQ7XFxuIDE0NDpcXHRcXHRcXHRcXHRuZXRmc19zZWVfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2Vfc2VlX2ZhaWxlZCk7XFxuIDE0NTpcXHRcXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbiAxNDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRcXHRpZiAoIXJldHJ5KSB7XFxuIDE1MTpcXHRcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbiAxNTI6XFx0XFx0XFx0XFx0c3VicmVxID0gTlVMTDtcXG4gMTUzOlxcdFxcdFxcdFxcdGlmICh3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlPSB3cmVxLVxcdTAwM2VsZW4pXFxuIDE1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU1OlxcdFxcdFxcdFxcdGlmICghd3JlcS1cXHUwMDNlaW9jYiBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbiAxNTY6XFx0XFx0XFx0XFx0XFx0cmV0ID0gd3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgPyAtRUlOVFIgOiAtRVJFU1RBUlRTWVM7XFxuIDE1NzpcXHRcXHRcXHRcXHRcXHR0cmFjZV9uZXRmc19ycmVxKHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfaW50cik7XFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNjE6XFx0XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRcXHQvKiBXZSBuZWVkIHRvIHJldHJ5IHRoZSBsYXN0IHN1YnJlcXVlc3QsIHNvIGZpcnN0IHJlc2V0IHRoZVxcbiAxNjQ6XFx0XFx0XFx0ICogaXRlcmF0b3IsIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCwgaWYgYW55dGhpbmcsIHdlIG1hbmFnZWRcXG4gMTY1OlxcdFxcdFxcdCAqIHRvIHRyYW5zZmVyLlxcbiAxNjY6XFx0XFx0XFx0ICovXFxuIDE2NzpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWVycm9yID0gLUVBR0FJTjtcXG4gMTY4OlxcdFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4gMTY5OlxcdFxcdFxcdGlmIChzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkIFxcdTAwM2UgMCkge1xcbiAxNzA6XFx0XFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbiAxNzE6XFx0XFx0XFx0XFx0d3JlcS1cXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTcyOlxcdFxcdFxcdH1cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXFx1MDAyNlxcdTAwMjZcXG4gMTc1OlxcdFxcdFxcdCAgICB3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3QpXFxuIDE3NjpcXHRcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE3OTpcXHRcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgwOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTgxOlxcdFxcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuIDE4MjpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWlvX2l0ZXJcXHRcXHQ9IHdyZXEtXFx1MDAzZWJ1ZmZlci5pdGVyO1xcbiAxODM6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2VzdGFydFxcdFxcdD0gd3JlcS1cXHUwMDNlc3RhcnQgKyB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZDtcXG4gMTg0OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlbGVuXFx0XFx0PSB3cmVxLVxcdTAwM2VsZW4gICAtIHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbiAxODU6XFx0XFx0XFx0c3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZFxcdD0gMDtcXG4gMTg2OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlcmV0cnlfY291bnRcXHQrPSAxO1xcbiAxODc6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9sZW5cXHQ9IFVJTlRfTUFYO1xcbiAxODg6XFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VzcmVxX21heF9zZWdzXFx0PSBJTlRfTUFYO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gMTkzOlxcdFxcdFxcdFxcdHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZShzdWJyZXEpO1xcbiAxOTQ6XFx0XFx0XFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gMTk1OlxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4gMTk2OlxcdFxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xcbiAxOTk6XFx0XFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIDIwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMDE6XFx0fVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0LCB3b3JrKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcXG4gMjA4OlxcdFxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4gMjA5OlxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0LypcXG4gMjEyOlxcdCAqIFBlcmZvcm0gYW4gdW5idWZmZXJlZCB3cml0ZSB3aGVyZSB3ZSBtYXkgaGF2ZSB0byBkbyBhbiBSTVcgb3BlcmF0aW9uIG9uIGFuXFxuIDIxMzpcXHQgKiBlbmNyeXB0ZWQgZmlsZS4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMuXFxuIDIxNDpcXHQgKi9cXG4gMjE1OlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gMjE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4gMjE3OlxcdHtcXG4gMjE4OlxcdFxcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxO1xcbiAyMTk6XFx0XFx0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0ID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxNjowMy4yNzY3MzgxNjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NTcyMDQxODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgY2hhbmdpbmcuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiBob3cgdGhlIGB0cmFuc2ZlcnJlZGAgY291bnQgaXMgYmVpbmcgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGB3cmVxLVx1MDAzZXRyYW5zZmVycmVkYCBpcyBiZWluZyB1cGRhdGVkIGJ5IGFkZGluZyBgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkYC4gQWxvbmdzaWRlIHRoaXMsIHRoZSBgTkVURlNfU1JFUV9NQURFX1BST0dSRVNTYCBmbGFnIGlzIGJlaW5nIGNsZWFyZWQuIFRoZSBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBjb25kaXRpb25hbCBicmFuY2ggd2l0aGluIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYC4gVGhlIGNvZGUgdGhhdCBwcmV2aW91c2x5IGluY2x1ZGVkIGFuIGBpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpYCBibG9jayBhbmQgYW4gYGVsc2VgIGJyYW5jaCBpbnZvbHZpbmcgYG5ldGZzX3JlaXNzdWVfd3JpdGVgIGlzIGdvbmUuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGdldCBtb3JlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBjaGFuZ2VzIHdlcmUgbWFkZS4gSSdsbCBzZWFyY2ggZm9yIHJlbGF0ZWQgY29tbWl0IG1lc3NhZ2VzLCBkb2N1bWVudGF0aW9uLCBvciBhbnkgb3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbW90aXZhdGlvbnMgYmVoaW5kIHRoaXMgcGF0Y2guIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIHVzZWZ1bCBoaXN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoxOToyMS44NDg3ODQ0NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDAwNzU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTQ2OT1zc2l6ZV90IG5ldGZzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDgyLVxcdCAgICB0ZXN0X2JpdChORVRGU19JQ1RYX1VOQlVGRkVSRUQsIFxcdTAwMjZpY3R4LVxcdTAwM2VmbGFncykpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODM6XFx0XFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NC1cXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE0LSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1OnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNi17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy02NC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzo2NTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGZzX2lvX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtOTMtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6OTQ6c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTk1LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1MC1cXHRcXHRpZiAoIXJldHJ5KSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTUxOlxcdFxcdFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfY29sbGVjdCh3cmVxLCBzdHJlYW0sIHN1YnJlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTUyLVxcdFxcdFxcdHN1YnJlcSA9IE5VTEw7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTctXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTk4OlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xOTktXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDItXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjAzOnN0YXRpYyB2b2lkIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwNC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDYtXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjA3OlxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA4LVxcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTU6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIxNi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODQtXFx0aWYgKGFzeW5jKSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mjg1OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2d3JlcS1cXHUwMDNld29yaywgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg2LVxcdFxcdHdyZXEtXFx1MDAzZWlvY2IgPSBpb2NiO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg5LVxcdH0gZWxzZSB7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjkwOlxcdFxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjkxLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDctfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMwODpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwOS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMTAtLyoqXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzExOiAqIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciAtIFVuYnVmZmVyZWQgd3JpdGUgdG8gYSBmaWxlXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEyLSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyMi0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjM6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzI0LXtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM3OS1cXHRcXHRcXHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzgwOlxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgZnJvbSwgTlVMTCk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgxLW91dDpcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4NC19XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg1OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTk6MjIuMjU4Nzk3NDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjU1Mzk1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBiZWhhdmlvciBvZiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAuIE5vIHNob3J0Y3V0cywgbm8gc2tpbW1pbmcgdGhlIHN1cmZhY2UuIEkgd2FudCB0aGUgKndob2xlKiBwaWN0dXJlLCBldmVyeSBzaW5nbGUgbnVhbmNlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiB3aXRoIGEgdmVyeSBrZWVuIGV5ZS4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGZyb20gdGhlIGluaXRpYWwgaW5wdXQgcHJvY2Vzc2luZyBhbmQgY2hlY2tzLCBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMsIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciB0byB3aGF0ZXZlciB0aGUgdW5kZXJseWluZyBuZXR3b3JrIEkvTyBtZWNoYW5pc20gaXMsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBmYWlsdXJlIHBhdGhzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHRoZSByb2xlIG9mIGFueSBjYWNoaW5nIGlmIGl0J3MgdGhlcmUgYXQgYWxsLCB3aGF0IGl0IG1lYW5zIGZvciBhdG9taWNpdHksIGFuZCBob3cgaXQgYmVoYXZlcyBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgdHJhbnNwb3J0cyBvciBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuIEknbGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGJlaW5nIFwidW5idWZmZXJlZC5cIiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyB0byBidWlsZCBhIHByZWNpc2UgbWVudGFsIG1vZGVsIG9mIGl0cyBleGVjdXRpb24gcGF0aCwgaW5jbHVkaW5nIGFsbCBzaWRlIGVmZmVjdHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGFudGljaXBhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyB1bmRlciBkaWZmZXJlbnQgbG9hZHMgYW5kIHByZWRpY3QgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBnb3RjaGFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTk6NTAuNTE0MTk3MTE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25ldGZzL2RpcmVjdF93cml0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdCAqIGluIHRoZSBkYXRhIHdyaXR0ZW4gZHVlIHRvIGEgZmFpbHVyZSBzdWNoIGFzIEVOT1NQQy4gIFdlIGNvdWxkLCBob3dldmVyXFxuICA5MTpcXHQgKiBhdHRlbXB0IHRvIGRvIHByZXBhcmF0aW9uIHN1Y2ggYXMgY29udGVudCBlbmNyeXB0aW9uIGZvciB0aGUgbmV4dCBzdWJyZXFcXG4gIDkyOlxcdCAqIHdoaWxzdCB0aGUgY3VycmVudCBpcyBpbiBwcm9ncmVzcy5cXG4gIDkzOlxcdCAqL1xcbiAgOTQ6XFx0c3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbiAgOTU6XFx0e1xcbiAgOTY6XFx0XFx0c3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSA9IE5VTEw7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgbmV0ZnNfaW9fc3RyZWFtICpzdHJlYW0gPSBcXHUwMDI2d3JlcS1cXHUwMDNlaW9fc3RyZWFtc1swXTtcXG4gIDk4OlxcdFxcdGludCByZXQ7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdF9lbnRlcihcXFwiJWxseFxcXCIsIHdyZXEtXFx1MDAzZWxlbik7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdGlmICh3cmVxLVxcdTAwM2VvcmlnaW4gPT0gTkVURlNfRElPX1dSSVRFKVxcbiAxMDM6XFx0XFx0XFx0aW5vZGVfZGlvX2JlZ2luKHdyZXEtXFx1MDAzZWlub2RlKTtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0c3RyZWFtLVxcdTAwM2Vjb2xsZWN0ZWRfdG8gPSB3cmVxLVxcdTAwM2VzdGFydDtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0Zm9yICg7Oykge1xcbiAxMDg6XFx0XFx0XFx0Ym9vbCByZXRyeSA9IGZhbHNlO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRcXHRpZiAoIXN1YnJlcSkge1xcbiAxMTE6XFx0XFx0XFx0XFx0bmV0ZnNfcHJlcGFyZV93cml0ZSh3cmVxLCBzdHJlYW0sIHdyZXEtXFx1MDAzZXN0YXJ0ICsgd3JlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbiAxMTI6XFx0XFx0XFx0XFx0c3VicmVxID0gc3RyZWFtLVxcdTAwM2Vjb25zdHJ1Y3Q7XFxuIDExMzpcXHRcXHRcXHRcXHRzdHJlYW0tXFx1MDAzZWNvbnN0cnVjdCA9IE5VTEw7XFxuIDExNDpcXHRcXHRcXHR9XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFxcdC8qIENoZWNrIGlmIChyZS0pcHJlcGFyYXRpb24gZmFpbGVkLiAqL1xcbiAxMTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHRlc3RfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncykpKSB7XFxuIDExODpcXHRcXHRcXHRcXHRuZXRmc193cml0ZV9zdWJyZXF1ZXN0X3Rlcm1pbmF0ZWQoc3VicmVxLCBzdWJyZXEtXFx1MDAzZWVycm9yKTtcXG4gMTE5OlxcdFxcdFxcdFxcdHdyZXEtXFx1MDAzZWVycm9yID0gc3VicmVxLVxcdTAwM2VlcnJvcjtcXG4gMTIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjE6XFx0XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRcXHRpb3ZfaXRlcl90cnVuY2F0ZShcXHUwMDI2c3VicmVxLVxcdTAwM2Vpb19pdGVyLCB3cmVxLVxcdTAwM2VsZW4gLSB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCk7XFxuIDEyNDpcXHRcXHRcXHRpZiAoIWlvdl9pdGVyX2NvdW50KFxcdTAwMjZzdWJyZXEtXFx1MDAzZWlvX2l0ZXIpKVxcbiAxMjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdFxcdHN1YnJlcS1cXHUwMDNlbGVuID0gbmV0ZnNfbGltaXRfaXRlcihcXHUwMDI2c3VicmVxLVxcdTAwM2Vpb19pdGVyLCAwLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cmVhbS1cXHUwMDNlc3JlcV9tYXhfbGVuLFxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cmVhbS1cXHUwMDNlc3JlcV9tYXhfc2Vncyk7XFxuIDEzMDpcXHRcXHRcXHRpb3ZfaXRlcl90cnVuY2F0ZShcXHUwMDI2c3VicmVxLVxcdTAwM2Vpb19pdGVyLCBzdWJyZXEtXFx1MDAzZWxlbik7XFxuIDEzMTpcXHRcXHRcXHRzdHJlYW0tXFx1MDAzZXN1Ym1pdF9leHRlbmRhYmxlX3RvID0gc3VicmVxLVxcdTAwM2VsZW47XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3N1Ym1pdCk7XFxuIDEzNDpcXHRcXHRcXHRzdHJlYW0tXFx1MDAzZWlzc3VlX3dyaXRlKHN1YnJlcSk7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdC8qIEFzeW5jLCBuZWVkIHRvIHdhaXQuICovXFxuIDEzNzpcXHRcXHRcXHRuZXRmc193YWl0X2Zvcl9pbl9wcm9ncmVzc19zdHJlYW0od3JlcSwgc3RyZWFtKTtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0XFx0aWYgKHRlc3RfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpKSB7XFxuIDE0MDpcXHRcXHRcXHRcXHRyZXRyeSA9IHRydWU7XFxuIDE0MTpcXHRcXHRcXHR9IGVsc2UgaWYgKHRlc3RfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncykpIHtcXG4gMTQyOlxcdFxcdFxcdFxcdHJldCA9IHN1YnJlcS1cXHUwMDNlZXJyb3I7XFxuIDE0MzpcXHRcXHRcXHRcXHR3cmVxLVxcdTAwM2VlcnJvciA9IHJldDtcXG4gMTQ0OlxcdFxcdFxcdFxcdG5ldGZzX3NlZV9zdWJyZXF1ZXN0KHN1YnJlcSwgbmV0ZnNfc3JlcV90cmFjZV9zZWVfZmFpbGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTc6MTk6NTAuNTE0MjkxNjE4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1ODc1NDczNTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgUmV0cnkgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgIHJldHJ5IHNjZW5hcmlvLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGNvZGUncyBiZWhhdmlvciB3aGVuIGEgd3JpdGUgb3BlcmF0aW9uIG5lZWRzIHRvIGJlIHJldHJpZWQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBzZWN0aW9uIGRlYWxpbmcgd2l0aCBgcmV0cnkgPT0gdHJ1ZWAuXG5cbkZpcnN0LCBJIG5vdGljZWQgYW4gb2Zmc2V0IGFjY291bnRpbmcgaXNzdWU6IGlmIGEgc3ViLXJlcXVlc3QgKGBzdWJyZXFgKSBoYWQgdHJhbnNmZXJyZWQgZGF0YSwgYnV0IGB3cmVxLVx1MDAzZXRyYW5zZmVycmVkYCB3YXNuJ3QgdXBkYXRlZCBhY2NvcmRpbmdseSwgdGhlbiBzdWJzZXF1ZW50IGNhbGN1bGF0aW9ucyBiYXNlZCBvbiBgd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZGAgd291bGQgYmUgb2ZmLCBzcGVjaWZpY2FsbHksIGBzdWJyZXEtXHUwMDNlc3RhcnQgPSB3cmVxLVx1MDAzZXN0YXJ0ICsgd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZGAuIFRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSBlbnN1cmluZyBgd3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWRgLCB3aGljaCBjb3JyZWN0cyB0aGUgb2Zmc2V0LlxuXG5OZXh0LCBJIG9ic2VydmVkIHRoYXQgdGhlIGBORVRGU19TUkVRX01BREVfUFJPR1JFU1NgIGZsYWcgd2FzIGJlaW5nIGNsZWFyZWQsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGZvciBhIHJldHJ5LiBUaGUgY29kZSB0aGVuIHJlLWluaXRpYWxpemVzIHRoZSBgc3VicmVxYCBmb3IgdGhlIHJldHJ5LCBpbmNsdWRpbmcgdGhlIElPIGl0ZXJhdG9yIGFuZCBjb3VudGVycy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gdGhlIHJldHJ5IGxvb3AsIEkgc2VlIHRoZSBjb2RlIHVzZWQgdG8gaGF2ZSBhbiBgZWxzZWAgYnJhbmNoIHRoYXQgZGlyZWN0bHkgY2FsbGVkIGBuZXRmc19yZWlzc3VlX3dyaXRlYC4gSG93ZXZlciwgY2FsbGluZyB0aGlzIGRpcmVjdGx5IHdpdGhpbiB0aGUgcmV0cnkgcGF0aCBjb3VsZCBsZWFkIHRvIGRvdWJsZSBpc3N1YW5jZSBvZiB3cml0ZSByZXF1ZXN0cyBvciBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gVGhlIGZpeCBpcyB0byByZW1vdmUgdGhpcyBjb25kaXRpb25hbCBjYWxsLiBJbnN0ZWFkLCBpZiBgc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGVgIGlzIHByZXNlbnQsIGl0IGlzIGNhbGxlZCwgdGhlIGBORVRGU19TUkVRX0lOX1BST0dSRVNTYCBmbGFnIGlzIHNldCwgYW5kIHRoZSByZXRyeSBsb29wIHJlc3VibWl0cyB0aGUgd3JpdGUgb3BlcmF0aW9uIGNsZWFubHkuIFRoaXMgY2hhbmdlIHJlc29sdmVzIGEgcG90ZW50aWFsIGRvdWJsZS13cml0ZSBpc3N1ZSBhbmQgZW5zdXJlcyB0aGUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucy5cblxuSSd2ZSBhbHNvIHBlcmZvcm1lZCBhIHRob3JvdWdoIGNoZWNrIGZvciBtZW1vcnktcmVsYXRlZCBpc3N1ZXM6XG5cbiogICAqKkFsbG9jYXRpb246KiogTm8gbmV3IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBoZXJlLlxuKiAgICoqVXNlcnNwYWNlIENvcHk6KiogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIHRoaXMgcGF0Y2guXG4qICAgKipVbmluaXRpYWxpemVkIEZpZWxkczoqKiBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgdXNlZC5cbiogICAqKlVuaW5pdGlhbGl6ZWQgSnVtcHM6KiogTm8gY29uZGl0aW9uYWwganVtcHMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuKiAgICoqRGF0YSBNYW5pcHVsYXRpb246KiogRXZlcnl0aGluZyBpcyBjb25maW5lZCB0byBleGlzdGluZyBzdHJ1Y3R1cmVzIChgbmV0ZnNfaW9fcmVxdWVzdGAsIGBuZXRmc19pb19zdWJyZXF1ZXN0YCwgZmxhZ3MsIGFuZCB2YXJpb3VzIGNvdW50ZXJzKS5cblxuQ29uc2lkZXJpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBJIGNhbiBjb25maXJtIHRoYXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBmb2N1c2VkIG9uIHRoZSBmaWxlc3lzdGVtIEkvTyBhY2NvdW50aW5nIGFuZCByZXRyeSBzdGF0ZSBtYWNoaW5lLiBUaGUgaWRlbnRpZmllZCBidWcgcmVsYXRlcyB0byB0aGUgbG9naWNhbCBmbG93IG9mIHJldHJpZXMgYW5kIHN0YXRlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSwgdGhlIG9mZnNldCBjYWxjdWxhdGlvbiBhbmQgdGhlIGNvbnRyb2wgZmxvdywgcHJldmVudGluZyBkb3VibGUgaXNzdWFuY2Ugb2YgcmVxdWVzdHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gS0FTQU4gY292ZXJzIHRoZSBzdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RzLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4sIGFuZCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgbm9ybWFsbHkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWMvc3RhdGUgbWFjaGluZS1yZWxhdGVkIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYxLCJPdXRwdXRUb2tlbnMiOjE4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNzoyMjoyOS4yNjkwMzA3NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXRyeSBwYXRoIGluIG5ldGZzIHVuYnVmZmVyZWQgd3JpdGUgKGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgYHdyZXEtXFx1MDAzZXRyYW5zZmVycmVkYCB3aGVuIGEgcGFydGlhbGx5IHRyYW5zZmVycmVkIHN1YnJlcXVlc3QgbmVlZHMgcmV0cnksIGNsZWFycyB0aGUgYE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTU2AgZmxhZywgYW5kIHNpbXBsaWZpZXMgcmV0cnkgcHJlcGFyYXRpb24gYnkgcmVtb3ZpbmcgYSByZWR1bmRhbnQgYG5ldGZzX3JlaXNzdWVfd3JpdGUoKWAgYnJhbmNoLiBcXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29udHJvbCBmbG93IGFkanVzdG1lbnRzIGZvciBJL08gdHJhY2tpbmcgYW5kIHN1YnJlcXVlc3QgcmV0cnkgaGFuZGxpbmcgaW4gdGhlIG5ldGZzIHN1YnN5c3RlbS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0cnkgcGF0aCBpbiBuZXRmcyB1bmJ1ZmZlcmVkIHdyaXRlIChgZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIGB3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZGAgd2hlbiBhIHBhcnRpYWxseSB0cmFuc2ZlcnJlZCBzdWJyZXF1ZXN0IG5lZWRzIHJldHJ5LCBjbGVhcnMgdGhlIGBORVRGU19TUkVRX01BREVfUFJPR1JFU1NgIGZsYWcsIGFuZCBzaW1wbGlmaWVzIHJldHJ5IHByZXBhcmF0aW9uIGJ5IHJlbW92aW5nIGEgcmVkdW5kYW50IGBuZXRmc19yZWlzc3VlX3dyaXRlKClgIGJyYW5jaC4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgc3RyaWN0bHkgaW50ZXJuYWwgc3RhdGUgYW5kIGNvbnRyb2wgZmxvdyBhZGp1c3RtZW50cyBmb3IgSS9PIHRyYWNraW5nIGFuZCBzdWJyZXF1ZXN0IHJldHJ5IGhhbmRsaW5nIGluIHRoZSBuZXRmcyBzdWJzeXN0ZW0uIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow84w5c[1] Phase: Succeeded StartedAt: 2026-08-31 17:22:40 +0000 UTC FinishedAt: 2026-08-31 17:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 17:22:40 +0000 UTC FinishedAt: 2026-08-31 17:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2] Phase: Succeeded StartedAt: 2026-08-31 17:22:40 +0000 UTC FinishedAt: 2026-08-31 18:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 17:22:40 +0000 UTC FinishedAt: 2026-08-31 18:43:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 17:22:40 +0000 UTC FinishedAt: 2026-08-31 17:22:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 17:22:40 +0000 UTC FinishedAt: 2026-08-31 17:22:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow84w5c/series-workflow84w5c-convert-artifact-1869073637/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 17:22:50 +0000 UTC FinishedAt: 2026-08-31 17:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 17:22:50 +0000 UTC FinishedAt: 2026-08-31 17:38:34 +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:*37213840-aab8-49cd-acd3-ff540064ee27,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-workflow84w5c/series-workflow84w5c-convert-artifact-1869073637/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": "53aaa8e9-b3a4-4710-88c5-a3b63b7e392b", "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-workflow84w5c/series-workflow84w5c-build-action-2649409803/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 17:22:50 +0000 UTC FinishedAt: 2026-08-31 17:38: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:*37213840-aab8-49cd-acd3-ff540064ee27,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-workflow84w5c/series-workflow84w5c-convert-artifact-1869073637/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": "53aaa8e9-b3a4-4710-88c5-a3b63b7e392b", "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-workflow84w5c/series-workflow84w5c-build-action-2649409803/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 17:38:34 +0000 UTC FinishedAt: 2026-08-31 17:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 17:38:34 +0000 UTC FinishedAt: 2026-08-31 17:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 17:38:34 +0000 UTC FinishedAt: 2026-08-31 17:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 17:38:34 +0000 UTC FinishedAt: 2026-08-31 17:38:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow84w5c/series-workflow84w5c-convert-artifact-3055967936/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 17:38:44 +0000 UTC FinishedAt: 2026-08-31 17:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 17:38:44 +0000 UTC FinishedAt: 2026-08-31 17:40:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53aaa8e9-b3a4-4710-88c5-a3b63b7e392b,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-workflow84w5c/series-workflow84w5c-build-action-2649409803/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-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 17:40:49 +0000 UTC FinishedAt: 2026-08-31 17:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 17:40:49 +0000 UTC FinishedAt: 2026-08-31 17:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 17:40:49 +0000 UTC FinishedAt: 2026-08-31 17:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 17:40:49 +0000 UTC FinishedAt: 2026-08-31 17:56:27 +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:*37213840-aab8-49cd-acd3-ff540064ee27,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-workflow84w5c/series-workflow84w5c-convert-artifact-3055967936/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": "e91a3dc3-1970-4725-8f29-245935132e8c", "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-workflow84w5c/series-workflow84w5c-build-action-79809660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 17:40:49 +0000 UTC FinishedAt: 2026-08-31 17:56:17 +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:*37213840-aab8-49cd-acd3-ff540064ee27,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-workflow84w5c/series-workflow84w5c-convert-artifact-3055967936/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": "e91a3dc3-1970-4725-8f29-245935132e8c", "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-workflow84w5c/series-workflow84w5c-build-action-79809660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 17:56:27 +0000 UTC FinishedAt: 2026-08-31 17:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 17:56:27 +0000 UTC FinishedAt: 2026-08-31 17:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 17:56:27 +0000 UTC FinishedAt: 2026-08-31 17:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 17:56:27 +0000 UTC FinishedAt: 2026-08-31 17:58: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:*e91a3dc3-1970-4725-8f29-245935132e8c,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-workflow84w5c/series-workflow84w5c-build-action-79809660/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-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 17:58:34 +0000 UTC FinishedAt: 2026-08-31 18:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 17:58:34 +0000 UTC FinishedAt: 2026-08-31 18:43:06 +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":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"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:*53aaa8e9-b3a4-4710-88c5-a3b63b7e392b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e91a3dc3-1970-4725-8f29-245935132e8c,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-workflow84w5c/series-workflow84w5c-build-action-2649409803/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-workflow84w5c/series-workflow84w5c-build-action-79809660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 17:58:34 +0000 UTC FinishedAt: 2026-08-31 17:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 17:58:34 +0000 UTC FinishedAt: 2026-08-31 17:58: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":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"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-workflow84w5c/series-workflow84w5c-convert-artifact-880436505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 17:58:34 +0000 UTC FinishedAt: 2026-08-31 17:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 17:58:34 +0000 UTC FinishedAt: 2026-08-31 17:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 17:58:34 +0000 UTC FinishedAt: 2026-08-31 17:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 17:58:55 +0000 UTC FinishedAt: 2026-08-31 18:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow84w5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb049bdbf2b98d103d93daef44a5e1a0164d01eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","9P_FS","CIFS","AFS_FS","CEPH_FS"],"series_id":"66b0c2a1-cc45-4f4c-8482-d8221e5aab81","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 17:58:55 +0000 UTC FinishedAt: 2026-08-31 18:42:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53aaa8e9-b3a4-4710-88c5-a3b63b7e392b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e91a3dc3-1970-4725-8f29-245935132e8c,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-workflow84w5c/series-workflow84w5c-build-action-2649409803/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-workflow84w5c/series-workflow84w5c-build-action-79809660/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-workflow84w5c/series-workflow84w5c-convert-artifact-880436505/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,}