Name: series-workflowb4qf2 Phase: Succeeded StartedAt: 2026-08-06 19:43:01 +0000 UTC FinishedAt: 2026-08-07 00:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[0] Phase: Succeeded StartedAt: 2026-08-06 19:43:01 +0000 UTC FinishedAt: 2026-08-06 20:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 19:43:01 +0000 UTC FinishedAt: 2026-08-06 20:18:55 +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": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "JBD2", "GFS2_FS", "OCFS2_FS", "MSDOS_FS", "VFAT_FS", "EXFAT_FS", "ADFS_FS", "EXT2_FS", "OMFS_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": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "JBD2", "GFS2_FS", "OCFS2_FS", "MSDOS_FS", "VFAT_FS", "EXFAT_FS", "ADFS_FS", "EXT2_FS", "OMFS_FS" ], "series_id": "54928d99-516e-4894-882b-0edc4daea042" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bh_end_write", "bh_end_async_write", "__bforget", "__sync_dirty_buffer", "jbd2_journal_write_metadata_buffer", "jbd2_journal_commit_transaction", "jbd2_fc_wait_bufs", "ocfs2_write_block", "fat_sync_bhs", "exfat_update_bhs", "__ext4_handle_dirty_metadata", "gfs2_pin" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0pCRDImIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDssCiAgICAmIzM0O0FERlNfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtPTUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmhfZW5kX3dyaXRlJiMzNDssCiAgICAmIzM0O2JoX2VuZF9hc3luY193cml0ZSYjMzQ7LAogICAgJiMzNDtfX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OywKICAgICYjMzQ7amJkMl9mY193YWl0X2J1ZnMmIzM0OywKICAgICYjMzQ7b2NmczJfd3JpdGVfYmxvY2smIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfYmhzJiMzNDssCiAgICAmIzM0O2V4ZmF0X3VwZGF0ZV9iaHMmIzM0OywKICAgICYjMzQ7X19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtnZnMyX3BpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNjg4YzY4MGM1OWZjN2U5ZmJjNjQzMmE1ZWNmNzY0MWQwMThlYTAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMDowMTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuY1xuaW5kZXggMTFhZmE5ZTE1N2FhNy4uYjhjYzZhNjk3YTA1ZCAxMDA2NDRcbi0tLSBhL2ZzL2FkZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FkZnMvZGlyLmNcbkBAIC0xOTEsNyAmIzQzOzE5MSw3IEBAIHN0YXRpYyBpbnQgYWRmc19kaXJfc3luYyhzdHJ1Y3QgYWRmc19kaXIgKmRpcilcbiBcdGZvciAoaSA9IGRpci1cdTAwM2Vucl9idWZmZXJzIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gZGlyLVx1MDAzZWJoc1tpXTtcbiBcdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKVxuJiM0MztcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCBiZThiNTdhNjM1Y2Q4Li42OGVhMGVmODQ3MGVlIDEwMDY0NFxuLS0tIGEvZnMvYnVmZmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J1ZmZlci5jXG5AQCAtMjAzLDExICYjNDM7MjAzLDEwIEBAIHZvaWQgYmhfZW5kX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcbiBcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdGlmIChzdWNjZXNzKSB7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJ1ZmZlcl9pb19lcnJvcihiaCwgXCYjMzQ7LCBsb3N0IHN5bmMgcGFnZSB3cml0ZVwmIzM0Oyk7XG4gXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdH1cbiBcdHVubG9ja19idWZmZXIoYmgpO1xuIH1cbkBAIC00MzcsMTEgJiM0Mzs0MzYsMTAgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxuIFxuIFx0Zm9saW8gPSBiaC1cdTAwM2ViX2ZvbGlvO1xuIFx0aWYgKHN1Y2Nlc3MpIHtcbi1cdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4mIzQzO1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YnVmZmVyX2lvX2Vycm9yKGJoLCBcJiMzNDssIGxvc3QgYXN5bmMgcGFnZSB3cml0ZVwmIzM0Oyk7XG4gXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdH1cbiBcbiBcdGZpcnN0ID0gZm9saW9fYnVmZmVycyhmb2xpbyk7XG5AQCAtNjE4LDcgJiM0Mzs2MTYsNyBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4gXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1iLVx1MDAzZWxvY2spO1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4tXHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcbiYjNDM7XHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHRcdGJyZWxzZShiaCk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZtbWItXHUwMDNlbG9jayk7XG5AQCAtMTA5MSw2ICYjNDM7MTA4OSw3IEBAIEVYUE9SVF9TWU1CT0woX19icmVsc2UpO1xuIHZvaWQgX19iZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4ge1xuIFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbiYjNDM7XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0cmVtb3ZlX2Fzc29jX3F1ZXVlKGJoKTtcbiBcdF9fYnJlbHNlKGJoKTtcbiB9XG5AQCAtMTA5OSwxMiAmIzQzOzEwOTgsMTYgQEAgRVhQT1JUX1NZTUJPTChfX2Jmb3JnZXQpO1xuIHN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhiaC1cdTAwM2ViX2ZvbGlvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZXh0NCBqb3VybmFsIChqYmQyKSBjYW4gc3VibWl0IGEgYnVmZmVyX2hlYWQgaXQgZGlyZWN0bHkgY3JlYXRlZFxuLVx0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2VzbiYjMzk7dCBjYXJlIGFib3V0IHRoZXNlLlxuJiM0MztcdCAqIGZvciBtZW1vcnkgdGhhdCBpcyBub3QgaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYWxsLiAgZnNjcnlwdCBkb2VzbiYjMzk7dFxuJiM0MztcdCAqIGNhcmUgYWJvdXQgdGhlc2UuXG4gXHQgKi9cbiYjNDM7XHRpZiAoIWJoLVx1MDAzZWJfZm9saW8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWFwcGluZyA9IGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZztcbiBcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuO1xuIFx0ZnNjcnlwdF9zZXRfYmlvX2NyeXB0X2N0eChiaW8sIG1hcHBpbmctXHUwMDNlaG9zdCxcbkBAIC0xMTE1LDcgJiM0MzsxMTE4LDYgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcbiBcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIFx0XHRiaW9fZW5kX2lvX3QgZW5kX2JpbylcbiB7XG4tXHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcdTAwMjYgUkVRX09QX01BU0s7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4gXG4gXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcbkBAIC0xMTIzLDExICYjNDM7MTEyNSw3IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXHRCVUdfT04oYnVmZmVyX2RlbGF5KGJoKSk7XG4gXHRCVUdfT04oYnVmZmVyX3Vud3JpdHRlbihiaCkpO1xuIFxuLVx0Lypcbi1cdCAqIE9ubHkgY2xlYXIgb3V0IGEgd3JpdGUgZXJyb3Igd2hlbiByZXdyaXRpbmdcbi1cdCAqL1xuLVx0aWYgKHRlc3Rfc2V0X2J1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAob3AgPT0gUkVRX09QX1dSSVRFKSlcbi1cdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiYjNDM7XHRzZXRfYnVmZmVyX3JlcShiaCk7XG4gXG4gXHRpZiAoYnVmZmVyX21ldGEoYmgpKVxuIFx0XHRvcGYgfD0gUkVRX01FVEE7XG5AQCAtMTE0Miw3ICYjNDM7MTE0MCwxMSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gYmgtXHUwMDNlYl9ibG9ja25yICogKGJoLVx1MDAzZWJfc2l6ZSBcdTAwM2VcdTAwM2UgOSk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdyaXRlX2hpbnQ7XG4gXG4tXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSwgYmhfb2Zmc2V0KGJoKSk7XG4mIzQzO1x0aWYgKGJoLVx1MDAzZWJfZm9saW8pXG4mIzQzO1x0XHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIGJoX29mZnNldChiaCkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJpb19hZGRfdmlydF9ub2ZhaWwoYmlvLCBiaC1cdTAwM2ViX2RhdGEsIGJoLVx1MDAzZWJfc2l6ZSk7XG4gXG4gXHRiaW8tXHUwMDNlYmlfZW5kX2lvID0gZW5kX2JpbztcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gYmg7XG5AQCAtMTE1Miw3ICYjNDM7MTE1NCw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXG4gXHRpZiAod2JjKSB7XG4gXHRcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XG4tXHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbiYjNDM7XHRcdFx0d2JjX2FjY291bnRfY2dyb3VwX293bmVyKHdiYywgYmgtXHUwMDNlYl9mb2xpbywgYmgtXHUwMDNlYl9zaXplKTtcbiBcdH1cbiBcbiBcdGJsa19jcnlwdG9fc3VibWl0X2JpbyhiaW8pO1xuQEAgLTE1MDgsNyAmIzQzOzE1MTEsNyBAQCBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7XG4gLyogQml0cyB0aGF0IGFyZSBjbGVhcmVkIGR1cmluZyBhbiBpbnZhbGlkYXRlICovXG4gI2RlZmluZSBCVUZGRVJfRkxBR1NfRElTQ0FSRCBcXFxuIFx0KDEgXHUwMDNjXHUwMDNjIEJIX01hcHBlZCB8IDEgXHUwMDNjXHUwMDNjIEJIX05ldyB8IDEgXHUwMDNjXHUwMDNjIEJIX1JlcSB8IFxcXG4tXHQgMSBcdTAwM2NcdTAwM2MgQkhfRGVsYXkgfCAxIFx1MDAzY1x1MDAzYyBCSF9VbndyaXR0ZW4pXG4mIzQzO1x0IDEgXHUwMDNjXHUwMDNjIEJIX0RlbGF5IHwgMSBcdTAwM2NcdTAwM2MgQkhfVW53cml0dGVuIHwgMSBcdTAwM2NcdTAwM2MgQkhfV3JpdGVfRUlPKVxuIFxuIHN0YXRpYyB2b2lkIGRpc2NhcmRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKVxuIHtcbkBAIC0yNzMzLDcgJiM0MzsyNzM2LDcgQEAgaW50IF9fc3luY19kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxuIFxuIFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4tXHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcbiYjNDM7XHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0fSBlbHNlIHtcbiBcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jXG5pbmRleCA2ZjExYTk2YTRmZmE4Li5kZmQwYmJmMzFjOTQwIDEwMDY0NFxuLS0tIGEvZnMvZXhmYXQvbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9taXNjLmNcbkBAIC0xODcsNyAmIzQzOzE4Nyw3IEBAIGludCBleGZhdF91cGRhdGVfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocywgaW50IHN5bmMpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9iaHMgXHUwMDI2XHUwMDI2IHN5bmM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoc1tpXSk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXG4mIzQzO1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jXG5pbmRleCBiZTYzZjg5NDAyYTM4Li4zOTAwNWVjMjNmZTVkIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3hhdHRyLmNcbkBAIC03NjksNyAmIzQzOzc2OSw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbiBcdFx0aWYgKElTX1NZTkMoaW5vZGUpKSB7XG4gXHRcdFx0c3luY19kaXJ0eV9idWZmZXIobmV3X2JoKTtcbiBcdFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdFx0aWYgKGJ1ZmZlcl9yZXEobmV3X2JoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShuZXdfYmgpKVxuJiM0MztcdFx0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKG5ld19iaCkpXG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggMDJiMDY2Mjk5MTY0OS4uZjMzOGQ2ZTNjMjlmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbkBAIC00MTMsNyAmIzQzOzQxMyw3IEBAIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdFx0fVxuIFx0XHRpZiAoaW5vZGUgXHUwMDI2XHUwMDI2IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4gXHRcdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0XHRcdGV4dDRfZXJyb3JfaW5vZGVfZXJyKGlub2RlLCB3aGVyZSwgbGluZSxcbiBcdFx0XHRcdFx0XHQgICAgIGJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuIFx0XHRcdFx0XHRcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGl0YWJsZSBibG9ja1wmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5pbmRleCA4ZTIyNTk3OTk2MTRlLi45NTk5ODgyN2ZmMDExIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbkBAIC0yMDMsMTcgJiM0MzsyMDMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfc2V0X3NuYXBfZXJyKGludCAqc25hcF9lcnIsIGludCBlcnIpXG4gc3RhdGljIHZvaWQgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRib29sIHVwdG9kYXRlID0gYmlvX2VuZGlvX2JoKGJpbywgXHUwMDI2YmgpO1xuJiM0MztcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdEJVRkZFUl9UUkFDRShiaCwgXCYjMzQ7XCYjMzQ7KTtcbi1cdGlmICh1cHRvZGF0ZSkge1xuLVx0XHRleHQ0X2RlYnVnKFwmIzM0OyVzOiBCbG9jayAlbGxkIHVwLXRvLWRhdGVcJiMzNDssXG4mIzQzO1x0aWYgKHN1Y2Nlc3MpIHtcbiYjNDM7XHRcdGV4dDRfZGVidWcoXCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdHRlblwmIzM0OyxcbiBcdFx0XHQgICBfX2Z1bmNfXywgYmgtXHUwMDNlYl9ibG9ja25yKTtcbi1cdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4mIzQzO1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXh0NF9kZWJ1ZyhcJiMzNDslczogQmxvY2sgJWxsZCBub3QgdXAtdG8tZGF0ZVwmIzM0OyxcbiYjNDM7XHRcdGV4dDRfZGVidWcoXCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdGUgZmFpbGVkXCYjMzQ7LFxuIFx0XHRcdCAgIF9fZnVuY19fLCBiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuLVx0XHRjbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fVxuIFxuIFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tbXAuYyBiL2ZzL2V4dDQvbW1wLmNcbmluZGV4IDdjZTM2MTQ4NGIzODIuLjRiMThkZGVmNDY4ZDcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21tcC5jXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgc3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IFJFUV9TWU5DIHwgUkVRX01FVEEgfCBSRVFfUFJJTyxcbiBcdFx0XHRiaF9lbmRfd3JpdGUpO1xuIFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLVx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXG5pbmRleCBiZTE4ZjZiNTgxOWJhLi40YTRjZDAxMTFlNDdhIDEwMDY0NFxuLS0tIGEvZnMvZmF0L21pc2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L21pc2MuY1xuQEAgLTM1Niw3ICYjNDM7MzU2LDcgQEAgaW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9iaHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoc1tpXSk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXG4mIzQzO1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmNcbmluZGV4IDc4YmJhOGNjMTBiOGYuLmUzZTBkY2IxZjU2NzMgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2xvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2xvZy5jXG5AQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCBfX2FjcXVpcmVzKFx1MDAyNnNkcC1cdTAwM2VzZF9haWxfbG9jaylcbiBcdFx0Z2ZzMl9hc3NlcnQoc2RwLCBiZC1cdTAwM2ViZF90ciA9PSB0cik7XG4gXG4gXHRcdGlmICghYnVmZmVyX2J1c3koYmgpKSB7XG4tXHRcdFx0aWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2YmQtXHUwMDNlYmRfYWlsX3N0X2xpc3QsXG4gXHRcdFx0XHRcdCAgXHUwMDI2dHItXHUwMDNldHJfYWlsMl9saXN0KTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXG4gXHRcdFx0YWN0aXZlX2NvdW50JiM0MzsmIzQzOztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFjbXB4Y2hnKFx1MDAyNnNkcC1cdTAwM2VzZF9sb2dfZXJyb3IsIDAsIC1FSU8pKVxuIFx0XHRcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmMgYi9mcy9nZnMyL2xvcHMuY1xuaW5kZXggNmRhYmU3M2FkNzkwZC4uNzQ0MGU1YjcyZjhhZCAxMDA2NDRcbi0tLSBhL2ZzL2dmczIvbG9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2xvcHMuY1xuQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQgZ2ZzMl9waW4oc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xuIFx0aWYgKHRlc3Rfc2V0X2J1ZmZlcl9waW5uZWQoYmgpKVxuIFx0XHRnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApO1xuLVx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKVxuJiM0MztcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSB8fCBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRnZnMyX2lvX2Vycm9yX2JoKHNkcCwgYmgpO1xuIFx0YmQgPSBiaC1cdTAwM2ViX3ByaXZhdGU7XG4gXHQvKiBJZiB0aGlzIGJ1ZmZlciBpcyBpbiB0aGUgQUlMIGFuZCBpdCBoYXMgYWxyZWFkeSBiZWVuIHdyaXR0ZW5cbkBAIC0xNzksNiAmIzQzOzE3OSw4IEBAIHN0YXRpYyB2b2lkIGdmczJfZW5kX2xvZ193cml0ZV9iaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGRvIHtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdG5leHQgPSBiaC1cdTAwM2ViX3RoaXNfcGFnZTtcbiBcdFx0c2l6ZSAtPSBiaC1cdTAwM2ViX3NpemU7XG5kaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmNcbmluZGV4IDMwMjljYjZmNmQ2NDAuLmViZjZiYTU4ZmY0ZDAgMTAwNjQ0XG4tLS0gYS9mcy9qYmQyL2NvbW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9qYmQyL2NvbW1pdC5jXG5AQCAtMzIsMTQgJiM0MzszMiwxNCBAQFxuIHN0YXRpYyB2b2lkIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiYjNDM7XHRib29sIHN1Y2Nlc3MgPSBiaW9fZW5kaW9fYmgoYmlvLCBcdTAwMjZiaCk7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9yaWdfYmggPSBiaC1cdTAwM2ViX3ByaXZhdGU7XG4gXG4gXHRCVUZGRVJfVFJBQ0UoYmgsIFwmIzM0O1wmIzM0Oyk7XG4tXHRpZiAodXB0b2RhdGUpXG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdGlmIChzdWNjZXNzKVxuJiM0MztcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdGVsc2Vcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdGlmIChvcmlnX2JoKSB7XG4gXHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChCSF9TaGFkb3csIFx1MDAyNm9yaWdfYmgtXHUwMDNlYl9zdGF0ZSk7XG4gXHR9XG5AQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdGF0aWMgaW50IGpvdXJuYWxfd2FpdF9vbl9jb21taXRfcmVjb3JkKGpvdXJuYWxfdCAqam91cm5hbCxcbiBcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXG4tXHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxuJiM0MztcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcbiBcdFx0cmV0ID0gLUVJTztcbiBcdHB1dF9iaChiaCk7ICAgICAgICAgICAgLyogT25lIGZvciBnZXRibGsoKSAqL1xuIFxuQEAgLTMzMCw5ICYjNDM7MzMwLDkgQEAgc3RhdGljIF9fdTMyIGpiZDJfY2hlY2tzdW1fZGF0YShfX3UzMiBjcmMzMl9zdW0sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRjaGFyICphZGRyO1xuIFx0X191MzIgY2hlY2tzdW07XG4gXG4tXHRhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbiYjNDM7XHRhZGRyID0ga21hcF9sb2NhbF9iaChiaCk7XG4gXHRjaGVja3N1bSA9IGNyYzMyX2JlKGNyYzMyX3N1bSwgYWRkciwgYmgtXHUwMDNlYl9zaXplKTtcbi1cdGt1bm1hcF9sb2NhbChhZGRyKTtcbiYjNDM7XHRrdW5tYXBfbG9jYWxfYmgoYmgsIGFkZHIpO1xuIFxuIFx0cmV0dXJuIGNoZWNrc3VtO1xuIH1cbkBAIC0zNTcsMTAgJiM0MzszNTcsMTAgQEAgc3RhdGljIHZvaWQgamJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4gXHRcdHJldHVybjtcbiBcbiBcdHNlcSA9IGNwdV90b19iZTMyKHNlcXVlbmNlKTtcbi1cdGFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVx1MDAzZWJfZm9saW8sIGJoX29mZnNldChiaCkpO1xuJiM0MztcdGFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTtcbiBcdGNzdW0zMiA9IGpiZDJfY2hrc3VtKGotXHUwMDNlal9jc3VtX3NlZWQsIChfX3U4ICopXHUwMDI2c2VxLCBzaXplb2Yoc2VxKSk7XG4gXHRjc3VtMzIgPSBqYmQyX2Noa3N1bShjc3VtMzIsIGFkZHIsIGJoLVx1MDAzZWJfc2l6ZSk7XG4tXHRrdW5tYXBfbG9jYWwoYWRkcik7XG4mIzQzO1x0a3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTtcbiBcbiBcdGlmIChqYmQyX2hhc19mZWF0dXJlX2NzdW0zKGopKVxuIFx0XHR0YWczLVx1MDAzZXRfY2hlY2tzdW0gPSBjcHVfdG9fYmUzMihjc3VtMzIpO1xuQEAgLTgzNCw3ICYjNDM7ODM0LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcbiYjNDM7XHRcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcbiBcdFx0XHRlcnIgPSAtRUlPO1xuIFx0XHRqYmQyX3VuZmlsZV9sb2dfYmgoYmgpO1xuIFx0XHRzdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZCYjNDM7JiM0Mzs7XG5AQCAtODc3LDcgJiM0Mzs4NzcsNyBAQCB2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxuJiM0MztcdFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXG4gXHRcdEJVRkZFUl9UUkFDRShiaCwgXCYjMzQ7cGg1OiBjb250cm9sIGJ1ZmZlciB3cml0ZW91dCBkb25lOiB1bmZpbGVcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmNcbmluZGV4IDA5ZWZhMzM3NjQ5ZTIuLjcyZThjY2JmN2RlNGUgMTAwNjQ0XG4tLS0gYS9mcy9qYmQyL2pvdXJuYWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvamJkMi9qb3VybmFsLmNcbkBAIC0zMjcsOCAmIzQzOzMyNyw2IEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuIHtcbiBcdGludCBkb19lc2NhcGUgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmg7XG4tXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbztcbi1cdHVuc2lnbmVkIGludCBuZXdfb2Zmc2V0O1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9pbiA9IGpoMmJoKGpoX2luKTtcbiBcdGpvdXJuYWxfdCAqam91cm5hbCA9IHRyYW5zYWN0aW9uLVx1MDAzZXRfam91cm5hbDtcbiBcbkBAIC0zNDgsMjQgJiM0MzszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHQvKiBrZWVwIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucyBzYW5lICovXG4gXHRhdG9taWNfc2V0KFx1MDAyNm5ld19iaC1cdTAwM2ViX2NvdW50LCAxKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGVcbiYjNDM7XHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcbiYjNDM7XHQgKiBhbGxvY2F0aW9uIGFuZCBiX2RhdGEgcG9pbnRzIHN0cmFpZ2h0IGF0IHRoZSBjb3B5LiAgUG9pbnRpbmcgaXQgYXRcbiYjNDM7XHQgKiB0aGUgc2xhYiBmb2xpbyBpbnN0ZWFkIHdvdWxkIGhhbmQgaXRzIG92ZXJsb2FkZWQgLVx1MDAzZW1hcHBpbmcgdG9cbiYjNDM7XHQgKiBhbnl0aGluZyB0aGF0IGdvZXMgbG9va2luZyBmb3IgYW4gYWRkcmVzc19zcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XG4gXHRzcGluX2xvY2soXHUwMDI2amhfaW4tXHUwMDNlYl9zdGF0ZV9sb2NrKTtcbiBcdC8qXG4gXHQgKiBJZiBhIG5ldyB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBkb25lIGEgYnVmZmVyIGNvcHktb3V0LCB0aGVuXG4gXHQgKiB3ZSB1c2UgdGhhdCB2ZXJzaW9uIG9mIHRoZSBkYXRhIGZvciB0aGUgY29tbWl0LlxuIFx0ICovXG4gXHRpZiAoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSkge1xuLVx0XHRuZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuLVx0XHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gXHRcdGRvX2VzY2FwZSA9IGpiZDJfZGF0YV9uZWVkc19lc2NhcGluZyhqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbiBcdFx0aWYgKGRvX2VzY2FwZSlcbiBcdFx0XHRqYmQyX2RhdGFfZG9fZXNjYXBlKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuJiM0MztcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJoX2luLVx1MDAzZWJfZm9saW87XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBiaF9pbi1cdTAwM2ViX2RhdGEpO1xuIFx0XHRjaGFyICp0bXA7XG4gXHRcdGNoYXIgKm1hcHBlZF9kYXRhO1xuIFxuLVx0XHRuZXdfZm9saW8gPSBiaF9pbi1cdTAwM2ViX2ZvbGlvO1xuLVx0XHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgYmhfaW4tXHUwMDNlYl9kYXRhKTtcbi1cdFx0bWFwcGVkX2RhdGEgPSBrbWFwX2xvY2FsX2ZvbGlvKG5ld19mb2xpbywgbmV3X29mZnNldCk7XG4mIzQzO1x0XHRtYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7XG4gXHRcdC8qXG4gXHRcdCAqIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBpZiBkYXRhIGFscmVhZHkgd2FzbiYjMzk7dCBmcm96ZW4uIERvXG4gXHRcdCAqIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciBlc2NhcGluZywgYXMgdGhlIHRyaWdnZXIgbWF5IG1vZGlmeVxuQEAgLTM3OSw4ICYjNDM7Mzg0LDEwIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuIFx0XHQvKlxuIFx0XHQgKiBEbyB3ZSBuZWVkIHRvIGRvIGEgZGF0YSBjb3B5P1xuIFx0XHQgKi9cbi1cdFx0aWYgKCFkb19lc2NhcGUpXG4mIzQzO1x0XHRpZiAoIWRvX2VzY2FwZSkge1xuJiM0MztcdFx0XHRmb2xpb19zZXRfYmgobmV3X2JoLCBmb2xpbywgb2Zmc2V0KTtcbiBcdFx0XHRnb3RvIGVzY2FwZV9kb25lO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZqaF9pbi1cdTAwM2ViX3N0YXRlX2xvY2spO1xuIFx0XHR0bXAgPSBrbWFsbG9jKGJoX2luLVx1MDAzZWJfc2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xuQEAgLTM5MSw3ICYjNDM7Mzk4LDcgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHRcdH1cbiBcbiBcdFx0amhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSA9IHRtcDtcbi1cdFx0bWVtY3B5X2Zyb21fZm9saW8odG1wLCBuZXdfZm9saW8sIG5ld19vZmZzZXQsIGJoX2luLVx1MDAzZWJfc2l6ZSk7XG4mIzQzO1x0XHRtZW1jcHlfZnJvbV9mb2xpbyh0bXAsIGZvbGlvLCBvZmZzZXQsIGJoX2luLVx1MDAzZWJfc2l6ZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSwgYXMgd2UmIzM5O3JlIHVzaW5nIGZyb3plblxuIFx0XHQgKiBkYXRhIGZvciB0aGUgZXNjYXBpbmcsIGJ1dCBpdCBrZWVwcyBjb25zaXN0ZW5jeSB3aXRoXG5AQCAtNDAwLDEzICYjNDM7NDA3LDExIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuIFx0XHRqaF9pbi1cdTAwM2ViX2Zyb3plbl90cmlnZ2VycyA9IGpoX2luLVx1MDAzZWJfdHJpZ2dlcnM7XG4gXG4gY29weV9kb25lOlxuLVx0XHRuZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuLVx0XHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gXHRcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4mIzQzO1x0XHRuZXdfYmgtXHUwMDNlYl9kYXRhID0gamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YTtcbiBcdH1cbiBcbiBlc2NhcGVfZG9uZTpcbi1cdGZvbGlvX3NldF9iaChuZXdfYmgsIG5ld19mb2xpbywgbmV3X29mZnNldCk7XG4gXHRuZXdfYmgtXHUwMDNlYl9zaXplID0gYmhfaW4tXHUwMDNlYl9zaXplO1xuIFx0bmV3X2JoLVx1MDAzZWJfYmRldiA9IGpvdXJuYWwtXHUwMDNlal9kZXY7XG4gXHRuZXdfYmgtXHUwMDNlYl9ibG9ja25yID0gYmxvY2tucjtcbkBAIC04ODEsNyAmIzQzOzg4Niw3IEBAIGludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcbiBcdFx0ICogVXBkYXRlIGpfZmNfb2ZmIHNvIGpiZDJfZmNfcmVsZWFzZV9idWZzIGNhbiByZWxlYXNlIHJlbWFpblxuIFx0XHQgKiBidWZmZXIgaGVhZC5cbiBcdFx0ICovXG4tXHRcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSkge1xuIFx0XHRcdGpvdXJuYWwtXHUwMDNlal9mY19vZmYgPSBpICYjNDM7IDE7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcbmluZGV4IDVjYzdkMDk3YjJhYzguLjg1ZDg0ZDkwOWY3ODUgMTAwNjQ0XG4tLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uY1xuQEAgLTkyMCw3ICYjNDM7OTIwLDcgQEAgc3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaClcbiBcdGNoYXIgKnNvdXJjZTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBqaDJiaChqaCk7XG4gXG4tXHRKX0VYUEVDVF9KSChqaCwgYnVmZmVyX3VwdG9kYXRlKGJoKSwgXCYjMzQ7UG9zc2libGUgSU8gZmFpbHVyZS5cXG5cJiMzNDspO1xuJiM0MztcdEpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCBcJiMzNDtCdWZmZXIgbm90IHVwdG9kYXRlIVxcblwmIzM0Oyk7XG4gXHRzb3VyY2UgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVx1MDAzZWJfZm9saW8sIGJoX29mZnNldChiaCkpO1xuIFx0LyogRmlyZSBkYXRhIGZyb3plbiB0cmlnZ2VyIGp1c3QgYmVmb3JlIHdlIGNvcHkgdGhlIGRhdGEgKi9cbiBcdGpiZDJfYnVmZmVyX2Zyb3plbl90cmlnZ2VyKGpoLCBzb3VyY2UsIGpoLVx1MDAzZWJfdHJpZ2dlcnMpO1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jXG5pbmRleCA3YmZlMzc3YWYyZGZjLi43MzNjZWRhNzljYTFmIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY1xuQEAgLTY2LDEyICYjNDM7NjYsMTQgQEAgaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFxuIFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFxuLVx0aWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRpZiAoIWJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0b2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShjaSwgYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0LyogV2UgZG9uJiMzOTt0IG5lZWQgdG8gcmVtb3ZlIHRoZSBjbHVzdGVyZWQgdXB0b2RhdGVcbi1cdFx0ICogaW5mb3JtYXRpb24gZm9yIHRoaXMgYmggYXMgaXQmIzM5O3Mgbm90IG1hcmtlZCBsb2NhbGx5XG4tXHRcdCAqIHVwdG9kYXRlLiAqL1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBidWZmZXIgc3RpbGwgaG9sZHMgd2hhdCB3ZSB0cmllZCB0byB3cml0ZSwgYnV0IGl0IGRpZFxuJiM0MztcdFx0ICogbm90IHJlYWNoIHRoZSBkaXNrLCBzbyBkb24mIzM5O3QgYWR2ZXJ0aXNlIGl0IHRvIHRoZSBjbHVzdGVyXG4mIzQzO1x0XHQgKiBhcyB1cCB0byBkYXRlLlxuJiM0MztcdFx0ICovXG4gXHRcdHJldCA9IC1FSU87XG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcdH1cbkBAIC00NDYsNyAmIzQzOzQ0OCw3IEBAIGludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4gXG4gXHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXG4tXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuIFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jXG5pbmRleCBkOGFmYmMxYTc2YmI4Li5lYTY4MDJkODk0YzJiIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvam91cm5hbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9qb3VybmFsLmNcbkBAIC02NzYsMTkgJiM0Mzs2NzYsMjAgQEAgc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdG1sb2coTUxfRVJST1IsIFwmIzM0O2dpdmluZyBtZSBhIGJ1ZmZlciB0aGF0JiMzOTtzIG5vdCB1cHRvZGF0ZSFcXG5cJiMzNDspO1xuIFx0XHRtbG9nKE1MX0VSUk9SLCBcJiMzNDtiX2Jsb2NrbnI9JWxsdSwgYl9zdGF0ZT0weCVseFxcblwmIzM0OyxcbiBcdFx0ICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLVx1MDAzZWJfYmxvY2tuciwgYmgtXHUwMDNlYl9zdGF0ZSk7XG4tXG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXG4mIzQzO1x0ICogdG8gY2hlY2twb2ludCwgc28gYWxsIHRoZSBiaHMgYXJlIG1hcmtlZCBhcyBCSF9Xcml0ZV9FSU8uXG4mIzQzO1x0ICogRm9yIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHRoZSBiaCBpcyBqdXN0IGFtb25nIHRob3NlIGVycm9yXG4mIzQzO1x0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXJcbiYjNDM7XHQgKiBpdHMgQkhfV3JpdGVfRUlPIGFuZCByZXVzZSBkaXJlY3RseSwgc2luY2Ugb3RoZXIgYmhzIGFyZVxuJiM0MztcdCAqIG5vdCB3cml0dGVuIHRvIGRpc2sgeWV0IGFuZCB0aGF0IHdpbGwgY2F1c2UgbWV0YWRhdGFcbiYjNDM7XHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxuJiM0MztcdCAqIGZ1cnRoZXIgZGFtYWdlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdGxvY2tfYnVmZmVyKGJoKTtcbi1cdFx0Lypcbi1cdFx0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXG4tXHRcdCAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLlxuLVx0XHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3Jcbi1cdFx0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXJcbi1cdFx0ICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmVcbi1cdFx0ICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YVxuLVx0XHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxuLVx0XHQgKiBmdXJ0aGVyIGRhbWFnZS5cbi1cdFx0ICovXG4tXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuJiM0MztcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0XHRyZXR1cm4gb2NmczJfZXJyb3Iob3NiLVx1MDAzZXNiLCBcJiMzNDtBIHByZXZpb3VzIGF0dGVtcHQgdG8gXCYjMzQ7XG4gXHRcdFx0XHRcdFwmIzM0O3dyaXRlIHRoaXMgYnVmZmVyIGhlYWQgZmFpbGVkXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmNcbmluZGV4IDFkOTE1ZWY3MjExOWYuLmJjMzcwMjlhNGFmYjEgMTAwNjQ0XG4tLS0gYS9mcy9vbWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29tZnMvaW5vZGUuY1xuQEAgLTE0NSw3ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGludCBfX29tZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRpZiAod2FpdCkge1xuIFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4mIzQzO1x0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcbiBcdFx0XHRzeW5jX2ZhaWxlZCA9IDE7XG4gXHR9XG4gXG5AQCAtMTU5LDcgJiM0MzsxNTksNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbiBcdFx0bWFya19idWZmZXJfZGlydHkoYmgyKTtcbiBcdFx0aWYgKHdhaXQpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaDIpO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKGJoMikgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgyKSlcbiYjNDM7XHRcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaDIpKVxuIFx0XHRcdFx0c3luY19mYWlsZWQgPSAxO1xuIFx0XHR9XG4gXHRcdGJyZWxzZShiaDIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggZmQyYzcxMTVjMDU0Mi4uMjBiOGZjYTFhYmZhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5AQCAtNTksMTAgJiM0Mzs1OSw3IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlO1xuIHN0cnVjdCBidWZmZXJfaGVhZCB7XG4gXHR1bnNpZ25lZCBsb25nIGJfc3RhdGU7XHRcdC8qIGJ1ZmZlciBzdGF0ZSBiaXRtYXAgKHNlZSBhYm92ZSkgKi9cbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYl90aGlzX3BhZ2U7LyogY2lyY3VsYXIgbGlzdCBvZiBwYWdlJiMzOTtzIGJ1ZmZlcnMgKi9cbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IHBhZ2UgKmJfcGFnZTtcdC8qIHRoZSBwYWdlIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXG4tXHRcdHN0cnVjdCBmb2xpbyAqYl9mb2xpbztcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xuLVx0fTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmJfZm9saW87XHRcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xuIFxuIFx0c2VjdG9yX3QgYl9ibG9ja25yO1x0XHQvKiBzdGFydCBibG9jayBudW1iZXIgKi9cbiBcdHNpemVfdCBiX3NpemU7XHRcdFx0Lyogc2l6ZSBvZiBtYXBwaW5nICovXG5AQCAtMTcyLDcgJiM0MzsxNjksMzYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYnVmZmVyX3VwdG9kYXRlKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJoX29mZnNldChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZykoYmgpLVx1MDAzZWJfZGF0YSBcdTAwMjYgKHBhZ2Vfc2l6ZShiaC1cdTAwM2ViX3BhZ2UpIC0gMSk7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXHUwMDNlYl9kYXRhIFx1MDAyNiAoZm9saW9fc2l6ZShiaC1cdTAwM2ViX2ZvbGlvKSAtIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga21hcF9sb2NhbF9iaCAtIE1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cbiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBCdWZmZXJzIHVzdWFsbHkgbGl2ZSBpbiB0aGUgcGFnZSBjYWNoZSwgYnV0IGEgZmV3IGFyZSBidWlsdCBvdmVyIG1lbW9yeVxuJiM0MzsgKiB3aGljaCBpcyBub3QuICBUaG9zZSBjYXJyeSBubyBmb2xpbyBhbmQgYl9kYXRhIGlzIGFscmVhZHkgYSBrZXJuZWwgYWRkcmVzc1xuJiM0MzsgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoXG4mIzQzOyAqIGt1bm1hcF9sb2NhbF9iaCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJiMzOTtzIGRhdGEuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfbG9jYWxfYmgoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiYjNDM7e1xuJiM0MztcdGlmICghYmgtXHUwMDNlYl9mb2xpbylcbiYjNDM7XHRcdHJldHVybiBiaC1cdTAwM2ViX2RhdGE7XG4mIzQzO1x0cmV0dXJuIGttYXBfbG9jYWxfZm9saW8oYmgtXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBrdW5tYXBfbG9jYWxfYmggLSBVbm1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cbiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyLlxuJiM0MzsgKiBAYWRkcjogVGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkga21hcF9sb2NhbF9iaCgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGJoLVx1MDAzZWJfZm9saW8pXG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoYWRkcik7XG4gfVxuIFxuIC8qIElmIHdlICprbm93KiBwYWdlLVx1MDAzZXByaXZhdGUgcmVmZXJzIHRvIGJ1ZmZlcl9oZWFkcyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE3bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtKQkQyJiMzNDssCiAgICAmIzM0O0dGUzJfRlMmIzM0OywKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtFWEZBVF9GUyYjMzQ7LAogICAgJiMzNDtBREZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDJfRlMmIzM0OywKICAgICYjMzQ7T01GU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JoX2VuZF93cml0ZSYjMzQ7LAogICAgJiMzNDtiaF9lbmRfYXN5bmNfd3JpdGUmIzM0OywKICAgICYjMzQ7X19iZm9yZ2V0JiMzNDssCiAgICAmIzM0O19fc3luY19kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uJiMzNDssCiAgICAmIzM0O2piZDJfZmNfd2FpdF9idWZzJiMzNDssCiAgICAmIzM0O29jZnMyX3dyaXRlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2JocyYjMzQ7LAogICAgJiMzNDtleGZhdF91cGRhdGVfYmhzJiMzNDssCiAgICAmIzM0O19fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7Z2ZzMl9waW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBidWZmZXJfaGVhZCBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3cml0ZSBlcnJvciB0cmFja2luZyAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yIHZzIGJ1ZmZlcl91cHRvZGF0ZSkgYW5kIHN1cHBvcnQgZm9yIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGUuZy4sIGZvciBiX2Zyb3plbl9kYXRhIGluIGpiZDIpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoZXh0NCwgamJkMiwgZ2ZzMiwgb2NmczIsIGZhdCwgZXhmYXQsIGFkZnMsIGV4dDIsIG9tZnMpIGFuZCB0aGUgY29yZSBibG9jayBsYXllci4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzICh2aWEgdGhlIG5ldyBrbWFwX2xvY2FsX2JoL2Jpb19hZGRfdmlydF9ub2ZhaWwgcGF0aHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjY4OGM2ODBjNTlmYzdlOWZiYzY0MzJhNWVjZjc2NDFkMDE4ZWEwMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMjA6MDE6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuYwppbmRleCAxMWFmYTllMTU3YWE3Li5iOGNjNmE2OTdhMDVkIDEwMDY0NAotLS0gYS9mcy9hZGZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FkZnMvZGlyLmMKQEAgLTE5MSw3ICYjNDM7MTkxLDcgQEAgc3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKQogCWZvciAoaSA9IGRpci0mZ3Q7bnJfYnVmZmVycyAtIDE7IGkgJmd0Oz0gMDsgaS0tKSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBkaXItJmd0O2Joc1tpXTsKIAkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKQogCQkJZXJyID0gLUVJTzsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggYmU4YjU3YTYzNWNkOC4uNjhlYTBlZjg0NzBlZSAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTIwMywxMSAmIzQzOzIwMywxMCBAQCB2b2lkIGJoX2VuZF93cml0ZShzdHJ1Y3QgYmlvICpiaW8pCiAJYm9vbCBzdWNjZXNzID0gYmlvX2VuZGlvX2JoKGJpbywgJmFtcDtiaCk7CiAKIAlpZiAoc3VjY2VzcykgewotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfSBlbHNlIHsKIAkJYnVmZmVyX2lvX2Vycm9yKGJoLCAmIzM0OywgbG9zdCBzeW5jIHBhZ2Ugd3JpdGUmIzM0Oyk7CiAJCW1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKLQkJY2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAl9CiAJdW5sb2NrX2J1ZmZlcihiaCk7CiB9CkBAIC00MzcsMTEgJiM0Mzs0MzYsMTAgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKQogCiAJZm9saW8gPSBiaC0mZ3Q7Yl9mb2xpbzsKIAlpZiAoc3VjY2VzcykgewotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfSBlbHNlIHsKIAkJYnVmZmVyX2lvX2Vycm9yKGJoLCAmIzM0OywgbG9zdCBhc3luYyBwYWdlIHdyaXRlJiMzNDspOwogCQltYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7Ci0JCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJfQogCiAJZmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTsKQEAgLTYxOCw3ICYjNDM7NjE2LDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKQogCQl9CiAJCXNwaW5fdW5sb2NrKCZhbXA7bW1iLSZndDtsb2NrKTsKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwotCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCiYjNDM7CQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkKIAkJCWVyciA9IC1FSU87CiAJCWJyZWxzZShiaCk7CiAJCXNwaW5fbG9jaygmYW1wO21tYi0mZ3Q7bG9jayk7CkBAIC0xMDkxLDYgJiM0MzsxMDg5LDcgQEAgRVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7CiB2b2lkIF9fYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiYjNDM7CWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJcmVtb3ZlX2Fzc29jX3F1ZXVlKGJoKTsKIAlfX2JyZWxzZShiaCk7CiB9CkBAIC0xMDk5LDEyICYjNDM7MTA5OCwxNiBAQCBFWFBPUlRfU1lNQk9MKF9fYmZvcmdldCk7CiBzdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGJoLSZndDtiX2ZvbGlvKTsKJiM0MzsJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKIAkvKgogCSAqIFRoZSBleHQ0IGpvdXJuYWwgKGpiZDIpIGNhbiBzdWJtaXQgYSBidWZmZXJfaGVhZCBpdCBkaXJlY3RseSBjcmVhdGVkCi0JICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2VzbiYjMzk7dCBjYXJlIGFib3V0IHRoZXNlLgomIzQzOwkgKiBmb3IgbWVtb3J5IHRoYXQgaXMgbm90IGluIHRoZSBwYWdlIGNhY2hlIGF0IGFsbC4gIGZzY3J5cHQgZG9lc24mIzM5O3QKJiM0MzsJICogY2FyZSBhYm91dCB0aGVzZS4KIAkgKi8KJiM0MzsJaWYgKCFiaC0mZ3Q7Yl9mb2xpbykKJiM0MzsJCXJldHVybjsKJiM0MzsJbWFwcGluZyA9IGJoLSZndDtiX2ZvbGlvLSZndDttYXBwaW5nOwogCWlmICghbWFwcGluZykKIAkJcmV0dXJuOwogCWZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBtYXBwaW5nLSZndDtob3N0LApAQCAtMTExNSw3ICYjNDM7MTExOCw2IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAJCWVudW0gcndfaGludCB3cml0ZV9oaW50LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJYmlvX2VuZF9pb190IGVuZF9iaW8pCiB7Ci0JY29uc3QgZW51bSByZXFfb3Agb3AgPSBvcGYgJmFtcDsgUkVRX09QX01BU0s7CiAJc3RydWN0IGJpbyAqYmlvOwogCiAJQlVHX09OKCFidWZmZXJfbG9ja2VkKGJoKSk7CkBAIC0xMTIzLDExICYjNDM7MTEyNSw3IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAJQlVHX09OKGJ1ZmZlcl9kZWxheShiaCkpOwogCUJVR19PTihidWZmZXJfdW53cml0dGVuKGJoKSk7CiAKLQkvKgotCSAqIE9ubHkgY2xlYXIgb3V0IGEgd3JpdGUgZXJyb3Igd2hlbiByZXdyaXRpbmcKLQkgKi8KLQlpZiAodGVzdF9zZXRfYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAob3AgPT0gUkVRX09QX1dSSVRFKSkKLQkJY2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKJiM0MzsJc2V0X2J1ZmZlcl9yZXEoYmgpOwogCiAJaWYgKGJ1ZmZlcl9tZXRhKGJoKSkKIAkJb3BmIHw9IFJFUV9NRVRBOwpAQCAtMTE0Miw3ICYjNDM7MTE0MCwxMSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLAogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBiaC0mZ3Q7Yl9ibG9ja25yICogKGJoLSZndDtiX3NpemUgJmd0OyZndDsgOSk7CiAJYmlvLSZndDtiaV93cml0ZV9oaW50ID0gd3JpdGVfaGludDsKIAotCWJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtJmd0O2JfZm9saW8sIGJoLSZndDtiX3NpemUsIGJoX29mZnNldChiaCkpOwomIzQzOwlpZiAoYmgtJmd0O2JfZm9saW8pCiYjNDM7CQliaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLSZndDtiX2ZvbGlvLCBiaC0mZ3Q7Yl9zaXplLAomIzQzOwkJCQkgICAgIGJoX29mZnNldChiaCkpOwomIzQzOwllbHNlCiYjNDM7CQliaW9fYWRkX3ZpcnRfbm9mYWlsKGJpbywgYmgtJmd0O2JfZGF0YSwgYmgtJmd0O2Jfc2l6ZSk7CiAKIAliaW8tJmd0O2JpX2VuZF9pbyA9IGVuZF9iaW87CiAJYmlvLSZndDtiaV9wcml2YXRlID0gYmg7CkBAIC0xMTUyLDcgJiM0MzsxMTU0LDggQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwKIAogCWlmICh3YmMpIHsKIAkJd2JjX2luaXRfYmlvKHdiYywgYmlvKTsKLQkJd2JjX2FjY291bnRfY2dyb3VwX293bmVyKHdiYywgYmgtJmd0O2JfZm9saW8sIGJoLSZndDtiX3NpemUpOwomIzQzOwkJaWYgKGJoLSZndDtiX2ZvbGlvKQomIzQzOwkJCXdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLSZndDtiX2ZvbGlvLCBiaC0mZ3Q7Yl9zaXplKTsKIAl9CiAKIAlibGtfY3J5cHRvX3N1Ym1pdF9iaW8oYmlvKTsKQEAgLTE1MDgsNyAmIzQzOzE1MTEsNyBAQCBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7CiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi8KICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXAogCSgxICZsdDsmbHQ7IEJIX01hcHBlZCB8IDEgJmx0OyZsdDsgQkhfTmV3IHwgMSAmbHQ7Jmx0OyBCSF9SZXEgfCBcCi0JIDEgJmx0OyZsdDsgQkhfRGVsYXkgfCAxICZsdDsmbHQ7IEJIX1Vud3JpdHRlbikKJiM0MzsJIDEgJmx0OyZsdDsgQkhfRGVsYXkgfCAxICZsdDsmbHQ7IEJIX1Vud3JpdHRlbiB8IDEgJmx0OyZsdDsgQkhfV3JpdGVfRUlPKQogCiBzdGF0aWMgdm9pZCBkaXNjYXJkX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKIHsKQEAgLTI3MzMsNyAmIzQzOzI3MzYsNyBAQCBpbnQgX19zeW5jX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MpCiAKIAkJYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTsKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwotCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCiYjNDM7CQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkKIAkJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7CiAJCXVubG9ja19idWZmZXIoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jCmluZGV4IDZmMTFhOTZhNGZmYTguLmRmZDBiYmYzMWM5NDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZmF0L21pc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9taXNjLmMKQEAgLTE4Nyw3ICYjNDM7MTg3LDcgQEAgaW50IGV4ZmF0X3VwZGF0ZV9iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzLCBpbnQgc3luYykKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9iaHMgJmFtcDsmYW1wOyBzeW5jOyBpJiM0MzsmIzQzOykgewogCQl3YWl0X29uX2J1ZmZlcihiaHNbaV0pOwotCQlpZiAoIWVyciAmYW1wOyZhbXA7ICFidWZmZXJfdXB0b2RhdGUoYmhzW2ldKSkKJiM0MzsJCWlmICghZXJyICZhbXA7JmFtcDsgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpCiAJCQllcnIgPSAtRUlPOwogCX0KIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jCmluZGV4IGJlNjNmODk0MDJhMzguLjM5MDA1ZWMyM2ZlNWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3hhdHRyLmMKQEAgLTc2OSw3ICYjNDM7NzY5LDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAogCQlpZiAoSVNfU1lOQyhpbm9kZSkpIHsKIAkJCXN5bmNfZGlydHlfYnVmZmVyKG5ld19iaCk7CiAJCQllcnJvciA9IC1FSU87Ci0JCQlpZiAoYnVmZmVyX3JlcShuZXdfYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShuZXdfYmgpKQomIzQzOwkJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IobmV3X2JoKSkKIAkJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuYwppbmRleCAwMmIwNjYyOTkxNjQ5Li5mMzM4ZDZlM2MyOWY2IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmMKQEAgLTQxMyw3ICYjNDM7NDEzLDcgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLAogCQl9CiAJCWlmIChpbm9kZSAmYW1wOyZhbXA7IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7CiAJCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkgewomIzQzOwkJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCQkJZXh0NF9lcnJvcl9pbm9kZV9lcnIoaW5vZGUsIHdoZXJlLCBsaW5lLAogCQkJCQkJICAgICBiaC0mZ3Q7Yl9ibG9ja25yLCBFSU8sCiAJCQkJCSYjMzQ7SU8gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2smIzM0Oyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmMKaW5kZXggOGUyMjU5Nzk5NjE0ZS4uOTU5OTg4MjdmZjAxMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuYwpAQCAtMjAzLDE3ICYjNDM7MjAzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX3NldF9zbmFwX2VycihpbnQgKnNuYXBfZXJyLCBpbnQgZXJyKQogc3RhdGljIHZvaWQgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JYm9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sICZhbXA7YmgpOwomIzQzOwlib29sIHN1Y2Nlc3MgPSBiaW9fZW5kaW9fYmgoYmlvLCAmYW1wO2JoKTsKIAogCUJVRkZFUl9UUkFDRShiaCwgJiMzNDsmIzM0Oyk7Ci0JaWYgKHVwdG9kYXRlKSB7Ci0JCWV4dDRfZGVidWcoJiMzNDslczogQmxvY2sgJWxsZCB1cC10by1kYXRlJiMzNDssCiYjNDM7CWlmIChzdWNjZXNzKSB7CiYjNDM7CQlleHQ0X2RlYnVnKCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdHRlbiYjMzQ7LAogCQkJICAgX19mdW5jX18sIGJoLSZndDtiX2Jsb2NrbnIpOwotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfSBlbHNlIHsKLQkJZXh0NF9kZWJ1ZygmIzM0OyVzOiBCbG9jayAlbGxkIG5vdCB1cC10by1kYXRlJiMzNDssCiYjNDM7CQlleHQ0X2RlYnVnKCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdGUgZmFpbGVkJiMzNDssCiAJCQkgICBfX2Z1bmNfXywgYmgtJmd0O2JfYmxvY2tucik7Ci0JCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQltYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfQogCiAJdW5sb2NrX2J1ZmZlcihiaCk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21tcC5jIGIvZnMvZXh0NC9tbXAuYwppbmRleCA3Y2UzNjE0ODRiMzgyLi40YjE4ZGRlZjQ2OGQ3IDEwMDY0NAotLS0gYS9mcy9leHQ0L21tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbW1wLmMKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIHN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCWJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLAogCQkJYmhfZW5kX3dyaXRlKTsKIAl3YWl0X29uX2J1ZmZlcihiaCk7Ci0JaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkKJiM0MzsJaWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jCmluZGV4IGJlMThmNmI1ODE5YmEuLjRhNGNkMDExMWU0N2EgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L21pc2MuYwpAQCAtMzU2LDcgJiM0MzszNTYsNyBAQCBpbnQgZmF0X3N5bmNfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocykKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9iaHM7IGkmIzQzOyYjNDM7KSB7CiAJCXdhaXRfb25fYnVmZmVyKGJoc1tpXSk7Ci0JCWlmICghZXJyICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaHNbaV0pKQomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmhzW2ldKSkKIAkJCWVyciA9IC1FSU87CiAJfQogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuYwppbmRleCA3OGJiYThjYzEwYjhmLi5lM2UwZGNiMWY1NjczIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2dmczIvbG9nLmMKQEAgLTEwNyw3ICYjNDM7MTA3LDcgQEAgX19hY3F1aXJlcygmYW1wO3NkcC0mZ3Q7c2RfYWlsX2xvY2spCiAJCWdmczJfYXNzZXJ0KHNkcCwgYmQtJmd0O2JkX3RyID09IHRyKTsKIAogCQlpZiAoIWJ1ZmZlcl9idXN5KGJoKSkgewotCQkJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCQlpZiAoIWJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKIAkJCQlsaXN0X21vdmUoJmFtcDtiZC0mZ3Q7YmRfYWlsX3N0X2xpc3QsCiAJCQkJCSAgJmFtcDt0ci0mZ3Q7dHJfYWlsMl9saXN0KTsKIAkJCQljb250aW51ZTsKQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsCiAJCQlhY3RpdmVfY291bnQmIzQzOyYjNDM7OwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpICZhbXA7JmFtcDsKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpICZhbXA7JmFtcDsKIAkJICAgICFjbXB4Y2hnKCZhbXA7c2RwLSZndDtzZF9sb2dfZXJyb3IsIDAsIC1FSU8pKQogCQkJZ2ZzMl9pb19lcnJvcl9iaChzZHAsIGJoKTsKIAkJLyoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggNmRhYmU3M2FkNzkwZC4uNzQ0MGU1YjcyZjhhZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQgZ2ZzMl9waW4oc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAlpZiAodGVzdF9zZXRfYnVmZmVyX3Bpbm5lZChiaCkpCiAJCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7Ci0JaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQomIzQzOwlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkKIAkJZ2ZzMl9pb19lcnJvcl9iaChzZHAsIGJoKTsKIAliZCA9IGJoLSZndDtiX3ByaXZhdGU7CiAJLyogSWYgdGhpcyBidWZmZXIgaXMgaW4gdGhlIEFJTCBhbmQgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuCkBAIC0xNzksNiAmIzQzOzE3OSw4IEBAIHN0YXRpYyB2b2lkIGdmczJfZW5kX2xvZ193cml0ZV9iaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlkbyB7CiAJCWlmIChlcnJvcikKIAkJCW1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpOwogCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJbmV4dCA9IGJoLSZndDtiX3RoaXNfcGFnZTsKIAkJc2l6ZSAtPSBiaC0mZ3Q7Yl9zaXplOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggMzAyOWNiNmY2ZDY0MC4uZWJmNmJhNThmZjRkMCAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC0zMiwxNCAmIzQzOzMyLDE0IEBACiBzdGF0aWMgdm9pZCBqb3VybmFsX2VuZF9idWZmZXJfaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlib29sIHVwdG9kYXRlID0gYmlvX2VuZGlvX2JoKGJpbywgJmFtcDtiaCk7CiYjNDM7CWJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sICZhbXA7YmgpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb3JpZ19iaCA9IGJoLSZndDtiX3ByaXZhdGU7CiAKIAlCVUZGRVJfVFJBQ0UoYmgsICYjMzQ7JiMzNDspOwotCWlmICh1cHRvZGF0ZSkKLQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CWlmIChzdWNjZXNzKQomIzQzOwkJY2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKIAllbHNlCi0JCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQltYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJaWYgKG9yaWdfYmgpIHsKIAkJY2xlYXJfYW5kX3dha2VfdXBfYml0KEJIX1NoYWRvdywgJmFtcDtvcmlnX2JoLSZndDtiX3N0YXRlKTsKIAl9CkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBpbnQgam91cm5hbF93YWl0X29uX2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLAogCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiAJd2FpdF9vbl9idWZmZXIoYmgpOwogCi0JaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkKJiM0MzsJaWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKQogCQlyZXQgPSAtRUlPOwogCXB1dF9iaChiaCk7ICAgICAgICAgICAgLyogT25lIGZvciBnZXRibGsoKSAqLwogCkBAIC0zMzAsOSAmIzQzOzMzMCw5IEBAIHN0YXRpYyBfX3UzMiBqYmQyX2NoZWNrc3VtX2RhdGEoX191MzIgY3JjMzJfc3VtLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogCWNoYXIgKmFkZHI7CiAJX191MzIgY2hlY2tzdW07CiAKLQlhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC0mZ3Q7Yl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7CiYjNDM7CWFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTsKIAljaGVja3N1bSA9IGNyYzMyX2JlKGNyYzMyX3N1bSwgYWRkciwgYmgtJmd0O2Jfc2l6ZSk7Ci0Ja3VubWFwX2xvY2FsKGFkZHIpOwomIzQzOwlrdW5tYXBfbG9jYWxfYmgoYmgsIGFkZHIpOwogCiAJcmV0dXJuIGNoZWNrc3VtOwogfQpAQCAtMzU3LDEwICYjNDM7MzU3LDEwIEBAIHN0YXRpYyB2b2lkIGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0KGpvdXJuYWxfdCAqaiwgam91cm5hbF9ibG9ja190YWdfdCAqdGFnLAogCQlyZXR1cm47CiAKIAlzZXEgPSBjcHVfdG9fYmUzMihzZXF1ZW5jZSk7Ci0JYWRkciA9IGttYXBfbG9jYWxfZm9saW8oYmgtJmd0O2JfZm9saW8sIGJoX29mZnNldChiaCkpOwomIzQzOwlhZGRyID0ga21hcF9sb2NhbF9iaChiaCk7CiAJY3N1bTMyID0gamJkMl9jaGtzdW0oai0mZ3Q7al9jc3VtX3NlZWQsIChfX3U4ICopJmFtcDtzZXEsIHNpemVvZihzZXEpKTsKIAljc3VtMzIgPSBqYmQyX2Noa3N1bShjc3VtMzIsIGFkZHIsIGJoLSZndDtiX3NpemUpOwotCWt1bm1hcF9sb2NhbChhZGRyKTsKJiM0MzsJa3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTsKIAogCWlmIChqYmQyX2hhc19mZWF0dXJlX2NzdW0zKGopKQogCQl0YWczLSZndDt0X2NoZWNrc3VtID0gY3B1X3RvX2JlMzIoY3N1bTMyKTsKQEAgLTgzNCw3ICYjNDM7ODM0LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbCkKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwogCQljb25kX3Jlc2NoZWQoKTsKIAotCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKQomIzQzOwkJaWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKQogCQkJZXJyID0gLUVJTzsKIAkJamJkMl91bmZpbGVfbG9nX2JoKGJoKTsKIAkJc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQmIzQzOyYjNDM7OwpAQCAtODc3LDcgJiM0Mzs4NzcsNyBAQCB2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKQogCQl3YWl0X29uX2J1ZmZlcihiaCk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCi0JCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpCiYjNDM7CQlpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpCiAJCQllcnIgPSAtRUlPOwogCiAJCUJVRkZFUl9UUkFDRShiaCwgJiMzNDtwaDU6IGNvbnRyb2wgYnVmZmVyIHdyaXRlb3V0IGRvbmU6IHVuZmlsZSYjMzQ7KTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggMDllZmEzMzc2NDllMi4uNzJlOGNjYmY3ZGU0ZSAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTMyNyw4ICYjNDM7MzI3LDYgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sCiB7CiAJaW50IGRvX2VzY2FwZSA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmg7Ci0Jc3RydWN0IGZvbGlvICpuZXdfZm9saW87Ci0JdW5zaWduZWQgaW50IG5ld19vZmZzZXQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9pbiA9IGpoMmJoKGpoX2luKTsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi0mZ3Q7dF9qb3VybmFsOwogCkBAIC0zNDgsMjQgJiM0MzszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sCiAJLyoga2VlcCBzdWJzZXF1ZW50IGFzc2VydGlvbnMgc2FuZSAqLwogCWF0b21pY19zZXQoJmFtcDtuZXdfYmgtJmd0O2JfY291bnQsIDEpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGUKJiM0MzsJICogc2hhZG93IGJ1ZmZlciBnZXRzIG5vIGZvbGlvIGF0IGFsbDogYl9mb2xpbyBzdGF5cyBOVUxMIGZyb20gdGhlCiYjNDM7CSAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdAomIzQzOwkgKiB0aGUgc2xhYiBmb2xpbyBpbnN0ZWFkIHdvdWxkIGhhbmQgaXRzIG92ZXJsb2FkZWQgLSZndDttYXBwaW5nIHRvCiYjNDM7CSAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLgomIzQzOwkgKi8KJiM0MzsKIAlzcGluX2xvY2soJmFtcDtqaF9pbi0mZ3Q7Yl9zdGF0ZV9sb2NrKTsKIAkvKgogCSAqIElmIGEgbmV3IHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGRvbmUgYSBidWZmZXIgY29weS1vdXQsIHRoZW4KIAkgKiB3ZSB1c2UgdGhhdCB2ZXJzaW9uIG9mIHRoZSBkYXRhIGZvciB0aGUgY29tbWl0LgogCSAqLwogCWlmIChqaF9pbi0mZ3Q7Yl9mcm96ZW5fZGF0YSkgewotCQluZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKLQkJbmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKIAkJZG9fZXNjYXBlID0gamJkMl9kYXRhX25lZWRzX2VzY2FwaW5nKGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKIAkJaWYgKGRvX2VzY2FwZSkKIAkJCWpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tJmd0O2JfZnJvemVuX2RhdGEpOwomIzQzOwkJbmV3X2JoLSZndDtiX2RhdGEgPSBqaF9pbi0mZ3Q7Yl9mcm96ZW5fZGF0YTsKIAl9IGVsc2UgewomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGJoX2luLSZndDtiX2ZvbGlvOwomIzQzOwkJdW5zaWduZWQgaW50IG9mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgYmhfaW4tJmd0O2JfZGF0YSk7CiAJCWNoYXIgKnRtcDsKIAkJY2hhciAqbWFwcGVkX2RhdGE7CiAKLQkJbmV3X2ZvbGlvID0gYmhfaW4tJmd0O2JfZm9saW87Ci0JCW5ld19vZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8obmV3X2ZvbGlvLCBiaF9pbi0mZ3Q7Yl9kYXRhKTsKLQkJbWFwcGVkX2RhdGEgPSBrbWFwX2xvY2FsX2ZvbGlvKG5ld19mb2xpbywgbmV3X29mZnNldCk7CiYjNDM7CQltYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7CiAJCS8qCiAJCSAqIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBpZiBkYXRhIGFscmVhZHkgd2FzbiYjMzk7dCBmcm96ZW4uIERvCiAJCSAqIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciBlc2NhcGluZywgYXMgdGhlIHRyaWdnZXIgbWF5IG1vZGlmeQpAQCAtMzc5LDggJiM0MzszODQsMTAgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sCiAJCS8qCiAJCSAqIERvIHdlIG5lZWQgdG8gZG8gYSBkYXRhIGNvcHk/CiAJCSAqLwotCQlpZiAoIWRvX2VzY2FwZSkKJiM0MzsJCWlmICghZG9fZXNjYXBlKSB7CiYjNDM7CQkJZm9saW9fc2V0X2JoKG5ld19iaCwgZm9saW8sIG9mZnNldCk7CiAJCQlnb3RvIGVzY2FwZV9kb25lOwomIzQzOwkJfQogCiAJCXNwaW5fdW5sb2NrKCZhbXA7amhfaW4tJmd0O2Jfc3RhdGVfbG9jayk7CiAJCXRtcCA9IGttYWxsb2MoYmhfaW4tJmd0O2Jfc2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwpAQCAtMzkxLDcgJiM0MzszOTgsNyBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiwKIAkJfQogCiAJCWpoX2luLSZndDtiX2Zyb3plbl9kYXRhID0gdG1wOwotCQltZW1jcHlfZnJvbV9mb2xpbyh0bXAsIG5ld19mb2xpbywgbmV3X29mZnNldCwgYmhfaW4tJmd0O2Jfc2l6ZSk7CiYjNDM7CQltZW1jcHlfZnJvbV9mb2xpbyh0bXAsIGZvbGlvLCBvZmZzZXQsIGJoX2luLSZndDtiX3NpemUpOwogCQkvKgogCQkgKiBUaGlzIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnksIGFzIHdlJiMzOTtyZSB1c2luZyBmcm96ZW4KIAkJICogZGF0YSBmb3IgdGhlIGVzY2FwaW5nLCBidXQgaXQga2VlcHMgY29uc2lzdGVuY3kgd2l0aApAQCAtNDAwLDEzICYjNDM7NDA3LDExIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLAogCQlqaF9pbi0mZ3Q7Yl9mcm96ZW5fdHJpZ2dlcnMgPSBqaF9pbi0mZ3Q7Yl90cmlnZ2VyczsKIAogY29weV9kb25lOgotCQluZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKLQkJbmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKIAkJamJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi0mZ3Q7Yl9mcm96ZW5fZGF0YSk7CiYjNDM7CQluZXdfYmgtJmd0O2JfZGF0YSA9IGpoX2luLSZndDtiX2Zyb3plbl9kYXRhOwogCX0KIAogZXNjYXBlX2RvbmU6Ci0JZm9saW9fc2V0X2JoKG5ld19iaCwgbmV3X2ZvbGlvLCBuZXdfb2Zmc2V0KTsKIAluZXdfYmgtJmd0O2Jfc2l6ZSA9IGJoX2luLSZndDtiX3NpemU7CiAJbmV3X2JoLSZndDtiX2JkZXYgPSBqb3VybmFsLSZndDtqX2RldjsKIAluZXdfYmgtJmd0O2JfYmxvY2tuciA9IGJsb2NrbnI7CkBAIC04ODEsNyAmIzQzOzg4Niw3IEBAIGludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcykKIAkJICogVXBkYXRlIGpfZmNfb2ZmIHNvIGpiZDJfZmNfcmVsZWFzZV9idWZzIGNhbiByZWxlYXNlIHJlbWFpbgogCQkgKiBidWZmZXIgaGVhZC4KIAkJICovCi0JCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpIHsKJiM0MzsJCWlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSkgewogCQkJam91cm5hbC0mZ3Q7al9mY19vZmYgPSBpICYjNDM7IDE7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IDVjYzdkMDk3YjJhYzguLjg1ZDg0ZDkwOWY3ODUgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTkyMCw3ICYjNDM7OTIwLDcgQEAgc3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCkKIAljaGFyICpzb3VyY2U7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpoMmJoKGpoKTsKIAotCUpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCAmIzM0O1Bvc3NpYmxlIElPIGZhaWx1cmUuXG4mIzM0Oyk7CiYjNDM7CUpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCAmIzM0O0J1ZmZlciBub3QgdXB0b2RhdGUhXG4mIzM0Oyk7CiAJc291cmNlID0ga21hcF9sb2NhbF9mb2xpbyhiaC0mZ3Q7Yl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7CiAJLyogRmlyZSBkYXRhIGZyb3plbiB0cmlnZ2VyIGp1c3QgYmVmb3JlIHdlIGNvcHkgdGhlIGRhdGEgKi8KIAlqYmQyX2J1ZmZlcl9mcm96ZW5fdHJpZ2dlcihqaCwgc291cmNlLCBqaC0mZ3Q7Yl90cmlnZ2Vycyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYwppbmRleCA3YmZlMzc3YWYyZGZjLi43MzNjZWRhNzljYTFmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKQEAgLTY2LDEyICYjNDM7NjYsMTQgQEAgaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCiAJd2FpdF9vbl9idWZmZXIoYmgpOwogCi0JaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJaWYgKCFidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoY2ksIGJoKTsKIAl9IGVsc2UgewotCQkvKiBXZSBkb24mIzM5O3QgbmVlZCB0byByZW1vdmUgdGhlIGNsdXN0ZXJlZCB1cHRvZGF0ZQotCQkgKiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBiaCBhcyBpdCYjMzk7cyBub3QgbWFya2VkIGxvY2FsbHkKLQkJICogdXB0b2RhdGUuICovCiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGJ1ZmZlciBzdGlsbCBob2xkcyB3aGF0IHdlIHRyaWVkIHRvIHdyaXRlLCBidXQgaXQgZGlkCiYjNDM7CQkgKiBub3QgcmVhY2ggdGhlIGRpc2ssIHNvIGRvbiYjMzk7dCBhZHZlcnRpc2UgaXQgdG8gdGhlIGNsdXN0ZXIKJiM0MzsJCSAqIGFzIHVwIHRvIGRhdGUuCiYjNDM7CQkgKi8KIAkJcmV0ID0gLUVJTzsKIAkJbWxvZ19lcnJubyhyZXQpOwogCX0KQEAgLTQ0Niw3ICYjNDM7NDQ4LDcgQEAgaW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAogCXdhaXRfb25fYnVmZmVyKGJoKTsKIAotCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgewomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewogCQlyZXQgPSAtRUlPOwogCQltbG9nX2Vycm5vKHJldCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGQ4YWZiYzFhNzZiYjguLmVhNjgwMmQ4OTRjMmIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTY3NiwxOSAmIzQzOzY3NiwyMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwKIAkJbWxvZyhNTF9FUlJPUiwgJiMzNDtnaXZpbmcgbWUgYSBidWZmZXIgdGhhdCYjMzk7cyBub3QgdXB0b2RhdGUhXG4mIzM0Oyk7CiAJCW1sb2coTUxfRVJST1IsICYjMzQ7Yl9ibG9ja25yPSVsbHUsIGJfc3RhdGU9MHglbHhcbiYjMzQ7LAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtJmd0O2JfYmxvY2tuciwgYmgtJmd0O2Jfc3RhdGUpOwotCiYjNDM7CX0KJiM0MzsJLyoKJiM0MzsJICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsCiYjNDM7CSAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLgomIzQzOwkgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3IKJiM0MzsJICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXIKJiM0MzsJICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmUKJiM0MzsJICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YQomIzQzOwkgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZAomIzQzOwkgKiBmdXJ0aGVyIGRhbWFnZS4KJiM0MzsJICovCiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCWxvY2tfYnVmZmVyKGJoKTsKLQkJLyoKLQkJICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsCi0JCSAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLgotCQkgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3IKLQkJICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXIKLQkJICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmUKLQkJICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YQotCQkgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZAotCQkgKiBmdXJ0aGVyIGRhbWFnZS4KLQkJICovCi0JCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJCXJldHVybiBvY2ZzMl9lcnJvcihvc2ItJmd0O3NiLCAmIzM0O0EgcHJldmlvdXMgYXR0ZW1wdCB0byAmIzM0OwogCQkJCQkmIzM0O3dyaXRlIHRoaXMgYnVmZmVyIGhlYWQgZmFpbGVkXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmMKaW5kZXggMWQ5MTVlZjcyMTE5Zi4uYmMzNzAyOWE0YWZiMSAxMDA2NDQKLS0tIGEvZnMvb21mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29tZnMvaW5vZGUuYwpAQCAtMTQ1LDcgJiM0MzsxNDUsNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJaWYgKHdhaXQpIHsKIAkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKQogCQkJc3luY19mYWlsZWQgPSAxOwogCX0KIApAQCAtMTU5LDcgJiM0MzsxNTksNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAkJbWFya19idWZmZXJfZGlydHkoYmgyKTsKIAkJaWYgKHdhaXQpIHsKIAkJCXN5bmNfZGlydHlfYnVmZmVyKGJoMik7Ci0JCQlpZiAoYnVmZmVyX3JlcShiaDIpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaDIpKQomIzQzOwkJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgyKSkKIAkJCQlzeW5jX2ZhaWxlZCA9IDE7CiAJCX0KIAkJYnJlbHNlKGJoMik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKaW5kZXggZmQyYzcxMTVjMDU0Mi4uMjBiOGZjYTFhYmZhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtNTksMTAgJiM0Mzs1OSw3IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlOwogc3RydWN0IGJ1ZmZlcl9oZWFkIHsKIAl1bnNpZ25lZCBsb25nIGJfc3RhdGU7CQkvKiBidWZmZXIgc3RhdGUgYml0bWFwIChzZWUgYWJvdmUpICovCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3RoaXNfcGFnZTsvKiBjaXJjdWxhciBsaXN0IG9mIHBhZ2UmIzM5O3MgYnVmZmVycyAqLwotCXVuaW9uIHsKLQkJc3RydWN0IHBhZ2UgKmJfcGFnZTsJLyogdGhlIHBhZ2UgdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi8KLQkJc3RydWN0IGZvbGlvICpiX2ZvbGlvOwkvKiB0aGUgZm9saW8gdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi8KLQl9OwomIzQzOwlzdHJ1Y3QgZm9saW8gKmJfZm9saW87CQkvKiB0aGUgZm9saW8gdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi8KIAogCXNlY3Rvcl90IGJfYmxvY2tucjsJCS8qIHN0YXJ0IGJsb2NrIG51bWJlciAqLwogCXNpemVfdCBiX3NpemU7CQkJLyogc2l6ZSBvZiBtYXBwaW5nICovCkBAIC0xNzIsNyAmIzQzOzE2OSwzNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWZmZXJfdXB0b2RhdGUoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJoX29mZnNldChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZykoYmgpLSZndDtiX2RhdGEgJmFtcDsgKHBhZ2Vfc2l6ZShiaC0mZ3Q7Yl9wYWdlKSAtIDEpOwomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGJoKS0mZ3Q7Yl9kYXRhICZhbXA7IChmb2xpb19zaXplKGJoLSZndDtiX2ZvbGlvKSAtIDEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBrbWFwX2xvY2FsX2JoIC0gTWFwIHRoZSBkYXRhIG9mIGEgYnVmZmVyLgomIzQzOyAqIEBiaDogVGhlIGJ1ZmZlci4KJiM0MzsgKgomIzQzOyAqIEJ1ZmZlcnMgdXN1YWxseSBsaXZlIGluIHRoZSBwYWdlIGNhY2hlLCBidXQgYSBmZXcgYXJlIGJ1aWx0IG92ZXIgbWVtb3J5CiYjNDM7ICogd2hpY2ggaXMgbm90LiAgVGhvc2UgY2Fycnkgbm8gZm9saW8gYW5kIGJfZGF0YSBpcyBhbHJlYWR5IGEga2VybmVsIGFkZHJlc3MKJiM0MzsgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoCiYjNDM7ICoga3VubWFwX2xvY2FsX2JoKCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJiMzOTtzIGRhdGEuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkICprbWFwX2xvY2FsX2JoKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiYjNDM7ewomIzQzOwlpZiAoIWJoLSZndDtiX2ZvbGlvKQomIzQzOwkJcmV0dXJuIGJoLSZndDtiX2RhdGE7CiYjNDM7CXJldHVybiBrbWFwX2xvY2FsX2ZvbGlvKGJoLSZndDtiX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICoga3VubWFwX2xvY2FsX2JoIC0gVW5tYXAgdGhlIGRhdGEgb2YgYSBidWZmZXIuCiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyLgomIzQzOyAqIEBhZGRyOiBUaGUgYWRkcmVzcyByZXR1cm5lZCBieSBrbWFwX2xvY2FsX2JoKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKQomIzQzO3sKJiM0MzsJaWYgKGJoLSZndDtiX2ZvbGlvKQomIzQzOwkJa3VubWFwX2xvY2FsKGFkZHIpOwogfQogCiAvKiBJZiB3ZSAqa25vdyogcGFnZS0mZ3Q7cHJpdmF0ZSByZWZlcnMgdG8gYnVmZmVyX2hlYWRzICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCdWZmZXIgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyB0d2Vha2luZyBidWZmZXJfaGVhZCBoYW5kbGluZyBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHplcm9pbmcgaW4gb24gYGJ1ZmZlcl91cHRvZGF0ZWAgYW5kIGBidWZmZXJfd3JpdGVfaW9fZXJyb3JgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3cml0ZSBlcnJvcnMgYXJlIG1hbmFnZWQgYW5kIGNoZWNrZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgcmVncmVzc2lvbnMuCgpUaGlzIGFsc28gc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYGttYXBfbG9jYWxfYmhgIGFuZCBga3VubWFwX2xvY2FsX2JoYCBhbmQgdXNpbmcgdGhlbSBpbiBgZnMvamJkMi9jb21taXQuY2AuIFRoZSBjaGFuZ2VzIGFsc28gaW5jbHVkZSBtb2RpZnlpbmcgYGZzL2piZDIvam91cm5hbC5jYCB0byBoYW5kbGUgYGJfZnJvemVuX2RhdGFgIGFuZCBjaGFuZ2luZyBgZnMvYnVmZmVyLmNgIHRvIGhhbmRsZSB0aGUgYGJoLSZndDtiX2ZvbGlvID09IE5VTExgIGNhc2UgaW4gYF9fYmhfc3VibWl0YCBieSB1c2luZyBgYmlvX2FkZF92aXJ0X25vZmFpbGAgaW5zdGVhZCBvZiBgYmlvX2FkZF9mb2xpb19ub2ZhaWxgLiBUaGF0JiMzOTtzIGEgc2hpZnQgaW4gaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGJsb2NrIGxheWVyLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIHRvdWNoaW5nIHRoZSBWRlMsIGJsb2NrIGxheWVyLCBhbmQgZmlsZXN5c3RlbXMsIHRoaXMgaXMgYSBjb3JlIGNoYW5nZS4gVGhhdCBtZWFucyBpdCBuZWVkcyB0byBiZSBmdXp6ZWQgaGVhdmlseS4gSXQmIzM5O3MgaW1wYWN0aW5nIGNvZGUgYWNyb3NzIGEgYnVuY2ggb2YgZmlsZXN5c3RlbXMg4oCTIGBmcy9idWZmZXIuY2AsIGBmcy9qYmQyL2AsIGBmcy9leHQ0L2AsIGBmcy9nZnMyL2AsIGBmcy9vY2ZzMi9gLCBgZnMvZmF0L2AsIGBmcy9leGZhdC9gLCBgZnMvYWRmcy9gLCBgZnMvZXh0Mi9gLCBhbmQgYGZzL29tZnMvYC4KClRvIHJlZmluZSBteSBmdXp6aW5nIGFwcHJvYWNoLCBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgdGhhdCBleHBvc2UgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgZm9jdXMgc3ltYm9scyBpbiB0aGVzZSBmaWxlcy4gSSBjYW4gc2VlIGBfX2JoX3N1Ym1pdGAgaW4gYGZzL2J1ZmZlci5jYCwgYGJoX2VuZF93cml0ZWAsIGBiaF9lbmRfYXN5bmNfd3JpdGVgLCBgbW1iX3N5bmNgLCBhbmQgYF9fYmZvcmdldGAgYXJlIGFsc28gaW4gYGZzL2J1ZmZlci5jYC4gT3ZlciBpbiBgZnMvamJkMi9qb3VybmFsLmNgIEkgc2VlIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYCBhbmQgYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gIGlzIGluIGBmcy9qYmQyL2NvbW1pdC5jYC4gSW4gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AsIEkgc2VlIGBleHQ0X2VuZF9idWZmZXJfaW9fc3luY2AsIGFuZCBpbiBgZnMvZ2ZzMi9sb3BzLmNgIEkgc2VlIGBnZnMyX2VuZF9sb2dfd3JpdGVfYmhgLgoKSSBuZWVkIHRvIGRpdmUgaW50byB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJsb2NrIGxheWVyIG5vdy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQmIzM5O3MgdmlzaWJsZSBhdCB0aGUgaW50ZXJmYWNlIGFuZCB3aWxsIHRyeSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3IgYXJlIGdsb2JhbCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIHRlc3RlZCBhbmQgd2hhdCBtYXkgbmVlZCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9MTkxPUVYUE9SVF9TWU1CT0woYmhfZW5kX3JlYWQpO1xuLS1cbmZzL2J1ZmZlci5jLTE5OS0gKi9cbmZzL2J1ZmZlci5jOjIwMDp2b2lkIGJoX2VuZF93cml0ZShzdHJ1Y3QgYmlvICpiaW8pXG5mcy9idWZmZXIuYy0yMDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTgwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipUaGUgR2xvYmFsIE5hdHVyZSBvZiBgYmhfZW5kX3dyaXRlYCBhbmQgSW1wbGljYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBmYWN0IHRoYXQgYGJoX2VuZF93cml0ZWAgaXMgYSBnbG9iYWwgdmFyaWFibGUgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBJIG5lZWQgdG8gY29uc2lkZXIgdmVyeSBjYXJlZnVsbHkuIEZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUsIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLiBHbG9iYWwgdmFyaWFibGVzLCB3aGlsZSBzb21ldGltZXMgY29udmVuaWVudCBmb3IgcXVpY2sgYWNjZXNzLCBpbmhlcmVudGx5IGludHJvZHVjZSBzZXZlcmFsIGlzc3VlcywgcGFydGljdWxhcmx5IGluIGNvbXBsZXgsIG11bHRpLXRocmVhZGVkIG9yIGRpc3RyaWJ1dGVkIHN5c3RlbXMgbGlrZSB0aGUgb25lcyBJIHR5cGljYWxseSBkZWFsIHdpdGguCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gQSBnbG9iYWwgbGlrZSB0aGlzIGltcGxpZXMgdGhhdCBhbnkgcGFydCBvZiB0aGUgc3lzdGVtIGNhbiBwb3RlbnRpYWxseSByZWFkIGFuZCBtb2RpZnkgdGhlIHN0YXRlIHJlcHJlc2VudGVkIGJ5IHRoaXMgdmFyaWFibGUuIFRoaXMgY2FuIG1ha2UgZGVidWdnaW5nIHNpZ25pZmljYW50bHkgaGFyZGVyIGJlY2F1c2UgeW91IGhhdmUgdG8gdHJhY2UgYWxsIHBvc3NpYmxlIGFjY2VzcyBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZhbHVlIGNoYW5nZXMuIEl0IGFsc28gaW5jcmVhc2VzIHRoZSByaXNrIG9mIHN1YnRsZSBidWdzIHRoYXQgYXJlIGhhcmQgdG8gcmVwcm9kdWNlLiBJZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBtb2RpZnlpbmcgYGJoX2VuZF93cml0ZWAgd2l0aG91dCBwcm9wZXIgc3luY2hyb25pemF0aW9uLCByYWNlIGNvbmRpdGlvbnMgYW5kIGRhdGEgY29ycnVwdGlvbiBhcmUgYSBzZXJpb3VzIHBvc3NpYmlsaXR5LCBhbmQgdGhvc2UgdHlwZXMgb2YgYnVncyBjYW4gYmUgcmVhbGx5IGRpZmZpY3VsdCB0byB0cmFjayBkb3duLgoKSSYjMzk7ZCB3YW50IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYGJoX2VuZF93cml0ZWAgcmVwcmVzZW50cy4gSXMgaXQgYSBjb3VudGVyLCBhIGZsYWcsIGEgcG9pbnRlciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgZ3VhcmFudGVlcywgaWYgYW55LCBhcmUgdGhlcmUgYWJvdXQgYXRvbWljIGFjY2VzcyBvciB0aHJlYWQgc2FmZXR5PyBJJiMzOTtkIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB2ZXJ5IGNsb3NlbHkgdG8gc2VlIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2hlcmUqIGl0JiMzOTtzIHVzZWQuIElzIGl0IGNvbmZpbmVkIHRvIGEgc2luZ2xlIG1vZHVsZSwgb3IgZG9lcyBpdCBjcm9zcyBtb2R1bGUgYm91bmRhcmllcywgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHk/IElmIGl0IGlzIGEgbmVjZXNzYXJ5IGdsb2JhbCwgSSYjMzk7ZCB3YW50IHRvIGNvbnNpZGVyIHN1cnJvdW5kaW5nIGl0IHdpdGggYWNjZXNzIGZ1bmN0aW9ucywgcG90ZW50aWFsbHkgcHJvdmlkaW5nIGEgaGlnaGVyIGxldmVsIG9mIGFic3RyYWN0aW9uLCBtYXliZSBldmVuIHdpdGggc29tZSBpbmhlcmVudCBsb2NraW5nLiBUaGlzIGNvdWxkIGhlbHAgbWl0aWdhdGUgdGhlIHByb2JsZW1zLCBidXQgaXTigJlzIHN0aWxsIG5vdCBhIHBlcmZlY3Qgc29sdXRpb24uCgpVbHRpbWF0ZWx5LCBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgd2l0aCBhIGhlYWx0aHkgZG9zZSBvZiBza2VwdGljaXNtLiBUaGUgdXNlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIGxpa2UgYGJoX2VuZF93cml0ZWAgc2hvdWxkIHRyaWdnZXIgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIHRvIGVuc3VyZSBpdCYjMzk7cyB0cnVseSBqdXN0aWZpZWQgYW5kIHRvIG1pdGlnYXRlIHRoZSByaXNrcyBpdCBpbnRyb2R1Y2VzLiBBIGNhcmVmdWwgcmVmYWN0b3JpbmcgdG8gcmVkdWNlIHRoZSBzY29wZSBvciByZW1vdmUgdGhlIGRlcGVuZGVuY3kgc2hvdWxkIGJlIGEga2V5IG9iamVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX2FzeW5jX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9Mzg0PXN0YXRpYyB2b2lkIGJoX2VuZF9hc3luY19yZWFkKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9idWZmZXIuYy00MjUtICovXG5mcy9idWZmZXIuYzo0MjY6dm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxuZnMvYnVmZmVyLmMtNDI3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc2NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gQXN5bmNocm9ub3VzIFdyaXRlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiaF9lbmRfYXN5bmNfd3JpdGVgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBpdCYjMzk7cyAqZ2xvYmFsKi4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIEEgZ2xvYmFsIGZ1bmN0aW9uIGxpa2UgdGhpcyB1c3VhbGx5IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBhIGNvcmUgb3IgY3JpdGljYWwgb3BlcmF0aW9uIHRoYXQmIzM5O3MgbmVlZGVkIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbSwgbGlrZWx5IHJlbGF0aW5nIHRvIHRoZSBjb21wbGV0aW9uIG9mIGFzeW5jaHJvbm91cyBibG9jayBkZXZpY2Ugd3JpdGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaXRzIHVzZTsgd2hhdCYjMzk7cyBkZXBlbmRlbnQgb24gaXRzIGNvcnJlY3QgZXhlY3V0aW9uPyBBbmQsIG1vcmUgdG8gdGhlIHBvaW50LCB3aGF0IGRlc2lnbiBjb25zdHJhaW50cyBsZWQgdG8gdGhlIGNob2ljZSBvZiBnbG9iYWwgc2NvcGU/IFdhcyBpdCBkZWVtZWQgbmVjZXNzYXJ5IGZvciBlZmZpY2llbmN5LCBvciBwZXJoYXBzIGEgbGVnYWN5IGRlY2lzaW9uPyBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3doeSYjMzQ7IGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3Igb3B0aW1pemF0aW9ucy4gSSBoYXZlIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIGFyY2hpdGVjdHVyZSB0byBzZWUgaXRzIGNhbGxpbmcgbG9jYXRpb25zLiBHbG9iYWwgc2NvcGUgaXMgaW5oZXJlbnRseSB0cmlja3kgd2l0aCBjb25jdXJyZW50IHByb2dyYW1taW5nLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbnNpZGVyIGlmIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBpdCBkb2VzIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGFzeW5jIHdyaXRlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYz0yODc9c3RhdGljIGlubGluZSB2b2lkIGpiZDJfZGF0YV9kb19lc2NhcGUoY2hhciAqZGF0YSlcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0zMjItXG5mcy9qYmQyL2pvdXJuYWwuYzozMjM6aW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG5mcy9qYmQyL2pvdXJuYWwuYy0zMjQtXHRcdFx0XHQgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1ldGFkYXRhIEJ1ZmZlciBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAuLi4gaXQmIzM5O3MgYSBnbG9iYWwsIGlzbiYjMzk7dCBpdD8gTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSBhbG9uZyB0aGUgbGluZXMgb2YgaG93IHRoYXQgaW1wYWN0cyBjb25jdXJyZW5jeSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoZSBqb3VybmFsIHdyaXRlIHBhdGguIFRoaW5raW5nIGFib3V0IGl0cyBzY29wZSwgdGhhdCBnbG9iYWwgbmF0dXJlIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYW55IGFjY2VzcyB0byBpdCBuZWVkcyBjYXJlZnVsIHN5bmNocm9uaXphdGlvbiwgcG90ZW50aWFsbHkgdGhyb3VnaCBtdXRleGVzIG9yIHNwaW5sb2NrcywgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IEkvTyBsb2FkIG9yIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGdsb2JhbCBidWZmZXIgY291bGQgYmVjb21lIGEgcG9pbnQgb2YgY29udGVudGlvbiBhbmQgc2VyaWFsaXphdGlvbiB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiBXaGF04oCZcyB0aGUgbG9ja2luZyBzdHJhdGVneT8gSXMgaXQgZmluZS1ncmFpbmVkIGVub3VnaCwgb3IgY291bGQgd2UgYmUgZmFjaW5nIHBlcmZvcm1hbmNlIGNsaWZmcyBhcyB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBpbmNyZWFzZXM/IEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyDigJMgaXMgdGhlcmUgYSBiYWxhbmNlIHRvIGJlIHN0cnVjayBiZXR3ZWVuIHRoZSBvdmVyaGVhZCBvZiBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSB0aHJvdWdocHV0IG9mIG1ldGFkYXRhIHdyaXRlcz8gVGhpcyBnbG9iYWwgdmFyaWFibGUgcmVhbGx5IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2sgZHVyaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2piZDIvY29tbWl0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamJkMi9jb21taXQuYz0zNDg9c3RhdGljIHZvaWQgamJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4tLVxuZnMvamJkMi9jb21taXQuYy0zNzUtICovXG5mcy9qYmQyL2NvbW1pdC5jOjM3Njp2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxuZnMvamJkMi9jb21taXQuYy0zNzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU5NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYC4gRmlyc3QsIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIExldCBtZSBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYSBmZXcga25vd24gZXhhbXBsZXMsIGxldCYjMzk7cyBzZWUsIHdoYXQgYWJvdXQgYGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jYCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYD8gQWgsIHRoYXQmIzM5O3MgYHN0YXRpY2AuIEFscmlnaHQuIE5leHQsIEkmIzM5O2xsIGV4YW1pbmUgYGdmczJfZW5kX2xvZ193cml0ZV9iaGAgaW4gYGZzL2dmczIvbG9wcy5jYOKAlHRoYXQgb25lJiMzOTtzIGFsc28gYHN0YXRpY2AuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgYSBzZW5zZSBvZiB3aGljaCBmaWxlc3lzdGVtcyBtaWdodCBiZSBpbiBwbGF5LiBJJiMzOTttIHNlZWluZyBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0pCRDJgLCBgQ09ORklHX0dGUzJfRlNgLCBgQ09ORklHX09DRlMyX0ZTYCwgYENPTkZJR19GQVRfRlNgLCBgQ09ORklHX0VYRkFUX0ZTYCwgYENPTkZJR19BREZTX0ZTYCwgYENPTkZJR19FWFQyX0ZTYCwgYW5kIGBDT05GSUdfT01GU19GU2AuIFJpZ2h0LCBzbyB0aGlzIGxpc3Qgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGljaCBmaWxlc3lzdGVtcyBtaWdodCBsZXZlcmFnZSB0aGUgam91cm5hbC4KCkZpbmFsbHksIEkgdGhpbmsgSSYjMzk7bGwgZ28gYmFjayB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBmcy9qYmQyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uLCBvciBqb3VybmFsIGNvbW1pdHMgaW4gZ2VuZXJhbCwgYXJlIGNvbmZpZ3VyZWQuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBnbG9iYWwgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBKQkQyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2piZDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvamJkMi9LY29uZmlnOjI6Y29uZmlnIEpCRDJcbmZzL2piZDIvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5mcy9qYmQyL0tjb25maWctMTktXG5mcy9qYmQyL0tjb25maWc6MjA6Y29uZmlnIEpCRDJfREVCVUdcbmZzL2piZDIvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7SkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIEZpbGVzeXN0ZW0gTW9kdWxlIERlcGVuZGVuY3kgQ2hlY2sqKgoKUmlnaHQsIHNvIGBKQkQyYCBpcyBhIGpvdXJuYWxpbmcgZmlsZXN5c3RlbTsgaXQmIzM5O3MgcHVsbGVkIGluIGFzIGEgZGVwZW5kZW5jeSBieSBib3RoIGBFWFQ0X0ZTYCBhbmQgYE9DRlMyX0ZTYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciBpdHMgcm9sZSBpbiBlbnN1cmluZyBmaWxlc3lzdGVtIGludGVncml0eS4KCkkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZXhwbGljaXRseSB2ZXJpZnkgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBkZWNsYXJlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyB0byBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMgb2YgdGhlIGRlcGVuZGVuY3kgb24gYEpCRDJgIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEp1c3Qgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGFzIEkgZXhwZWN0IGl0IHRvIGJlLiBJIHdvdWxkbiYjMzk7dCBiZSBzdXJwcmlzZWQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBHRlMyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvZ2ZzMi9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgR0ZTMiBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgcmVjZW50IGNoYW5nZXMsIGRlcGVuZGVuY2llcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBpbnRyb2R1Y2VkIGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyBmaWxlIGluc2lkZSBhbmQgb3V0IGFsbG93cyBtZSB0byBxdWlja2x5IGFzc2VzcyB0aGUgYXZhaWxhYmxlIEdGUzIgZmVhdHVyZXMsIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgYW5kIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgdGFzay4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgR0ZTMi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIG9uIGZlYXR1cmVzIGxpa2UgYENPTkZJR19CTE9DS2AsIGBDT05GSUdfRlNgLCBgQ09ORklHX1hGU2AgYW5kIGBDT05GSUdfSkJEMmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2dmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZ2ZzMi9LY29uZmlnOjI6Y29uZmlnIEdGUzJfRlNcbmZzL2dmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZ2ZzMi9LY29uZmlnLTI2LVxuZnMvZ2ZzMi9LY29uZmlnOjI3OmNvbmZpZyBHRlMyX0ZTX0xPQ0tJTkdfRExNXG5mcy9nZnMyL0tjb25maWctMjgtXHRib29sIFwmIzM0O0dGUzIgRExNIGxvY2tpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgT0NGUzIgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBmcy9vY2ZzMi9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGtub3cgdGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhbGwgdGhlIHZhcmlvdXMgZmVhdHVyZXMsIG9wdGlvbnMsIGFuZCBkZXBlbmRlbmNpZXMgb2YgT0NGUzIgYXJlIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgdmlhIHRoZSBLY29uZmlnIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaCBsZXZlbCBvdmVydmlldyBvZiB0aGUgcG9zc2libGUgYnVpbGQgcGFyYW1ldGVycy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZCBieSB0aGUgS2J1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgdGhlcmUsIHdoYXQgZGVmYXVsdHMgYXJlIGJlaW5nIHNldCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIGhvdyBPQ0ZTMiBpcyBiZWluZyBjb25maWd1cmVkLCB3aGljaCwgaW4gdHVybiwgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxuZnMvb2NmczIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNDEtXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxuZnMvb2NmczIvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy01My1cbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjcyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBGQVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGZzL2ZhdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEZBVCBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBwYXJhbWV0ZXJzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHRvIGNvbnRyb2wgaXQuIEdvdHRhIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBsYXlvdXQgb2YgdGhpcyBzZWN0aW9uIGFnYWluOyB0aGVyZSYjMzk7cyBhbHdheXMgc29tZXRoaW5nIG5ldyB0byBsZWFybiBvciBhIHN1YnRsZSBkaWZmZXJlbmNlIGNvbXBhcmVkIHRvIHdoYXQgSSByZW1lbWJlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGdvb2RpZXMgYXdhaXQgdXMgd2l0aGluIHRoaXMgS2NvbmZpZyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkFUX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2ZhdC9LY29uZmlnOjI6Y29uZmlnIEZBVF9GU1xuZnMvZmF0L0tjb25maWctMy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGV4RkFUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBleEZBVCBmaWxlc3lzdGVtIG1vZHVsZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBmcy9leGZhdC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgYWxsIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGUga2VybmVsIGludGVncmF0ZXMgYW5kIGRlYWxzIHdpdGggdGhpcyBzcGVjaWZpYyBmaWxlc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6IGVuYWJsZS9kaXNhYmxlIGZsYWdzIGZvciB0aGUgZXhGQVQgbW9kdWxlIGl0c2VsZiwgb3B0aW9ucyByZWxhdGVkIHRvIGRpZmZlcmVudCBmZWF0dXJlcyBsaWtlIGxvbmcgZmlsZSBuYW1lIHN1cHBvcnQgb3Igam91cm5hbGluZywgcGVyaGFwcyBldmVuIHNvbWUgZGVidWdnaW5nIGZsYWdzIGlmIHRoZXkmIzM5O3JlIHN0aWxsIG1haW50YWluZWQuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSB3aWxsIGJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBiYXNlZCBvbiBvdGhlciBrZXJuZWwgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgd2UgY3VzdG9taXplIHRoaXMgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBrZXJuZWwgYW5kIGJ1aWxkIHRoZSBrZXJuZWwgdG8gb3VyIHNwZWNpZmljIG5lZWRzLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGdvb2RpZXMgaXQgaG9sZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWEZBVF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4ZmF0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhmYXQvS2NvbmZpZy0yLVxuZnMvZXhmYXQvS2NvbmZpZzozOmNvbmZpZyBFWEZBVF9GU1xuZnMvZXhmYXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7ZXhGQVQgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQURGUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBREZTIChBZHZhbmNlZCBEaXNrIEZpbGUgU3lzdGVtKSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBmcy9hZGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0JiMzOTtzIHRoZSBvYnZpb3VzIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgQURGUyBpcyBidWlsdCBhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmFiaWxpdHkgb2YgdGhlIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGdvb2RpZXMgYXJlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQURGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FkZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2FkZnMvS2NvbmZpZzoyOmNvbmZpZyBBREZTX0ZTXG5mcy9hZGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FERlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2FkZnMvS2NvbmZpZy0yMi1cbmZzL2FkZnMvS2NvbmZpZzoyMzpjb25maWcgQURGU19GU19SV1xuZnMvYWRmcy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtBREZTIHdyaXRlIHN1cHBvcnQgKERBTkdFUk9VUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1ODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmU6IGV4dDImIzM5O3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBmcy9leHQyL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGRldGFpbGluZyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgd2UgY2FuIHR3ZWFrLCBwb3RlbnRpYWxseSBvcHRpbWl6ZSwgb3IgZGlzYWJsZSBhbHRvZ2V0aGVyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBJ4oCZbSB0aGlua2luZyB0aGluZ3MgbGlrZSBqb3VybmFsIHN1cHBvcnQsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGxhcmdlIGZpbGUgc3VwcG9ydCDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIHRvbywgb2YgY291cnNlIC0gdW5kZXJzdGFuZGluZyB3aGljaCBvdGhlciBzdWJzeXN0ZW1zIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBleHQyIGNhbiBiZSBjb3JyZWN0bHkgY29uZmlndXJlZCBhbmQgdXNlZC4gQW5kLCBJJiMzOTtsbCBiZSBzdXJlIHRvIG5vdGUgdGhlIHZhcmlvdXMgZGVmYXVsdCBzZXR0aW5ncyB0byBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGN1cnJlbnRseSBhc3N1bWVzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gZmluZS10dW5pbmcgdGhlIGV4dDIgbW9kdWxlIHRvIGZpdCB0aGlzIHNwZWNpZmljIHVzZS1jYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUMl9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDIvS2NvbmZpZzoyOmNvbmZpZyBFWFQyX0ZTXG5mcy9leHQyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0yMC1cbmZzL2V4dDIvS2NvbmZpZzoyMTpjb25maWcgRVhUMl9GU19YQVRUUlxuZnMvZXh0Mi9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtFeHQyIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9leHQyL0tjb25maWctMjktXG5mcy9leHQyL0tjb25maWc6MzA6Y29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMXG5mcy9leHQyL0tjb25maWctMzEtXHRib29sIFwmIzM0O0V4dDIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQyL0tjb25maWctMzktXG5mcy9leHQyL0tjb25maWc6NDA6Y29uZmlnIEVYVDJfRlNfU0VDVVJJVFlcbmZzL2V4dDIvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7RXh0MiBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIE9NRlMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBmcy9vbWZzL0tjb25maWdgLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3aGVuZXZlciBJIG5lZWQgdG8gYXNzZXNzIG9yIHR3ZWFrIGFueSBhc3BlY3RzIG9mIGEgZmlsZXN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGlzIGZpbGUgdG8gY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIE9NRlMgKE9sZCBNYWNpbnRvc2ggRmlsZSBTeXN0ZW0pIG1vZHVsZSwgb3IgcGVyaGFwcyBjZXJ0YWluIHNwZWNpZmljIGZlYXR1cmVzLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIGFueSBicm9hZGVyIGZpbGVzeXN0ZW0gc2V0dGluZ3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGV0aGVyIGl0JiMzOTtzIG1vZHVsYXIsIGFuZCBhbnkgY29tcGlsZS10aW1lIGZlYXR1cmVzIHRoYXQgYXJlIHR1cm5lZCBvbiBvciBvZmYuIEkmIzM5O2xsIGFsc28gdHJ5IHRvIGdhdWdlIGl0cyByZWxhdGl2ZSBjb21wbGV4aXR5LCBhbmQgbWF5YmUgbWFrZSBzb21lIG1lbnRhbCBub3RlcyBhYm91dCBhcmVhcyB0aGF0IEkgbWlnaHQgbmVlZCB0byByZXZpc2l0IGxhdGVyIGlmIEkgcGxhbiBvbiBhbnkga2luZCBvZiBtb2RpZmljYXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPTUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb21mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29tZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvb21mcy9LY29uZmlnOjI6Y29uZmlnIE9NRlNfRlNcbmZzL29tZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29uaWNCbHVlIE9wdGltaXplZCBNUEVHIEZpbGUgU3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZpbGVzeXN0ZW0gY29uZmlnczogYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYEZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkLCBidXQgYnJvYWQsIGxpc3QuIEhhbmcgb24gYSBzZWNvbmQuLi4gYEZBVF9GU2AuLi4gdGhhdCYjMzk7cyBhIGJpdCBkaWZmZXJlbnQuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUgYmVpbmcgYSBoaWRkZW4gY29uZmlnLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suIFllYWgsIHRoYXQmIzM5O3MgcmlnaHQuIGBGQVRfRlNgIGlzIHNlbGVjdGVkIGJ5IGJvdGggYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgLiBCZXN0IHRvIGNvbmZpcm0gYnkgb3BlbmluZyB0aGUgYGZzL2ZhdC9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVNET1NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvS2NvbmZpZz0yPWNvbmZpZyBGQVRfRlNcbi0tXG5mcy9mYXQvS2NvbmZpZy0zNy1cbmZzL2ZhdC9LY29uZmlnOjM4OmNvbmZpZyBNU0RPU19GU1xuZnMvZmF0L0tjb25maWctMzktXHR0cmlzdGF0ZSBcJiMzNDtNU0RPUyBmcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzkxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gTG9naWMqKgoKUmlnaHQsIHNvIGBNU0RPU19GU2AgYW5kIGBWRkFUX0ZTYCBib3RoIHVsdGltYXRlbHkgcmVseSBvbiB0aGUgYEZBVF9GU2AgY29yZS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBob3cgdGhlIGtlcm5lbCYjMzk7cyBmaWxlIHN5c3RlbSBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBJdCYjMzk7cyBhIGNvbW1vbiBkZXBlbmRlbmN5IHBhdHRlcm4uIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYFZGQVRfRlNgIGlzIGRlZmluZWQgaG93IEkgZXhwZWN0IGl0IHRvIGJlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZnMvZmF0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gTm8gbmVlZCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nIHdpdGggaXQgcmlnaHQgbm93LCBqdXN0IHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRkFUX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWc9Mzg9Y29uZmlnIE1TRE9TX0ZTXG4tLVxuZnMvZmF0L0tjb25maWctNjItXG5mcy9mYXQvS2NvbmZpZzo2Mzpjb25maWcgVkZBVF9GU1xuZnMvZmF0L0tjb25maWctNjQtXHR0cmlzdGF0ZSBcJiMzNDtWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbGUgU3lzdGVtIEJ1ZmZlciBNYW5hZ2VtZW50IFRob3VnaHRzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpbGUgc3lzdGVtIGJ1ZmZlciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBpbmNsdXNpb24gaW4gb3VyIGN1cnJlbnQgYW5hbHlzaXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFjY291bnQgZm9yIGJvdGggYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGluIG91ciBjb3ZlcmFnZS4gVGhhdCBmZWVscyBjcml0aWNhbC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvdXIgYXR0ZW50aW9uIG9uLiBJJiMzOTttIHRoaW5raW5nIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLCBhbmQgYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gLiBUaGVzZSBmZWVsIGxpa2UgdGhlIGNvcmUgY29tcG9uZW50cy4gQnV0IGlzIHRoYXQgYWxsPyBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUuCgpXYWl0LCBJIHRoaW5rIHRoZXJlIGFyZSB0d28gbW9yZSBwb3RlbnRpYWwgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gb3VyIHB1cnZpZXc6IGBfX2Jmb3JnZXRgIGFuZCBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuIEkgdGhpbmsgdGhleSBhcmUgZ2VybWFuZSB0byBvdXIgb3ZlcmFsbCBjb3ZlcmFnZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGBfX2Jmb3JnZXRgIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBidWZmZXJzLCBhbmQgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIGBmcy9idWZmZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIF9fYmZvcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTEwODA9RVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7XG4tLVxuZnMvYnVmZmVyLmMtMTA4OC0gKi9cbmZzL2J1ZmZlci5jOjEwODk6dm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmZzL2J1ZmZlci5jLTEwOTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBCdWZmZXIgTWFuYWdlbWVudDogRGlnZ2luZyBpbnRvIGBfX2Jmb3JnZXRgIGFuZCBTeW5jaHJvbml6YXRpb24qKgoKUmlnaHQsIHNvIGBfX2Jmb3JnZXRgIGlzIGdsb2JhbCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gQ2xlYXJseSwgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGBmcy9idWZmZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgX19iZm9yZ2V0YCBhbmQgb3RoZXIgYnVmZmVyIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBidWZmZXIgY2FjaGUsIGlmIHRoaXMgaXMgd2hlcmUgdGhlIGRpcnR5IGJpdHMgcmVzaWRlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzeW5jaHJvbml6YXRpb24gc3RyYXRlZ3kgaXMsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmQgdG8gZGlydHkgYnVmZmVyIG1hbmFnZW1lbnQuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyB3ZSBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHBlcnNpc3RlbmNlLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19zeW5jX2RpcnR5X2J1ZmZlcmAgaW4gdGhpcyBjb250ZXh0LiBJdCBpcyBsaWtlbHkgY2FsbGVkIGR1cmluZyBidWZmZXIgd3JpdGUtYmFjaywgZmlsZSBzeXN0ZW0gdW5tb3VudCwgb3Igc2ltaWxhciBjcml0aWNhbCBvcGVyYXRpb25zLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBmdW5jdGlvbiwgYXMgSSBleHBlY3QgaXQgd2lsbCBpbnZvbHZlIGNvb3JkaW5hdGlvbiBvZiBtdWx0aXBsZSBwcm9jZXNzZXMgb3IgdGhyZWFkcy4gVW5kZXJzdGFuZGluZyB0aGlzIHN5bmNocm9uaXphdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogX19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTI3MTY9RVhQT1JUX1NZTUJPTCh3cml0ZV9kaXJ0eV9idWZmZXIpO1xuLS1cbmZzL2J1ZmZlci5jLTI3MjItICovXG5mcy9idWZmZXIuYzoyNzIzOmludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbmZzL2J1ZmZlci5jLTI3MjQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk2NAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBhIEdsb2JhbCBpbiBPQ0ZTMioqCgpPa2F5LCBzbyBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuLi4gdGhhdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4gSG1tLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZD8gTGV0JiMzOTtzIHRyYWNlIGl0cyB1c2FnZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBjb250ZXh0LCBzZWVtcyB0byBiZSBpbiB0aGUgd3JpdGUgcGF0aC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBvY2ZzMl93cml0ZV9ibG9ja2AuIEkmIzM5O2xsIGZpbmQgdGhhdCBpbiBgZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY2AuIFRpbWUgdG8gc2VlIGhvdyB0aGlzIGdsb2JhbCBmdW5jdGlvbiB0aWVzIGludG8gdGhlIGJsb2NrIHdyaXRlIG9wZXJhdGlvbnMgb2YgT0NGUzIuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQgYXJvdW5kIGl0cyByb2xlIGluIGRhdGEgaW50ZWdyaXR5IGFuZCBzeW5jaHJvbml6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKiBvY2ZzMl93cml0ZV9ibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zNj1CVUZGRVJfRk5TKE5lZWRzVmFsaWRhdGUsIG5lZWRzX3ZhbGlkYXRlKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzctXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjM4OmludCBvY2ZzMl93cml0ZV9ibG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzktXHRcdCAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1MwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqT0NGUzIgQmxvY2sgV3JpdGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBvY2ZzMl93cml0ZV9ibG9ja2AuIEkga25vdyB0aGlzIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIGhvdyBPQ0ZTMiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc3VwZXJibG9jayBhbmQgYmFja3Vwcywgc2luY2UgdGhvc2UgYXJlIGNyaXRpY2FsIG1ldGFkYXRhIGFyZWFzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IHRoaXMgaXMgcHJvYmFibHkgYGZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNgLiBMZXQmIzM5O3MgZm9jdXMgb24gYG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cGAgd2l0aGluIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyBpdCBjYWxscyBhbmQgaW50ZXJhY3RzIHdpdGggYG9jZnMyX3dyaXRlX2Jsb2NrYCwgc2luY2UgaXQgaXMgcHJvYmFibHkgYSB1c2VyIG9mIHRoYXQgZnVuY3Rpb24uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBoZXJlLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz00MDI9c3RhdGljIHZvaWQgb2NmczJfY2hlY2tfc3VwZXJfb3JfYmFja3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00MjQtICovXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjQyNTppbnQgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00MjYtXHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEdsb2JhbCBTdGF0ZSBNYW5hZ2VtZW50IGluIEZpbGVzeXN0ZW1zKioKClJpZ2h0LCBgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwYCDigJMgdGhhdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIGhvdyBnbG9iYWwgc3RhdGUgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQuIFlvdSBrbm93IHRoZSBpbXBsaWNhdGlvbnMg4oCTIHBvdGVudGlhbCBjb250ZW50aW9uLCBzZXJpYWxpemF0aW9uIGlzc3VlcywgYW5kIGdlbmVyYWxseSB0aGUgdHJpY2t5IG5hdHVyZSBvZiBjb25jdXJyZW50IGFjY2VzcyBpbiBhIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgaXRzIGdsb2JhbCBuYXR1cmUgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcgaW4gdGVybXMgb2YgdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0LgoKTGV0IG1lIHNlZSBob3cgb3RoZXJzIGhhbmRsZSBhIHNpbWlsYXIgcmVxdWlyZW1lbnQuLi4gQWhhISBMZXQmIzM5O3MgZXhhbWluZSBgZmF0X3N5bmNfYmhzYCBpbiBgZnMvZmF0L21pc2MuY2AuIEkgZXhwZWN0IHRvIHNlZSBzdHJhdGVnaWVzIGZvciBkZWFsaW5nIHdpdGggZGF0YSBidWZmZXJzIChCSFMpIGFuZCBlbnN1cmluZyBjb25zaXN0ZW5jeSBpbiBhIHNpbXBsZXIgZmlsZXN5c3RlbSBjb250ZXh0LiBUaGlzIG1pZ2h0IHByb3ZpZGUgY2x1ZXMgb24gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHNpbWlsYXIgaXNzdWVzLCBldmVuIGlmIGl0JiMzOTtzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgZmlsZSBzeXN0ZW0uIENvbXBhcmluZyBhbmQgY29udHJhc3RpbmcgYXBwcm9hY2hlcyBjb3VsZCBoaWdobGlnaHQgdGhlIHN1YnRsZSBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIGRpZmZlcmVudCBzdGF0ZSBtYW5hZ2VtZW50IGFwcHJvYWNoZXMgd2l0aGluIHRoZXNlIGtpbmRzIG9mIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGZhdF9zeW5jX2JocyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L21pc2MuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwoZmF0X3VwZGF0ZV90aW1lKTtcbmZzL2ZhdC9taXNjLmMtMzQ5LVxuZnMvZmF0L21pc2MuYzozNTA6aW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXG5mcy9mYXQvbWlzYy5jLTM1MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTg1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRXhGQVQgSXNzdWUqKgoKQWxyaWdodCwgYGZhdF9zeW5jX2Joc2DigKYgdGhhdCYjMzk7cyBnbG9iYWwsIGlzbiYjMzk7dCBpdD8gU29tZXRoaW5nJiMzOTtzIG5hZ2dpbmcgYXQgbWUgYWJvdXQgaXQuIFdlIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgZXhGQVQgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZXhmYXRfdXBkYXRlX2Joc2AgaW4gYGZzL2V4ZmF0L21pc2MuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgQmxvY2sgSGVhZCBTcGFjZSwgd2hpY2ggY291bGQgdmVyeSB3ZWxsIGJlIHJlbGV2YW50IHRvIHRoZSBnbG9iYWwgdmFyaWFibGUgd2UmIzM5O3JlIGNvbmNlcm5lZCBhYm91dC4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QgdGhlcmUuIFdlIGtub3cgZXhGQVQgY2FuIGJlIHRyaWNreSwgc28gbGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGV4ZmF0X3VwZGF0ZV9iaHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leGZhdC9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhmYXQvbWlzYy5jPTE2ND1pbnQgZXhmYXRfdXBkYXRlX2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBzeW5jKVxuLS1cbmZzL2V4ZmF0L21pc2MuYy0xNzYtXG5mcy9leGZhdC9taXNjLmM6MTc3OmludCBleGZhdF91cGRhdGVfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocywgaW50IHN5bmMpXG5mcy9leGZhdC9taXNjLmMtMTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqRXhhbWluaW5nIFBvdGVudGlhbCBDb2RlIEludGVyYWN0aW9ucyoqCgpSaWdodCwgYGV4ZmF0X3VwZGF0ZV9iaHNgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIHRyYWNlIGl0cyB1c2FnZS4gR2l2ZW4gaXRzIG5hbWUsIGl0IHByb2JhYmx5IHBsYXlzIGEgcm9sZSBpbiB1cGRhdGluZyBibG9jayBoZWFkZXJzLiBMZXQmIzM5O3Mgc2VlIGhvdyBzb21ldGhpbmcgc2ltaWxhciBpcyBoYW5kbGVkIGluIG90aGVyIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNvIGxldCYjMzk7cyBjaGVjayBgZXh0Ml94YXR0cl9zZXQyYCB3aXRoaW4gYGZzL2V4dDIveGF0dHIuY2AgYXMgYSBjb21wYXJpc29uLiBJdCYjMzk7bGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgb24gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgbWF5IGJlIHVwZGF0ZWQgaW4gcmVsYXRpb24gdG8gYmxvY2sgaGVhZGVycywgZ2l2aW5nIG1lIGEgcG9pbnQgb2YgY29tcGFyaXNvbiBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKiBleHQyX3hhdHRyX3NldDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQyL3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGV4dDJfeGF0dHJfc2V0MmAgU2VhcmNoIFN0cmF0ZWd5KioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyB0byB0cmFjayBkb3duIGluc3RhbmNlcyBvZiBgZXh0Ml94YXR0cl9zZXQyYC4gU2ltcGxlIGVub3VnaCwgYSBjb21tb24gZnVuY3Rpb24gbmFtZSB0byBpbnZlc3RpZ2F0ZSB3aGVuIHdvcmtpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGV4dDIgZmlsZXN5c3RlbXMuIEhvd2V2ZXIsIHRoZSBhYnNlbmNlIG9mIHRoZSBgXmAgaW4gdGhlIHNlYXJjaCB0ZXJtIGltcGxpZXMgYSBwcmVmZXJlbmNlIGZvciBhIG1vcmUgYnJvYWQgc2VhcmNoLiBXZSYjMzk7cmUgbm90IGxvb2tpbmcgZm9yIGV4YWN0IG1hdGNoZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBsaW5lcyBvciBkZWZpbml0aW9ucywgYnV0ICphbnkqIG9jY3VycmVuY2VzIG9mIHRoZSBzeW1ib2wgYGV4dDJfeGF0dHJfc2V0MmAgd2l0aGluIHRoZSBjb2RlIGJhc2UuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGxpa2VseSBpbnRlcmVzdGVkIGluIGV4cGxvcmluZyBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLCBpdHMgdXNhZ2Ugd2l0aGluIG90aGVyIGZ1bmN0aW9ucywgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb2YgdGhlIGZ1bmN0aW9uLCBvciBldmVuIHJlZmVyZW5jZXMgd2l0aGluIGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24uIEl0IGNvdWxkIGluZGljYXRlIGFuIGludmVzdGlnYXRpb24gb2YgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgcG90ZW50aWFsIGJ1ZyBodW50aW5nIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBwaWVjZSBvZiBjb2RlLiBXZSBjb3VsZCBiZSBsb29raW5nIGZvcjoKCiogICAqKkZ1bmN0aW9uIENhbGxzOioqIFdoZXJlIGlzIGBleHQyX3hhdHRyX3NldDJgIGJlaW5nIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgYXJndW1lbnQgdXNhZ2U/CiogICAqKkRlZmluaXRpb25zIGFuZCBJbXBsZW1lbnRhdGlvbnM6KiogV2UgbWlnaHQgd2FudCB0byByZXZpZXcgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBleHRlbmRlZCBhdHRyaWJ1dGUgaW1wbGVtZW50YXRpb24uCiogICAqKkRvY3VtZW50YXRpb24gb3IgQ29tbWVudHM6KiogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBtZW50aW9uZWQgaW4gZG9jdW1lbnRhdGlvbiwgb3IgaGF2ZSBjb21tZW50cyBpbiBvdGhlciBsb2NhdGlvbnMgZGVzY3JpYmluZyBpdHMgdXNhZ2UuCiogICAqKlZhcmlhdGlvbnMgb3IgU2ltaWxhciBGdW5jdGlvbnM6KiogV2UgbWlnaHQgYmUgbG9va2luZyBmb3Igc2ltaWxhciBmdW5jdGlvbnMsIG9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIHByaW1hcnkgZnVuY3Rpb24uCgpUaGUgbGFjayBvZiB0aGUgYF5gIG1pZ2h0IGJlIGJlY2F1c2Ugd2Ugd2FudCB0byBzZWUgdGhlIHZhcmlvdXMgdXNlcywgaW4gcGFydGljdWxhciB3aGVuIHRoZSBwYXJhbWV0ZXIgb3JkZXIgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQyX3hhdHRyX3NldDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQyL3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0Mi94YXR0ci5jLTkxLVxuZnMvZXh0Mi94YXR0ci5jOjkyOnN0YXRpYyBpbnQgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbmZzL2V4dDIveGF0dHIuYy05My1cdFx0XHQgICBzdHJ1Y3QgZXh0Ml94YXR0cl9oZWFkZXIgKik7XG4tLVxuZnMvZXh0Mi94YXR0ci5jPTQwNj1leHQyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5mcy9leHQyL3hhdHRyLmMtNjM1LVx0XHRcdHVubG9ja19idWZmZXIoYmgpOyAgLyogd2Ugd2VyZSBtb2RpZnlpbmcgaW4tcGxhY2UuICovXG5mcy9leHQyL3hhdHRyLmM6NjM2Olx0XHRlcnJvciA9IGV4dDJfeGF0dHJfc2V0Mihpbm9kZSwgYmgsIE5VTEwpO1xuZnMvZXh0Mi94YXR0ci5jLTYzNy1cdH0gZWxzZSB7XG4tLVxuZnMvZXh0Mi94YXR0ci5jLTY0MC1cdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTsgIC8qIHdlIHdlcmUgbW9kaWZ5aW5nIGluLXBsYWNlLiAqL1xuZnMvZXh0Mi94YXR0ci5jOjY0MTpcdFx0ZXJyb3IgPSBleHQyX3hhdHRyX3NldDIoaW5vZGUsIGJoLCBoZWFkZXIpO1xuZnMvZXh0Mi94YXR0ci5jLTY0Mi1cdH1cbi0tXG5mcy9leHQyL3hhdHRyLmM9NzA1PXN0YXRpYyBpbnRcbmZzL2V4dDIveGF0dHIuYzo3MDY6ZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuZnMvZXh0Mi94YXR0ci5jLTcwNy1cdFx0c3RydWN0IGV4dDJfeGF0dHJfaGVhZGVyICpoZWFkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTk1CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBleHQyX3hhdHRyX3NldDJgIFN0YXRpYyBGdW5jdGlvbiBhbmQgTWV0YWRhdGEgSGFuZGxpbmcqKgoKT2theSwgc28gYGV4dDJfeGF0dHJfc2V0MmAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHNwZWNpZmljIHNjb3BlLCBsaWtlbHkgbGltaXRpbmcgaXRzIGRpcmVjdCB1c2FnZSBvdXRzaWRlIHRoZSBzb3VyY2UgZmlsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgd2hlcmUgZG9lcyB0aGlzIGZpdCB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZSBleHQ0IGZpbGUgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCBob3cgdGhhdCBpbXBhY3RzIG92ZXJhbGwgbWV0YWRhdGEgY29uc2lzdGVuY3kuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgZm9yIG1ldGFkYXRhIHdyaXRlIG9wZXJhdGlvbnMgdG8gYmUgZGVhbHQgd2l0aC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBsb29rIGludG8gYGZzL2V4dDQvZXh0NF9qYmQyLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBkaXJ0eSBtZXRhZGF0YS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB0aWVzIGludG8gdGhlIGpvdXJuYWxpbmcgcHJvY2Vzcy4gSSBzdXNwZWN0IGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBtaWdodCBiZSB0aGUgY29yZSBsb2dpYyBmb3IgZW5zdXJpbmcgYXRvbWljaXR5IHdoZW4gd3JpdGluZyBhdHRyaWJ1dGUgZGF0YSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IGlzIHJlbGF0ZWQgdG8gamJkMiwgd2hpY2ggaW5kaWNhdGVzIGEgam91cm5hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfamJkMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9qYmQyLmM9MzUzPXN0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmMtMzY3LVxuZnMvZXh0NC9leHQ0X2piZDIuYzozNjg6aW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuZnMvZXh0NC9leHQ0X2piZDIuYy0zNjktXHRcdFx0XHQgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIERpcnR5IE1ldGFkYXRhIEhhbmRsZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgLiBJdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBiZSBiZWluZyB1c2VkLCBhbmQgd2hhdCBjb250ZXh0IHRoYXQgaXMuCgpUaGUgbmV4dCBvYnZpb3VzIHRoaW5nIHRvIGNoZWNrIGlzIGB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkYCBpbiBgZnMvZXh0NC9tbXAuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBoYW5kbGluZyBtaWdodCBiZS4gSSYjMzk7ZCBleHBlY3QgdGhhdCBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiB3cml0aW5nIG1ldGFkYXRhLCBwYXJ0aWN1bGFybHkgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSAmIzM0O2RpcnR5JiMzNDsgaGFuZGxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRoYXdpbmcgcHJvY2VzcyBpcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZ2xvYmFsIGhhbmRsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGFuIGFyZWEgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgaW4gdGhlIGZpbGVzeXN0ZW0sIGVzcGVjaWFsbHkgYXJvdW5kIG1ldGFkYXRhIGNvbnNpc3RlbmN5IGR1cmluZyByZWNvdmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfbW1wX2Jsb2NrX3RoYXdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvbW1wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9tbXAuYz0zMD1zdGF0aWMgdm9pZCBleHQ0X21tcF9jc3VtX3NldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wKVxuLS1cbmZzL2V4dDQvbW1wLmMtNDEtICovXG5mcy9leHQ0L21tcC5jOjQyOnN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9tbXAuYy00My1cdFx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9leHQ0L21tcC5jPTU3PXN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvZXh0NC9tbXAuYy02My1cdHNjb3BlZF9ndWFyZChzdXBlcl93cml0ZSwgc2IpXG5mcy9leHQ0L21tcC5jOjY0Olx0XHRyZXR1cm4gd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzYiwgYmgpO1xuZnMvZXh0NC9tbXAuYy02NS19XG4tLVxuZnMvZXh0NC9tbXAuYz0yNzQ9aW50IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbW1wLmMtMzUzLVx0ICovXG5mcy9leHQ0L21tcC5jOjM1NDpcdHJldHZhbCA9IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc2IsIGJoKTtcbmZzL2V4dDQvbW1wLmMtMzU1LVx0aWYgKHJldHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgRnVuY3Rpb24qKgoKSG1tLCBzbyBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgaXMgbWFya2VkIGFzIGEgYHN0YXRpY2AgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBpdHMgc2NvcGUuIEl0JiMzOTtzIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2Ugb3V0c2lkZSBpdHMgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhIGhlbHBlciBmdW5jdGlvbiB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBHRlMyIGZpbGUgc3lzdGVtLiBOb3csIGdpdmVuIHRoZSAmIzM0O3RoYXdlZCYjMzQ7IHBhcnQgb2YgdGhlIG5hbWUsIGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZmlsZSBzeXN0ZW0gd3JpdGVzIGJsb2NrcyB3aGVuIHRoZXkgaGF2ZSBiZWVuICYjMzQ7dGhhd2VkJiMzNDsgYWZ0ZXIgYSBwb3RlbnRpYWwgc25hcHNob3QgY3JlYXRpb24sIG9yIGEgc2ltaWxhciBvcGVyYXRpb24uIFRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIHRoYXQgbG9naWMsIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHdpdGggYGdmczJfcGluYAoKSSBrbm93IHRoYXQgYGdmczJfcGluYCBpcyBsaWtlbHkgaW1wb3J0YW50IHRvIGludmVzdGlnYXRlIHRoaXMsIHNpbmNlIEkgYW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRpbmcgb2YgZGF0YSB0byB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGlzIGBnZnMyX3BpbmAgaXMgY29tbW9ubHkgdXNlZCB0byAmIzM0O3BpbiYjMzQ7IGNlcnRhaW4gYmxvY2tzIG9mIHRoZSBmaWxlIHN5c3RlbSwgc28gdGhhdCB0aGV5JiMzOTtyZSBub3Qgc3dhcHBlZCBvdXQgb2YgbWVtb3J5LiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgbWV0YWRhdGEuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8ganVtcCBpbnRvIHRoZSBgZnMvZ2ZzMi9sb3BzLmNgIHNvdXJjZSBjb2RlIGFuZCBzZWUgaG93IGBnZnMyX3BpbmAgaXMgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGF0IHJlc291cmNlcyBpdCBhY3F1aXJlcyBhbmQgcmVsZWFzZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgY29uc2lzdGVuY3kgYW5kIGhvdyB0aGUgdGhhd2luZyBtZWNoYW5pc20gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKiBnZnMyX3BpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvbG9wcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2dmczIvbG9wcy5jLTQxLSAqL1xuZnMvZ2ZzMi9sb3BzLmM6NDI6dm9pZCBnZnMyX3BpbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmZzL2dmczIvbG9wcy5jLTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgUG90ZW50aWFsIElzc3VlcyBpbiB0aGUgR0ZTMiBGaWxlc3lzdGVtKioKCkFscmlnaHQsIHNvIGBnZnMyX3BpbmAgaXMgZmxhZ2dlZCBhcyBhIGdsb2JhbCB2YXJpYWJsZS4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBzb21ldGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZTsgZ2xvYmFscyBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQgbGlrZSBhIGZpbGVzeXN0ZW0gYXJlIG9mdGVuIGEgc291cmNlIG9mIGNvbnRlbnRpb24gYW5kIHBvdGVudGlhbCBsb2NraW5nIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzZSBhbmQgc2NvcGUgYmV0dGVyLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGdsb2JhbCBtaWdodCBiZSBpbnZvbHZlZCwgSSBzaG91bGQgZm9jdXMgb24gYSBsaWtlbHkgd3JpdGUgcGF0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbG9vayBhdCBob3cgZGF0YSBnZXRzIHdyaXR0ZW4gdG8gYW4gaW5vZGUuIGBfX29tZnNfd3JpdGVfaW5vZGVgIGluIGBmcy9vbWZzL2lub2RlLmNgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIHdpdGhpbiB0aGUgT01GUyBmaWxlc3lzdGVtIGNvbnRleHQsIGFzc3VtaW5nIGBvbWZzYCBpcyByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBvbi1kaXNrIHN0cnVjdHVyZS4gSXQgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBpbm9kZSBvbiBkaXNrIHdoZW4gYSB3cml0ZSBvY2N1cnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0byBzZWUgaG93IGBnZnMyX3BpbmAgbWlnaHQgYmUgdG91Y2hlZCBkdXJpbmcgYSB3cml0ZSBvcGVyYXRpb24uIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIGltcGxpY2F0aW9ucyBpZiBpdHMgZ2xvYmFsIG5hdHVyZSBpcyBwb29ybHkgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19vbWZzX3dyaXRlX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb21mcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29tZnMvaW5vZGUuYz04NT1zdGF0aWMgdm9pZCBvbWZzX3VwZGF0ZV9jaGVja3N1bXMoc3RydWN0IG9tZnNfaW5vZGUgKm9pKVxuLS1cbmZzL29tZnMvaW5vZGUuYy0xMDMtXG5mcy9vbWZzL2lub2RlLmM6MTA0OnN0YXRpYyBpbnQgX19vbWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuZnMvb21mcy9pbm9kZS5jLTEwNS17XG4tLVxuZnMvb21mcy9pbm9kZS5jPTE3ND1zdGF0aWMgaW50IG9tZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG5mcy9vbWZzL2lub2RlLmMtMTc1LXtcbmZzL29tZnMvaW5vZGUuYzoxNzY6XHRyZXR1cm4gX19vbWZzX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbmZzL29tZnMvaW5vZGUuYy0xNzctfVxuLS1cbmZzL29tZnMvaW5vZGUuYz0xNzk9aW50IG9tZnNfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvb21mcy9pbm9kZS5jLTE4MC17XG5mcy9vbWZzL2lub2RlLmM6MTgxOlx0cmV0dXJuIF9fb21mc193cml0ZV9pbm9kZShpbm9kZSwgMSk7XG5mcy9vbWZzL2lub2RlLmMtMTgyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGFkZnNfZGlyX3N5bmNgIEZvbGxvd2luZyBhIExvb2sgYXQgYSBTdGF0aWMgSW5vZGUgV3JpdGUgRnVuY3Rpb24qKgoKUmlnaHQsIGBfX29tZnNfd3JpdGVfaW5vZGVgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZCBhbmQgaXMgbGlrZWx5IHBhcnQgb2YgYSBtb3JlIGxpbWl0ZWQgc2NvcGUgd2l0aGluIHRoZSBPTUZTIGZpbGVzeXN0ZW0uIEdpdmVuIHRoYXQgY29udGV4dCwgSSYjMzk7bSBub3cgY3VyaW91cyBhYm91dCBkaXJlY3Rvcnkgc3luY2hyb25pemF0aW9uIHdpdGhpbiBhIGRpZmZlcmVudCBmaWxlc3lzdGVtLCBsZXQmIzM5O3Mgc2VlLCB0aGUgQURGUyBmaWxlc3lzdGVtLiBNeSBpbnRlbnRpb24gaXMgdG8gY29udHJhc3QgaG93IHRoZXkgYXBwcm9hY2ggaW5vZGUgd3JpdGluZyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgdXBkYXRlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGFkZnNfZGlyX3N5bmNgIGZ1bmN0aW9uLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9hZGZzL2Rpci5jYCBhbmQgZGlnIGluLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHVzZWZ1bCBpbnNpZ2h0IGludG8gYSBkaWZmZXJlbnQgYXBwcm9hY2ggZm9yIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgcmVsZXZhbnQgZ2l2ZW4gdGhlIHByaW9yIGV4YW1pbmF0aW9uIG9mIGEgc3RhdGljLCBsaWtlbHkgaW50ZXJuYWwsIHdyaXRlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGZzX2Rpcl9zeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWRmcy9kaXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZGZzL2Rpci5jPTE3Nz1zdGF0aWMgdm9pZCBhZGZzX2Rpcl9tYXJrX2RpcnR5KHN0cnVjdCBhZGZzX2RpciAqZGlyKVxuLS1cbmZzL2FkZnMvZGlyLmMtMTg1LVxuZnMvYWRmcy9kaXIuYzoxODY6c3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxuZnMvYWRmcy9kaXIuYy0xODcte1xuLS1cbmZzL2FkZnMvZGlyLmM9Mjc2PWFkZnNfZGlyX3VwZGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9iaiwgaW50IHdhaXQpXG4tLVxuZnMvYWRmcy9kaXIuYy0zMDQtXHRpZiAod2FpdClcbmZzL2FkZnMvZGlyLmM6MzA1Olx0XHRyZXQgPSBhZGZzX2Rpcl9zeW5jKFx1MDAyNmRpcik7XG5mcy9hZGZzL2Rpci5jLTMwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyOTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipTdGF0aWMgQW5hbHlzaXMgb2YgQURGUyBEaXJlY3RvcnkgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBhZGZzX2Rpcl9zeW5jYC4gRmlyc3Qgb2JzZXJ2YXRpb24g4oCTIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTm93LCB0byB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGFuZCBqb3VybmFsIG1hbmFnZW1lbnQgaW4gdGhlIE9DRlMyIGZpbGUgc3lzdGVtLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYF9fb2NmczJfam91cm5hbF9hY2Nlc3NgIGxvY2F0ZWQgaW4gYGZzL29jZnMyL2pvdXJuYWwuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byBob3cgYGFkZnNfZGlyX3N5bmNgIG1pZ2h0IGJlIGludGVyYWN0aW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB3aXRoIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbSBkdXJpbmcgc3luY2hyb25pemF0aW9uIGV2ZW50cy4gVW5kZXJzdGFuZGluZyB0aGUgam91cm5hbCBpbnRlcmFjdGlvbnMgaXMgcGFyYW1vdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX29jZnMyX2pvdXJuYWxfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvam91cm5hbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2pvdXJuYWwuYz01Mjc9c3RhdGljIHZvaWQgb2NmczJfZnJvemVuX3RyaWdnZXIoc3RydWN0IGpiZDJfYnVmZmVyX3RyaWdnZXJfdHlwZSAqdHJpZ2dlcnMsXG4tLVxuZnMvb2NmczIvam91cm5hbC5jLTUzNS1cdCAqIG11c3QgdW5jb25kaXRpb25hbGx5IGNvbXB1dGUgdGhlIGVjYyBkYXRhLlxuZnMvb2NmczIvam91cm5hbC5jOjUzNjpcdCAqIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoKSB3aWxsIG9ubHkgc2V0IHRoZSB0cmlnZ2VycyBpZlxuZnMvb2NmczIvam91cm5hbC5jLTUzNy1cdCAqIG1ldGFlY2MgaXMgZW5hYmxlZC5cbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmM9NTQ2PXN0YXRpYyB2b2lkIG9jZnMyX2RxX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy01NTUtXHQgKiBtdXN0IHVuY29uZGl0aW9uYWxseSBjb21wdXRlIHRoZSBlY2MgZGF0YS5cbmZzL29jZnMyL2pvdXJuYWwuYzo1NTY6XHQgKiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKCkgd2lsbCBvbmx5IHNldCB0aGUgdHJpZ2dlcnMgaWZcbmZzL29jZnMyL2pvdXJuYWwuYy01NTctXHQgKiBtZXRhZWNjIGlzIGVuYWJsZWQuXG4tLVxuZnMvb2NmczIvam91cm5hbC5jPTU2Nj1zdGF0aWMgdm9pZCBvY2ZzMl9kYl9mcm96ZW5fdHJpZ2dlcihzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2Vycyxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTc1LVx0ICogbXVzdCB1bmNvbmRpdGlvbmFsbHkgY29tcHV0ZSB0aGUgZWNjIGRhdGEuXG5mcy9vY2ZzMi9qb3VybmFsLmM6NTc2Olx0ICogX19vY2ZzMl9qb3VybmFsX2FjY2VzcygpIHdpbGwgb25seSBzZXQgdGhlIHRyaWdnZXJzIGlmXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTc3LVx0ICogbWV0YWVjYyBpcyBlbmFibGVkLlxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz02NDc9dm9pZCBvY2ZzMl9pbml0aWFsaXplX2pvdXJuYWxfdHJpZ2dlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtNjU1LVxuZnMvb2NmczIvam91cm5hbC5jOjY1NjpzdGF0aWMgaW50IF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL2pvdXJuYWwuYy02NTctXHRcdFx0XHQgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03MzQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03MzgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzM5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzQwLVx0XHRcdFx0ICAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfREldLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03NDQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03NDgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzQ5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzUwLVx0XHRcdFx0ICAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRUJdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03NTQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03NTgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzU5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzYwLVx0XHRcdFx0ICAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfUkJdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03NjQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2dkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03NjgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzY5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzcwLVx0XHRcdFx0ICAgICBcdTAwMjZvc2ItXHUwMDNlc19qb3VybmFsX3RyaWdnZXJzW09DRlMyX0pUUl9HRF0sXG4tLVxuZnMvb2NmczIvam91cm5hbC5jPTc3ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXG4tLVxuZnMvb2NmczIvam91cm5hbC5jLTc3OC1cbmZzL29jZnMyL2pvdXJuYWwuYzo3Nzk6XHRyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCxcbmZzL29jZnMyL2pvdXJuYWwuYy03ODAtXHRcdFx0XHQgICAgIFx1MDAyNm9zYi1cdTAwM2VzX2pvdXJuYWxfdHJpZ2dlcnNbT0NGUzJfSlRSX0RCXSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmM9Nzg0PWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzg4LVxuZnMvb2NmczIvam91cm5hbC5jOjc4OTpcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLFxuZnMvb2NmczIvam91cm5hbC5jLTc5MC1cdFx0XHRcdCAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfWEJdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03OTQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03OTgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6Nzk5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtODAwLVx0XHRcdFx0ICAgICBcdTAwMjZvc2ItXHUwMDNlc19qb3VybmFsX3RyaWdnZXJzW09DRlMyX0pUUl9EUV0sXG4tLVxuZnMvb2NmczIvam91cm5hbC5jPTgwND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXG4tLVxuZnMvb2NmczIvam91cm5hbC5jLTgwOC1cbmZzL29jZnMyL2pvdXJuYWwuYzo4MDk6XHRyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCxcbmZzL29jZnMyL2pvdXJuYWwuYy04MTAtXHRcdFx0XHQgICAgIFx1MDAyNm9zYi1cdTAwM2VzX2pvdXJuYWxfdHJpZ2dlcnNbT0NGUzJfSlRSX0RSXSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmM9ODE0PWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtODE4LVxuZnMvb2NmczIvam91cm5hbC5jOjgxOTpcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLFxuZnMvb2NmczIvam91cm5hbC5jLTgyMC1cdFx0XHRcdCAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRExdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz04MjQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy04MjYte1xuZnMvb2NmczIvam91cm5hbC5jOjgyNzpcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLCBOVUxMLCB0eXBlKTtcbmZzL29jZnMyL2pvdXJuYWwuYy04MjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMyMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIE9DRlMyIGFuZCBHRlMyIEpvdXJuYWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgb2NmczJgIGNvZGUgYW5kIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBfX29jZnMyX2pvdXJuYWxfYWNjZXNzYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLCB3aGljaCBpcyBmYWlybHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIEhvd2V2ZXIsIEkgYWxzbyBzZWUgdGhpcyBvdGhlciwgc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9uLCBgb2NmczJfam91cm5hbF9hY2Nlc3NgLCBhbmQgdGhhdCYjMzk7cyBnbG9iYWwuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uIG9yIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgc2NvcGUgd2hlbiBJIGNvbWUgYmFjayBhbmQgYXVkaXQgdGhpcyBjb2RlIGxhdGVyLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlIEdGUzIgZmlsZSBzeXN0ZW0gaXMgc3ByaW5naW5nIHRvIG1pbmQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaG93IEdGUzIgaGFuZGxlcyBzb21ldGhpbmcgYW5hbG9nb3VzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgR0ZTMiBjb2RlIGJhc2Ugbm93LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgYGdmczJfYWlsMV9lbXB0eV9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgZnMvZ2ZzMi9sb2cuY2AuIFNlZWluZyBob3cgdGhlIEdGUzIgYXV0aG9ycyBoYW5kbGUgcmVsYXRlZCBjYXNlcyBtYXkgcHJvdmlkZSBzb21lIHVzZWZ1bCBpbnNpZ2h0cyBhbmQgYmVzdC1wcmFjdGljZSBjb25zaWRlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2ZzMl9haWwxX2VtcHR5X29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvbG9nLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9sb2cuYz0yNzg9c3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfdHIoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3RyYW5zICp0cixcbi0tXG5mcy9nZnMyL2xvZy5jLTI5MS0vKipcbmZzL2dmczIvbG9nLmM6MjkyOiAqIGdmczJfYWlsMV9lbXB0eV9vbmUgLSBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zIGluIHRoZSBBSUwgaGFzIGJlZW4gc3luY2VkXG5mcy9nZnMyL2xvZy5jLTI5My0gKiBAc2RwOiB0aGUgZmlsZXN5c3RlbVxuLS1cbmZzL2dmczIvbG9nLmMtMjk5LVxuZnMvZ2ZzMi9sb2cuYzozMDA6c3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXG5mcy9nZnMyL2xvZy5jLTMwMS1cdFx0XHRcdGludCAqbWF4X3Jldm9rZXMpXG4tLVxuZnMvZ2ZzMi9sb2cuYz0zNTI9c3RhdGljIGJvb2wgZ2ZzMl9haWwxX2VtcHR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgbWF4X3Jldm9rZXMpXG4tLVxuZnMvZ2ZzMi9sb2cuYy0zNTktXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZSh0ciwgcywgXHUwMDI2c2RwLVx1MDAzZXNkX2FpbDFfbGlzdCwgdHJfbGlzdCkge1xuZnMvZ2ZzMi9sb2cuYzozNjA6XHRcdGlmICghZ2ZzMl9haWwxX2VtcHR5X29uZShzZHAsIHRyLCBcdTAwMjZtYXhfcmV2b2tlcykgXHUwMDI2XHUwMDI2IG9sZGVzdF90cilcbmZzL2dmczIvbG9nLmMtMzYxLVx0XHRcdGxpc3RfbW92ZShcdTAwMjZ0ci1cdTAwM2V0cl9saXN0LCBcdTAwMjZzZHAtXHUwMDNlc2RfYWlsMl9saXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwODgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBnZnMyX2FpbDFfZW1wdHlfb25lYCoqCgpSaWdodCwgYGdmczJfYWlsMV9lbXB0eV9vbmVgIGlzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MgYWJvdXQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgbGlrZWx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBHRlMyIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGpvdXJuYWwuIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBqYmQyX2ZjX3dhaXRfYnVmc2AgaW4gYGZzL2piZDIvam91cm5hbC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYW5kIGhvdyB0aGlzIHN0YXRpYyB2YXJpYWJsZSBwbGF5cyBhIHJvbGUgaW4gZmxvdyBjb250cm9sIHdpdGhpbiB0aGUgam91cm5hbCwgYW5kIHBhcnRpY3VsYXJseSwgd2hhdCBpbXBhY3QgaXQgaGFzIG9uIGJ1ZmZlciB3YWl0aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBsb3ctbGV2ZWwgY2FsbHMgY29vcmRpbmF0ZSB3aXRoLCBvciBwb3RlbnRpYWxseSBpbmZsdWVuY2UsIEFJTCBvcGVyYXRpb25zIHdpdGhpbiBHRlMyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtqYmQyX2ZjX3dhaXRfYnVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2piZDIvam91cm5hbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2piZDIvam91cm5hbC5jPTg2NT1FWFBPUlRfU1lNQk9MKGpiZDJfZmNfZ2V0X2J1Zik7XG4tLVxuZnMvamJkMi9qb3VybmFsLmMtODcwLSAqL1xuZnMvamJkMi9qb3VybmFsLmM6ODcxOmludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcbmZzL2piZDIvam91cm5hbC5jLTg3Mi17XG4tLVxuZnMvamJkMi9qb3VybmFsLmMtODk4LX1cbmZzL2piZDIvam91cm5hbC5jOjg5OTpFWFBPUlRfU1lNQk9MKGpiZDJfZmNfd2FpdF9idWZzKTtcbmZzL2piZDIvam91cm5hbC5jLTkwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgamJkMl9mY193YWl0X2J1ZnNgIFVzYWdlKioKCkFscmlnaHQsIHNvIGBqYmQyX2ZjX3dhaXRfYnVmc2AgaXMgYSBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gR2xvYmFsIHZhcmlhYmxlcyBhbHdheXMgcmVxdWlyZSBleHRyYSBzY3J1dGlueSBpbiB0aGlzIGNvbnRleHQuIExldCBtZSBzZWUgd2hlcmUgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUgSkJEMiBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGpiZDJfZnJlZXplX2poX2RhdGFgIGZ1bmN0aW9uIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBhIHRyYW5zYWN0aW9uIG1pZ2h0IHN0YWxsIHdhaXRpbmcgZm9yIGJ1ZmZlcnMgdG8gZnJlZSBiZWZvcmUgaXQgY2FuIGJlIGZyb3plbi4gSSB3aWxsIGNoZWNrIHRoZSBgZnMvamJkMi90cmFuc2FjdGlvbi5jYCBmaWxlIGFzIHRoZSBsaWtlbHkgYXJlYSB0byBmaW5kIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBkZWFkbG9jayBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2piZDJfZnJlZXplX2poX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL3RyYW5zYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamJkMi90cmFuc2FjdGlvbi5jPTkwOD1zdGF0aWMgdm9pZCB3YXJuX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTctLyogQ2FsbCB0X2Zyb3plbiB0cmlnZ2VyIGFuZCBjb3B5IGJ1ZmZlciBkYXRhIGludG8gamgtXHUwMDNlYl9mcm96ZW5fZGF0YS4gKi9cbmZzL2piZDIvdHJhbnNhY3Rpb24uYzo5MTg6c3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaClcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTkte1xuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz05NDg9ZG9fZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTEzOS1cdFx0ZnJvemVuX2J1ZmZlciA9IE5VTEw7XG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTE0MDpcdFx0amJkMl9mcmVlemVfamhfZGF0YShqaCk7XG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTE0MS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSkJEMiBBbmFseXNpczogUGlucG9pbnRpbmcgdGhlIEZyZWV6ZSoqCgpSaWdodCwgYGpiZDJfZnJlZXplX2poX2RhdGFgLiBUaGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYuIExldCBtZSBqdXN0IGNvbmZpcm0gd2hlcmUgdGhhdCYjMzk7cyBjYWxsZWQgZnJvbS4uLiBPa2F5LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBsb2NraW5nIHNjaGVtZSBpbiB0aGUgam91cm5hbGluZyBsYXllciBpcyBsaWtlbHkgdG8gYmUgdGhlIHJvb3Qgb2YgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWUsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJhY3RzIHdpdGggd3JpdGVzIGFuZCBmcmVlemluZyB0aGUgam91cm5hbC4KCkxldCYjMzk7cyBkaXZlIGludG8gYGRvX2dldF93cml0ZV9hY2Nlc3NgIHdpdGhpbiBgZnMvamJkMi90cmFuc2FjdGlvbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFjcXVpcmluZyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGpvdXJuYWwuIEl0JiMzOTtzIGNydWNpYWwgdG8gc2VlIGlmIGl0JiMzOTtzIGNvbnRyaWJ1dGluZyB0byBhbnkgbG9jayBjb250ZW50aW9uIG9yIGJsb2NraW5nIHJlbGF0ZWQgdG8gdGhlIGZyZWV6ZSBvcGVyYXRpb24uIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgY29tbW9uIGZ1bmN0aW9uIGlzIGNhdXNpbmcgYm90aCBpc3N1ZXMuIFRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGFuZCB0aGUgam91cm5hbCBmcmVlemUgbWVjaGFuaXNtIGFyZSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgcGF0aCB3aXRoIHNvbWUgZm9jdXNlZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2dldF93cml0ZV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL3RyYW5zYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamJkMi90cmFuc2FjdGlvbi5jPTk0Nz1zdGF0aWMgaW50XG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6OTQ4OmRvX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGpvdXJuYWxfaGVhZCAqamgsXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtOTQ5LVx0XHRcdGludCBmb3JjZV9jb3B5KVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0xMTY5PXN0YXRpYyBib29sIGpiZDJfd3JpdGVfYWNjZXNzX2dyYW50ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIwOS1cdCAqIGRvZXNuJiMzOTt0IGdldCByZW9yZGVyZWQgYW5kIHNlZSBpbmNvbnNpc3RlbnQgc3RhdGUgb2YgY29uY3VycmVudFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjEyMTA6XHQgKiBkb19nZXRfd3JpdGVfYWNjZXNzKCkuXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIxMS1cdCAqL1xuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0xMjMzPWludCBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xMjYyLVx0ICogY29tcGxldGVzIGFueSBvdXRzdGFuZGluZyBJTyBiZWZvcmUgcHJvY2VlZGluZy4gKi9cbmZzL2piZDIvdHJhbnNhY3Rpb24uYzoxMjYzOlx0cmMgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDApO1xuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyNjQtXHRqYmQyX2pvdXJuYWxfcHV0X2pvdXJuYWxfaGVhZChqaCk7XG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTE0MDE9aW50IGpiZDJfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTQyMC1cdCAqL1xuZnMvamJkMi90cmFuc2FjdGlvbi5jOjE0MjE6XHRlcnIgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDEpO1xuZnMvamJkMi90cmFuc2FjdGlvbi5jLTE0MjItXHRpZiAoZXJyKVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0yMTM3PXN0YXRpYyB2b2lkIF9famJkMl9qb3VybmFsX3VuZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpXG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTIxNzItICogV2hvIGVsc2UgaXMgYWZmZWN0ZWQgYnkgdGhpcz8gIGhtbS4uLiAgUmVhbGx5IHRoZSBvbmx5IGNvbnRlbmRlclxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjIxNzM6ICogaXMgZG9fZ2V0X3dyaXRlX2FjY2VzcygpIC0gaXQgY291bGQgYmUgbG9va2luZyBhdCB0aGUgYnVmZmVyIHdoaWxlXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjE3NC0gKiBqb3VybmFsX3RyeV90b19mcmVlX2J1ZmZlcigpIGlzIGNoYW5naW5nIGl0cyBzdGF0ZS4gIEJ1dCB0aGF0XG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTI1MzY9dm9pZCBfX2piZDJfam91cm5hbF9maWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1Ny1cdFx0ICogaW5zdGVhZCBvZiBidWZmZXJfZGlydHkuIFdlIHNob3VsZCBub3Qgc2VlIGEgZGlydHkgYml0IHNldFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjI1NTg6XHRcdCAqIGhlcmUgYmVjYXVzZSB3ZSBjbGVhciBpdCBpbiBkb19nZXRfd3JpdGVfYWNjZXNzIGJ1dCBlLmcuXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1OS1cdFx0ICogdHVuZTJmcyBjYW4gbW9kaWZ5IHRoZSBzYiBhbmQgc2V0IHRoZSBkaXJ0eSBiaXQgYXQgYW55IHRpbWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNTgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoaXMg4oCTIGEgZGlzdGlsbGVkIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFdyaXRlIEFjY2VzcyBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3cml0ZSBhY2Nlc3MgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgamJkMiBqb3VybmFsaW5nIHN5c3RlbS4gVGhlIGNvZGUgaGFzIG1lIGEgYml0IHB1enpsZWQsIHNpbmNlIGBkb19nZXRfd3JpdGVfYWNjZXNzYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIHNjb3BlZCBsb2NhbGx5LCB3aGlsZSBgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3NgIHNlZW1zIHRvIGJlIGdsb2JhbC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJIHdhbnQgdG8gY2xhcmlmeSBob3cgdGhpcyB3b3Jrcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluc2lkZSBgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3NgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaW1wbGVtZW50YXRpb24gZmlsZSBmb3IgdHJhbnNhY3Rpb25zLCB3aGljaCBzaG91bGQgYmUgYGZzL2piZDIvdHJhbnNhY3Rpb24uY2AuIEkmIzM5O2xsIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi90cmFuc2FjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2piZDIvdHJhbnNhY3Rpb24uYz0xMTY5PXN0YXRpYyBib29sIGpiZDJfd3JpdGVfYWNjZXNzX2dyYW50ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIzMi1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYzoxMjMzOmludCBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgV3JpdGUgQWNjZXNzIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzc2Agd29ya3MgYXQgYSBnbG9iYWwgbGV2ZWwuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBwb3RlbnRpYWwgZm9jdXMgcG9pbnRzLCBteSBpbml0aWFsIGxpc3QgaW5jbHVkZWQgYSBsb3Qgb2YgZnVuY3Rpb25zLCBidXQgaXQmIzM5O3MgZ290dGVuIHVucnVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVyY29tcGxpY2F0ZSB0aGluZ3MgaGVyZSwgc28gSSBuZWVkIHRvIHJlZmluZSB0aGF0IGxpc3QgdG8gdGhlIG1vc3QgcmVsZXZhbnQgb3BlcmF0aW9ucy4KCkkmIzM5O20gemVyb2luZyBpbiBvbiB0aGluZ3MgdGhhdCBkaXJlY3RseSB0b3VjaCBidWZmZXIgd3JpdGVzOiBgYmhfZW5kX3dyaXRlYCwgYGJoX2VuZF9hc3luY193cml0ZWAsIHRoZSBmcmVlaW5nIG9mIGJ1ZmZlcnMgd2l0aCBgX19iZm9yZ2V0YCwgc3luY2luZyBkaXJ0eSBidWZmZXJzIHdpdGggYF9fc3luY19kaXJ0eV9idWZmZXJgLCBhbmQgdGhlIGpvdXJuYWwgd3JpdGVzIGxpa2UgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgIGFuZCBjb21taXRzIHdpdGggYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gLiBJJiMzOTtsbCBhbHNvIHdhdGNoIGBqYmQyX2ZjX3dhaXRfYnVmc2AuIFRoZW4gdGhlcmUgYXJlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgd3JpdGVzIGxpa2UgYG9jZnMyX3dyaXRlX2Jsb2NrYCwgYGZhdF9zeW5jX2Joc2AsIGBleGZhdF91cGRhdGVfYmhzYCwgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGFuZCBgZ2ZzMl9waW5gLiBJIHRoaW5rIHRoaXMgbGlzdCBjb3ZlcnMgdGhlIGhpZ2gtbGV2ZWwgd3JpdGUgcGF0aHdheXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZXNlIHdyaXRlcy4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIHJlbGV2YW50IGluY2x1ZGUgYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgRVhGQVRfRlNgLCBgQURGU19GU2AsIGBFWFQyX0ZTYCwgYW5kIGBPTUZTX0ZTYC4KCkdpdmVuIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYEpCRDJgIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBzZWxlY3RlZCB3aGVuIGBFWFQ0X0ZTYCBvciBgT0NGUzJfRlNgIGFyZSBzZWxlY3RlZCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBpbmNsdWRlIGl0IHRvIGJlIHNhZmUsIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIG5lZWQgdG8gZXhjbHVkZSBpdCBpbiBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uCgpJJiMzOTttIGFsc28gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZnMvYnVmZmVyLmNgIGZvciBga21hcF9sb2NhbF9iaGAgYW5kIGBrdW5tYXBfbG9jYWxfYmhgLCB3aGljaCBJIHJlbWVtYmVyIGFyZSBhY3R1YWxseSBpbmxpbmUgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhleSB3b3JrIGluIGNvbnRleHQgb2YgdGhlIHdyaXRlLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgYGZzL2piZDIvY29tbWl0LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNoZWNrc3VtIGZ1bmN0aW9ucywgbGlrZSBgamJkMl9jaGVja3N1bV9kYXRhYCBhbmQgYGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0YCB0aGF0IGFyZSByZWxldmFudCBoZXJlLiBUaGF0IHNob3VsZCBmaWxsIG91dCB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7amJkMl9jaGVja3N1bV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2NvbW1pdC5jPTI4Mj1zdGF0aWMgaW50IGpvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9jb21taXQuYy0zMjctXG5mcy9qYmQyL2NvbW1pdC5jOjMyODpzdGF0aWMgX191MzIgamJkMl9jaGVja3N1bV9kYXRhKF9fdTMyIGNyYzMyX3N1bSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmZzL2piZDIvY29tbWl0LmMtMzI5LXtcbi0tXG5mcy9qYmQyL2NvbW1pdC5jPTM3Nj12b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2piZDIvY29tbWl0LmMtNzQ0LVx0XHRcdFx0XHRjcmMzMl9zdW0gPVxuZnMvamJkMi9jb21taXQuYzo3NDU6XHRcdFx0XHRcdCAgICBqYmQyX2NoZWNrc3VtX2RhdGEoY3JjMzJfc3VtLCBiaCk7XG5mcy9qYmQyL2NvbW1pdC5jLTc0Ni1cdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgSW50ZWdyaXR5IG9mIEpvdXJuYWxpbmcgRGF0YSBTdHJ1Y3R1cmVzKioKClJpZ2h0LCBgamJkMl9jaGVja3N1bV9kYXRhYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBob2xkcyBjb25zdGFudHMgb3IgcG90ZW50aWFsbHkgcHJlLWNhbGN1bGF0ZWQgdmFsdWVzIHJlbGF0ZWQgdG8gY2hlY2tzdW0gY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgamJkMiBqb3VybmFsaW5nIHN5c3RlbS4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgYSBmaXhlZCBwYXJ0IG9mIHRoZSBkYXRhIGludGVncml0eSBwcm9jZXNzLiBOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzIHRvIGhvdyB0aG9zZSBjaGVja3N1bXMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBhcHBsaWVkIGR1cmluZyB0aGUgam91cm5hbCB1cGRhdGUgcHJvY2Vzcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGZ1bmN0aW9uIGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCYjMzk7cyBsaWtlbHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBhY3R1YWwgY2hlY2tzdW0gdmFsdWVzIG9uIGEgYmxvY2sgdGFnLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLCBob3cgaXQgY2FsY3VsYXRlcyBhbmQgYXBwbGllcyB0aGUgY2hlY2tzdW0sIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBhcmVhcyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIGVuc3VyaW5nIGpvdXJuYWwgZGF0YSYjMzk7cyBpbnRlZ3JpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2piZDJfYmxvY2tfdGFnX2NzdW1fc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2NvbW1pdC5jPTM0MD1zdGF0aWMgdm9pZCB3cml0ZV90YWdfYmxvY2soam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4tLVxuZnMvamJkMi9jb21taXQuYy0zNDctXG5mcy9qYmQyL2NvbW1pdC5jOjM0ODpzdGF0aWMgdm9pZCBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldChqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcbmZzL2piZDIvY29tbWl0LmMtMzQ5LVx0XHRcdFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIF9fdTMyIHNlcXVlbmNlKVxuLS1cbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvamJkMi9jb21taXQuYy03MDQtXHRcdHRhZy1cdTAwM2V0X2ZsYWdzID0gY3B1X3RvX2JlMTYodGFnX2ZsYWcpO1xuZnMvamJkMi9jb21taXQuYzo3MDU6XHRcdGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0KGpvdXJuYWwsIHRhZywgd2J1ZltidWZzXSxcbmZzL2piZDIvY29tbWl0LmMtNzA2LVx0XHRcdFx0XHRjb21taXRfdHJhbnNhY3Rpb24tXHUwMDNldF90aWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM3MAoJCQkJCQkJb3V0cHV0OiAzNTcKCQkJCQkJCXRob3VnaHRzOiA2MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29yZSBLZXJuZWwgQ2hhbmdlcyBXYXJyYW50IEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gc29tZSAqdmVyeSogaW1wb3J0YW50IGFyZWFzLiBUaGUgZmFjdCB0aGF0IGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAgaXMgc3RhdGljIGlzbiYjMzk7dCByZWFsbHkgcmVsZXZhbnQsIGJ1dCB3aGF0IGl0ICpkb2VzKiBjaGFuZ2UgaXMuCgpJdCYjMzk7cyBoaXR0aW5nIGBmcy9idWZmZXIuY2AsIGEgdG9uIG9mIHRoZSBmaWxlc3lzdGVtcyDigJMgYGpiZDJgLCBgZXh0NGAsIGBnZnMyYCwgYG9jZnMyYCwgYGZhdGAsIGBleGZhdGAsIGBhZGZzYCwgYGV4dDJgLCBhbmQgYG9tZnNgIOKAkyB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBvbmUgZmlsZXN5c3RlbTsgdGhpcyBpcyBicm9hZC4gSXQmIzM5O3MgdG91Y2hpbmcgaG93IHdlIGhhbmRsZSBhbmQgY2hlY2sgZm9yIHdyaXRlIGVycm9ycywgd2hpY2ggaXMgY3JpdGljYWwuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGBrbWFwX2xvY2FsX2JoYCBhbmQgYGt1bm1hcF9sb2NhbF9iaGAgd2l0aGluIGBmcy9qYmQyL2NvbW1pdC5jYCBpcyBpbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyB3ZSYjMzk7cmUgbWFwcGluZyBtZW1vcnkgZm9yIGJsb2NrIEkvTywgYW5kIHRoYXQgYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFBsdXMsIGl0JiMzOTtzIHVwZGF0aW5nIGBmcy9qYmQyL2pvdXJuYWwuY2AgdG8gaGFuZGxlIHRoZSBgYl9mcm96ZW5fZGF0YWAgc2NlbmFyaW8gd2l0aG91dCBnZW5lcmF0aW5nIGEgZmFrZSBmb2xpbywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIHRob3VnaHQgdG8gcHJldmVudCByZWdyZXNzaW9ucy4KClRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgYGZzL2J1ZmZlci5jYCB0byBkZWFsIHdpdGggYGJoLSZndDtiX2ZvbGlvID09IE5VTExgIGluIGBfX2JoX3N1Ym1pdGAsIGFuZCBlbXBsb3lpbmcgYGJpb19hZGRfdmlydF9ub2ZhaWxgIGluc3RlYWQgb2YgYGJpb19hZGRfZm9saW9fbm9mYWlsYCwgaXMgYSByZWQgZmxhZy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIGhvdyB3ZSBkZWFsIHdpdGggdGhlIGJsb2NrIGxheWVyLgoKU28sIHRoaXMgbG9va3MgbGlrZSBhIGNvcmUga2VybmVsIGNoYW5nZSwgd2l0aCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBWRlMsIGJsb2NrIGxheWVyLCAqYW5kKiBtdWx0aXBsZSBmaWxlc3lzdGVtcy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggSSBrbm93IHJlcXVpcmVzIHJpZ29yb3VzIGZ1enppbmcuIEdpdmVuIHRoZSBicmVhZHRoIG9mIHRoZSBpbXBhY3QsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpJJiMzOTtsbCBiZSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gc3ltYm9scyBsaWtlIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYF9fYmZvcmdldGAsIGBfX3N5bmNfZGlydHlfYnVmZmVyYCwgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLCBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAsIGBqYmQyX2ZjX3dhaXRfYnVmc2AsIGBvY2ZzMl93cml0ZV9ibG9ja2AsIGBmYXRfc3luY19iaHNgLCBgZXhmYXRfdXBkYXRlX2Joc2AsIGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCwgYW5kIGBnZnMyX3BpbmAuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGNvbmZpZ3VyYXRpb25zIGZvciBhbGwgdGhlIGFmZmVjdGVkIGZpbGVzeXN0ZW1zOiBgRVhUNF9GU2AsIGBKQkQyYCwgYEdGUzJfRlNgLCBgT0NGUzJfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLgoKVGhlIGNoYW5nZXMgdG91Y2ggZnVuZGFtZW50YWwgYnVmZmVyX2hlYWQgbG9naWM6IHdyaXRlIGVycm9yIHRyYWNraW5nIChgYnVmZmVyX3dyaXRlX2lvX2Vycm9yYCB2cy4gYGJ1ZmZlcl91cHRvZGF0ZWApIGFuZCB0aGUgdXNlIG9mIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGVzcGVjaWFsbHkgaW4gdGhlIGBiX2Zyb3plbl9kYXRhYCBjb250ZXh0IG9mIGpiZDIpLiBHaXZlbiB0aGUgd2lkZXNwcmVhZCBjaGFuZ2VzIGluIGNvcmUgY29tcG9uZW50cywgSSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIGEgdG9wIHByaW9yaXR5LCBhbmQgZnV6emluZyBpcyB0aGUga2V5IHRvIGNhdGNoaW5nIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBoYXZlIGNyZXB0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtKQkQyJiMzNDssCiAgICAmIzM0O0dGUzJfRlMmIzM0OywKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtFWEZBVF9GUyYjMzQ7LAogICAgJiMzNDtBREZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDJfRlMmIzM0OywKICAgICYjMzQ7T01GU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JoX2VuZF93cml0ZSYjMzQ7LAogICAgJiMzNDtiaF9lbmRfYXN5bmNfd3JpdGUmIzM0OywKICAgICYjMzQ7X19iZm9yZ2V0JiMzNDssCiAgICAmIzM0O19fc3luY19kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uJiMzNDssCiAgICAmIzM0O2piZDJfZmNfd2FpdF9idWZzJiMzNDssCiAgICAmIzM0O29jZnMyX3dyaXRlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2JocyYjMzQ7LAogICAgJiMzNDtleGZhdF91cGRhdGVfYmhzJiMzNDssCiAgICAmIzM0O19fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7Z2ZzMl9waW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBidWZmZXJfaGVhZCBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3cml0ZSBlcnJvciB0cmFja2luZyAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yIHZzIGJ1ZmZlcl91cHRvZGF0ZSkgYW5kIHN1cHBvcnQgZm9yIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGUuZy4sIGZvciBiX2Zyb3plbl9kYXRhIGluIGpiZDIpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoZXh0NCwgamJkMiwgZ2ZzMiwgb2NmczIsIGZhdCwgZXhmYXQsIGFkZnMsIGV4dDIsIG9tZnMpIGFuZCB0aGUgY29yZSBibG9jayBsYXllci4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzICh2aWEgdGhlIG5ldyBrbWFwX2xvY2FsX2JoL2Jpb19hZGRfdmlydF9ub2ZhaWwgcGF0aHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0pCRDImIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDssCiAgICAmIzM0O0FERlNfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtPTUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmhfZW5kX3dyaXRlJiMzNDssCiAgICAmIzM0O2JoX2VuZF9hc3luY193cml0ZSYjMzQ7LAogICAgJiMzNDtfX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OywKICAgICYjMzQ7amJkMl9mY193YWl0X2J1ZnMmIzM0OywKICAgICYjMzQ7b2NmczJfd3JpdGVfYmxvY2smIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfYmhzJiMzNDssCiAgICAmIzM0O2V4ZmF0X3VwZGF0ZV9iaHMmIzM0OywKICAgICYjMzQ7X19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtnZnMyX3BpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowMTowNS41MzE3MDg2NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4NzA2NTk2NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkpCRDJcIixcbiAgICBcIkdGUzJfRlNcIixcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiLFxuICAgIFwiRVhGQVRfRlNcIixcbiAgICBcIkFERlNfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk9NRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaF9lbmRfd3JpdGVcIixcbiAgICBcImJoX2VuZF9hc3luY193cml0ZVwiLFxuICAgIFwiX19iZm9yZ2V0XCIsXG4gICAgXCJfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uXCIsXG4gICAgXCJqYmQyX2ZjX3dhaXRfYnVmc1wiLFxuICAgIFwib2NmczJfd3JpdGVfYmxvY2tcIixcbiAgICBcImZhdF9zeW5jX2Joc1wiLFxuICAgIFwiZXhmYXRfdXBkYXRlX2Joc1wiLFxuICAgIFwiX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YVwiLFxuICAgIFwiZ2ZzMl9waW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjA1LjUzMTcxNDY1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3NDkwNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjY4OGM2ODBjNTlmYzdlOWZiYzY0MzJhNWVjZjc2NDFkMDE4ZWEwM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIwOjAxOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2FkZnMvZGlyLmMgYi9mcy9hZGZzL2Rpci5jXFxuaW5kZXggMTFhZmE5ZTE1N2FhNy4uYjhjYzZhNjk3YTA1ZCAxMDA2NDRcXG4tLS0gYS9mcy9hZGZzL2Rpci5jXFxuKysrIGIvZnMvYWRmcy9kaXIuY1xcbkBAIC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxcbiBcXHRmb3IgKGkgPSBkaXItXFx1MDAzZW5yX2J1ZmZlcnMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSkge1xcbiBcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gZGlyLVxcdTAwM2ViaHNbaV07XFxuIFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKVxcbitcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuY1xcbmluZGV4IGJlOGI1N2E2MzVjZDguLjY4ZWEwZWY4NDcwZWUgMTAwNjQ0XFxuLS0tIGEvZnMvYnVmZmVyLmNcXG4rKysgYi9mcy9idWZmZXIuY1xcbkBAIC0yMDMsMTEgKzIwMywxMCBAQCB2b2lkIGJoX2VuZF93cml0ZShzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFxcdTAwMjZiaCk7XFxuIFxcbiBcXHRpZiAoc3VjY2Vzcykge1xcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0XFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0YnVmZmVyX2lvX2Vycm9yKGJoLCBcXFwiLCBsb3N0IHN5bmMgcGFnZSB3cml0ZVxcXCIpO1xcbiBcXHRcXHRtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuLVxcdFxcdGNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuIFxcdH1cXG4gXFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuIH1cXG5AQCAtNDM3LDExICs0MzYsMTAgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxcbiBcXG4gXFx0Zm9saW8gPSBiaC1cXHUwMDNlYl9mb2xpbztcXG4gXFx0aWYgKHN1Y2Nlc3MpIHtcXG4tXFx0XFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuK1xcdFxcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGJ1ZmZlcl9pb19lcnJvcihiaCwgXFxcIiwgbG9zdCBhc3luYyBwYWdlIHdyaXRlXFxcIik7XFxuIFxcdFxcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4gXFx0fVxcbiBcXG4gXFx0Zmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcXG5AQCAtNjE4LDcgKzYxNiw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcXG4gXFx0XFx0fVxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW1iLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbi1cXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXFxuK1xcdFxcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxcbiBcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHRcXHRicmVsc2UoYmgpO1xcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tYi1cXHUwMDNlbG9jayk7XFxuQEAgLTEwOTEsNiArMTA4OSw3IEBAIEVYUE9SVF9TWU1CT0woX19icmVsc2UpO1xcbiB2b2lkIF9fYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiB7XFxuIFxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XFxuK1xcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuIFxcdHJlbW92ZV9hc3NvY19xdWV1ZShiaCk7XFxuIFxcdF9fYnJlbHNlKGJoKTtcXG4gfVxcbkBAIC0xMDk5LDEyICsxMDk4LDE2IEBAIEVYUE9SVF9TWU1CT0woX19iZm9yZ2V0KTtcXG4gc3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4gXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaylcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoYmgtXFx1MDAzZWJfZm9saW8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBleHQ0IGpvdXJuYWwgKGpiZDIpIGNhbiBzdWJtaXQgYSBidWZmZXJfaGVhZCBpdCBkaXJlY3RseSBjcmVhdGVkXFxuLVxcdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgcGFnZS4gIGZzY3J5cHQgZG9lc24ndCBjYXJlIGFib3V0IHRoZXNlLlxcbitcXHQgKiBmb3IgbWVtb3J5IHRoYXQgaXMgbm90IGluIHRoZSBwYWdlIGNhY2hlIGF0IGFsbC4gIGZzY3J5cHQgZG9lc24ndFxcbitcXHQgKiBjYXJlIGFib3V0IHRoZXNlLlxcbiBcXHQgKi9cXG4rXFx0aWYgKCFiaC1cXHUwMDNlYl9mb2xpbylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtYXBwaW5nID0gYmgtXFx1MDAzZWJfZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuIFxcdGlmICghbWFwcGluZylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRmc2NyeXB0X3NldF9iaW9fY3J5cHRfY3R4KGJpbywgbWFwcGluZy1cXHUwMDNlaG9zdCxcXG5AQCAtMTExNSw3ICsxMTE4LDYgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbiBcXHRcXHRiaW9fZW5kX2lvX3QgZW5kX2JpbylcXG4ge1xcbi1cXHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcXHUwMDI2IFJFUV9PUF9NQVNLO1xcbiBcXHRzdHJ1Y3QgYmlvICpiaW87XFxuIFxcbiBcXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcXG5AQCAtMTEyMywxMSArMTEyNSw3IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXFxuIFxcdEJVR19PTihidWZmZXJfZGVsYXkoYmgpKTtcXG4gXFx0QlVHX09OKGJ1ZmZlcl91bndyaXR0ZW4oYmgpKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE9ubHkgY2xlYXIgb3V0IGEgd3JpdGUgZXJyb3Igd2hlbiByZXdyaXRpbmdcXG4tXFx0ICovXFxuLVxcdGlmICh0ZXN0X3NldF9idWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAob3AgPT0gUkVRX09QX1dSSVRFKSlcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4rXFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xcbiBcXG4gXFx0aWYgKGJ1ZmZlcl9tZXRhKGJoKSlcXG4gXFx0XFx0b3BmIHw9IFJFUV9NRVRBO1xcbkBAIC0xMTQyLDcgKzExNDAsMTEgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJoLVxcdTAwM2ViX2Jsb2NrbnIgKiAoYmgtXFx1MDAzZWJfc2l6ZSBcXHUwMDNlXFx1MDAzZSA5KTtcXG4gXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gd3JpdGVfaGludDtcXG4gXFxuLVxcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtXFx1MDAzZWJfZm9saW8sIGJoLVxcdTAwM2ViX3NpemUsIGJoX29mZnNldChiaCkpO1xcbitcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuK1xcdFxcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtXFx1MDAzZWJfZm9saW8sIGJoLVxcdTAwM2ViX3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgYmhfb2Zmc2V0KGJoKSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YmlvX2FkZF92aXJ0X25vZmFpbChiaW8sIGJoLVxcdTAwM2ViX2RhdGEsIGJoLVxcdTAwM2ViX3NpemUpO1xcbiBcXG4gXFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xcbiBcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBiaDtcXG5AQCAtMTE1Miw3ICsxMTU0LDggQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFxuIFxcdGlmICh3YmMpIHtcXG4gXFx0XFx0d2JjX2luaXRfYmlvKHdiYywgYmlvKTtcXG4tXFx0XFx0d2JjX2FjY291bnRfY2dyb3VwX293bmVyKHdiYywgYmgtXFx1MDAzZWJfZm9saW8sIGJoLVxcdTAwM2ViX3NpemUpO1xcbitcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuK1xcdFxcdFxcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVxcdTAwM2ViX2ZvbGlvLCBiaC1cXHUwMDNlYl9zaXplKTtcXG4gXFx0fVxcbiBcXG4gXFx0YmxrX2NyeXB0b19zdWJtaXRfYmlvKGJpbyk7XFxuQEAgLTE1MDgsNyArMTUxMSw3IEBAIEVYUE9SVF9TWU1CT0woZm9saW9fc2V0X2JoKTtcXG4gLyogQml0cyB0aGF0IGFyZSBjbGVhcmVkIGR1cmluZyBhbiBpbnZhbGlkYXRlICovXFxuICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXFxcXFxcbiBcXHQoMSBcXHUwMDNjXFx1MDAzYyBCSF9NYXBwZWQgfCAxIFxcdTAwM2NcXHUwMDNjIEJIX05ldyB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfUmVxIHwgXFxcXFxcbi1cXHQgMSBcXHUwMDNjXFx1MDAzYyBCSF9EZWxheSB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfVW53cml0dGVuKVxcbitcXHQgMSBcXHUwMDNjXFx1MDAzYyBCSF9EZWxheSB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfVW53cml0dGVuIHwgMSBcXHUwMDNjXFx1MDAzYyBCSF9Xcml0ZV9FSU8pXFxuIFxcbiBzdGF0aWMgdm9pZCBkaXNjYXJkX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaClcXG4ge1xcbkBAIC0yNzMzLDcgKzI3MzYsNyBAQCBpbnQgX19zeW5jX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MpXFxuIFxcbiBcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbiBcXHRcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4rXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jXFxuaW5kZXggNmYxMWE5NmE0ZmZhOC4uZGZkMGJiZjMxYzk0MCAxMDA2NDRcXG4tLS0gYS9mcy9leGZhdC9taXNjLmNcXG4rKysgYi9mcy9leGZhdC9taXNjLmNcXG5AQCAtMTg3LDcgKzE4Nyw3IEBAIGludCBleGZhdF91cGRhdGVfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocywgaW50IHN5bmMpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfYmhzIFxcdTAwMjZcXHUwMDI2IHN5bmM7IGkrKykge1xcbiBcXHRcXHR3YWl0X29uX2J1ZmZlcihiaHNbaV0pO1xcbi1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXFxuK1xcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaHNbaV0pKVxcbiBcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHR9XFxuIFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuY1xcbmluZGV4IGJlNjNmODk0MDJhMzguLjM5MDA1ZWMyM2ZlNWQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi94YXR0ci5jXFxuKysrIGIvZnMvZXh0Mi94YXR0ci5jXFxuQEAgLTc2OSw3ICs3NjksNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXFxuIFxcdFxcdGlmIChJU19TWU5DKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihuZXdfYmgpO1xcbiBcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfcmVxKG5ld19iaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShuZXdfYmgpKVxcbitcXHRcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKG5ld19iaCkpXFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMgYi9mcy9leHQ0L2V4dDRfamJkMi5jXFxuaW5kZXggMDJiMDY2Mjk5MTY0OS4uZjMzOGQ2ZTNjMjlmNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jXFxuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xcbkBAIC00MTMsNyArNDEzLDcgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbiBcXHRcXHRcXHRcXHRleHQ0X2Vycm9yX2lub2RlX2Vycihpbm9kZSwgd2hlcmUsIGxpbmUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiSU8gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2tcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXFxuaW5kZXggOGUyMjU5Nzk5NjE0ZS4uOTU5OTg4MjdmZjAxMSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG4rKysgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG5AQCAtMjAzLDE3ICsyMDMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfc2V0X3NuYXBfZXJyKGludCAqc25hcF9lcnIsIGludCBlcnIpXFxuIHN0YXRpYyB2b2lkIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRib29sIHVwdG9kYXRlID0gYmlvX2VuZGlvX2JoKGJpbywgXFx1MDAyNmJoKTtcXG4rXFx0Ym9vbCBzdWNjZXNzID0gYmlvX2VuZGlvX2JoKGJpbywgXFx1MDAyNmJoKTtcXG4gXFxuIFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcIlxcXCIpO1xcbi1cXHRpZiAodXB0b2RhdGUpIHtcXG4tXFx0XFx0ZXh0NF9kZWJ1ZyhcXFwiJXM6IEJsb2NrICVsbGQgdXAtdG8tZGF0ZVxcXCIsXFxuK1xcdGlmIChzdWNjZXNzKSB7XFxuK1xcdFxcdGV4dDRfZGVidWcoXFxcIiVzOiBCbG9jayAlbGxkIHdyaXR0ZW5cXFwiLFxcbiBcXHRcXHRcXHQgICBfX2Z1bmNfXywgYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuLVxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbitcXHRcXHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRleHQ0X2RlYnVnKFxcXCIlczogQmxvY2sgJWxsZCBub3QgdXAtdG8tZGF0ZVxcXCIsXFxuK1xcdFxcdGV4dDRfZGVidWcoXFxcIiVzOiBCbG9jayAlbGxkIHdyaXRlIGZhaWxlZFxcXCIsXFxuIFxcdFxcdFxcdCAgIF9fZnVuY19fLCBiaC1cXHUwMDNlYl9ibG9ja25yKTtcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0XFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xcbiBcXHR9XFxuIFxcbiBcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tbXAuYyBiL2ZzL2V4dDQvbW1wLmNcXG5pbmRleCA3Y2UzNjE0ODRiMzgyLi40YjE4ZGRlZjQ2OGQ3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbW1wLmNcXG4rKysgYi9mcy9leHQ0L21tcC5jXFxuQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLFxcbiBcXHRcXHRcXHRiaF9lbmRfd3JpdGUpO1xcbiBcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuLVxcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXFxuK1xcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXFxuaW5kZXggYmUxOGY2YjU4MTliYS4uNGE0Y2QwMTExZTQ3YSAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbWlzYy5jXFxuKysrIGIvZnMvZmF0L21pc2MuY1xcbkBAIC0zNTYsNyArMzU2LDcgQEAgaW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfYmhzOyBpKyspIHtcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmhzW2ldKTtcXG4tXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaHNbaV0pKVxcbitcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmhzW2ldKSlcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gXFx0fVxcbiBcXHRyZXR1cm4gZXJyO1xcbmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuY1xcbmluZGV4IDc4YmJhOGNjMTBiOGYuLmUzZTBkY2IxZjU2NzMgMTAwNjQ0XFxuLS0tIGEvZnMvZ2ZzMi9sb2cuY1xcbisrKyBiL2ZzL2dmczIvbG9nLmNcXG5AQCAtMTA3LDcgKzEwNyw3IEBAIF9fYWNxdWlyZXMoXFx1MDAyNnNkcC1cXHUwMDNlc2RfYWlsX2xvY2spXFxuIFxcdFxcdGdmczJfYXNzZXJ0KHNkcCwgYmQtXFx1MDAzZWJkX3RyID09IHRyKTtcXG4gXFxuIFxcdFxcdGlmICghYnVmZmVyX2J1c3koYmgpKSB7XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfdXB0b2RhdGUoYmgpKSB7XFxuK1xcdFxcdFxcdGlmICghYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbiBcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmJkLVxcdTAwM2ViZF9haWxfc3RfbGlzdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHItXFx1MDAzZXRyX2FpbDJfbGlzdCk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXFxuIFxcdFxcdFxcdGFjdGl2ZV9jb3VudCsrO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFjbXB4Y2hnKFxcdTAwMjZzZHAtXFx1MDAzZXNkX2xvZ19lcnJvciwgMCwgLUVJTykpXFxuIFxcdFxcdFxcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XFxuIFxcdFxcdC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmNcXG5pbmRleCA2ZGFiZTczYWQ3OTBkLi43NDQwZTViNzJmOGFkIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvbG9wcy5jXFxuKysrIGIvZnMvZ2ZzMi9sb3BzLmNcXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGdmczJfcGluKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRpZiAodGVzdF9zZXRfYnVmZmVyX3Bpbm5lZChiaCkpXFxuIFxcdFxcdGdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7XFxuLVxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4rXFx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpIHx8IGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXFxuIFxcdFxcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XFxuIFxcdGJkID0gYmgtXFx1MDAzZWJfcHJpdmF0ZTtcXG4gXFx0LyogSWYgdGhpcyBidWZmZXIgaXMgaW4gdGhlIEFJTCBhbmQgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuXFxuQEAgLTE3OSw2ICsxNzksOCBAQCBzdGF0aWMgdm9pZCBnZnMyX2VuZF9sb2dfd3JpdGVfYmgoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuIFxcdFxcdG5leHQgPSBiaC1cXHUwMDNlYl90aGlzX3BhZ2U7XFxuIFxcdFxcdHNpemUgLT0gYmgtXFx1MDAzZWJfc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmNcXG5pbmRleCAzMDI5Y2I2ZjZkNjQwLi5lYmY2YmE1OGZmNGQwIDEwMDY0NFxcbi0tLSBhL2ZzL2piZDIvY29tbWl0LmNcXG4rKysgYi9mcy9qYmQyL2NvbW1pdC5jXFxuQEAgLTMyLDE0ICszMiwxNCBAQFxcbiBzdGF0aWMgdm9pZCBqb3VybmFsX2VuZF9idWZmZXJfaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFxcdTAwMjZiaCk7XFxuK1xcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFxcdTAwMjZiaCk7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqb3JpZ19iaCA9IGJoLVxcdTAwM2ViX3ByaXZhdGU7XFxuIFxcbiBcXHRCVUZGRVJfVFJBQ0UoYmgsIFxcXCJcXFwiKTtcXG4tXFx0aWYgKHVwdG9kYXRlKVxcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0aWYgKHN1Y2Nlc3MpXFxuK1xcdFxcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0XFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xcbiBcXHRpZiAob3JpZ19iaCkge1xcbiBcXHRcXHRjbGVhcl9hbmRfd2FrZV91cF9iaXQoQkhfU2hhZG93LCBcXHUwMDI2b3JpZ19iaC1cXHUwMDNlYl9zdGF0ZSk7XFxuIFxcdH1cXG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBpbnQgam91cm5hbF93YWl0X29uX2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLFxcbiBcXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xcbiBcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxcbitcXHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpXFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdHB1dF9iaChiaCk7ICAgICAgICAgICAgLyogT25lIGZvciBnZXRibGsoKSAqL1xcbiBcXG5AQCAtMzMwLDkgKzMzMCw5IEBAIHN0YXRpYyBfX3UzMiBqYmQyX2NoZWNrc3VtX2RhdGEoX191MzIgY3JjMzJfc3VtLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXHRjaGFyICphZGRyO1xcbiBcXHRfX3UzMiBjaGVja3N1bTtcXG4gXFxuLVxcdGFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVxcdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcXG4rXFx0YWRkciA9IGttYXBfbG9jYWxfYmgoYmgpO1xcbiBcXHRjaGVja3N1bSA9IGNyYzMyX2JlKGNyYzMyX3N1bSwgYWRkciwgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuLVxcdGt1bm1hcF9sb2NhbChhZGRyKTtcXG4rXFx0a3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTtcXG4gXFxuIFxcdHJldHVybiBjaGVja3N1bTtcXG4gfVxcbkBAIC0zNTcsMTAgKzM1NywxMCBAQCBzdGF0aWMgdm9pZCBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldChqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0c2VxID0gY3B1X3RvX2JlMzIoc2VxdWVuY2UpO1xcbi1cXHRhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XFxuK1xcdGFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTtcXG4gXFx0Y3N1bTMyID0gamJkMl9jaGtzdW0oai1cXHUwMDNlal9jc3VtX3NlZWQsIChfX3U4ICopXFx1MDAyNnNlcSwgc2l6ZW9mKHNlcSkpO1xcbiBcXHRjc3VtMzIgPSBqYmQyX2Noa3N1bShjc3VtMzIsIGFkZHIsIGJoLVxcdTAwM2ViX3NpemUpO1xcbi1cXHRrdW5tYXBfbG9jYWwoYWRkcik7XFxuK1xcdGt1bm1hcF9sb2NhbF9iaChiaCwgYWRkcik7XFxuIFxcbiBcXHRpZiAoamJkMl9oYXNfZmVhdHVyZV9jc3VtMyhqKSlcXG4gXFx0XFx0dGFnMy1cXHUwMDNldF9jaGVja3N1bSA9IGNwdV90b19iZTMyKGNzdW0zMik7XFxuQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxcbiBcXHRcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxcbiBcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHRcXHRqYmQyX3VuZmlsZV9sb2dfYmgoYmgpO1xcbiBcXHRcXHRzdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZCsrO1xcbkBAIC04NzcsNyArODc3LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXFxuK1xcdFxcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gXFxuIFxcdFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcInBoNTogY29udHJvbCBidWZmZXIgd3JpdGVvdXQgZG9uZTogdW5maWxlXFxcIik7XFxuZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmNcXG5pbmRleCAwOWVmYTMzNzY0OWUyLi43MmU4Y2NiZjdkZTRlIDEwMDY0NFxcbi0tLSBhL2ZzL2piZDIvam91cm5hbC5jXFxuKysrIGIvZnMvamJkMi9qb3VybmFsLmNcXG5AQCAtMzI3LDggKzMyNyw2IEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbiB7XFxuIFxcdGludCBkb19lc2NhcGUgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaDtcXG4tXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW87XFxuLVxcdHVuc2lnbmVkIGludCBuZXdfb2Zmc2V0O1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX2luID0gamgyYmgoamhfaW4pO1xcbiBcXHRqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi1cXHUwMDNldF9qb3VybmFsO1xcbiBcXG5AQCAtMzQ4LDI0ICszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXFxuIFxcdC8qIGtlZXAgc3Vic2VxdWVudCBhc3NlcnRpb25zIHNhbmUgKi9cXG4gXFx0YXRvbWljX3NldChcXHUwMDI2bmV3X2JoLVxcdTAwM2ViX2NvdW50LCAxKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGVcXG4rXFx0ICogc2hhZG93IGJ1ZmZlciBnZXRzIG5vIGZvbGlvIGF0IGFsbDogYl9mb2xpbyBzdGF5cyBOVUxMIGZyb20gdGhlXFxuK1xcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxcbitcXHQgKiB0aGUgc2xhYiBmb2xpbyBpbnN0ZWFkIHdvdWxkIGhhbmQgaXRzIG92ZXJsb2FkZWQgLVxcdTAwM2VtYXBwaW5nIHRvXFxuK1xcdCAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLlxcbitcXHQgKi9cXG4rXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2amhfaW4tXFx1MDAzZWJfc3RhdGVfbG9jayk7XFxuIFxcdC8qXFxuIFxcdCAqIElmIGEgbmV3IHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGRvbmUgYSBidWZmZXIgY29weS1vdXQsIHRoZW5cXG4gXFx0ICogd2UgdXNlIHRoYXQgdmVyc2lvbiBvZiB0aGUgZGF0YSBmb3IgdGhlIGNvbW1pdC5cXG4gXFx0ICovXFxuIFxcdGlmIChqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSkge1xcbi1cXHRcXHRuZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4tXFx0XFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4gXFx0XFx0ZG9fZXNjYXBlID0gamJkMl9kYXRhX25lZWRzX2VzY2FwaW5nKGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4gXFx0XFx0aWYgKGRvX2VzY2FwZSlcXG4gXFx0XFx0XFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSk7XFxuK1xcdFxcdG5ld19iaC1cXHUwMDNlYl9kYXRhID0gamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGE7XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBiaF9pbi1cXHUwMDNlYl9mb2xpbztcXG4rXFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgYmhfaW4tXFx1MDAzZWJfZGF0YSk7XFxuIFxcdFxcdGNoYXIgKnRtcDtcXG4gXFx0XFx0Y2hhciAqbWFwcGVkX2RhdGE7XFxuIFxcbi1cXHRcXHRuZXdfZm9saW8gPSBiaF9pbi1cXHUwMDNlYl9mb2xpbztcXG4tXFx0XFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGJoX2luLVxcdTAwM2ViX2RhdGEpO1xcbi1cXHRcXHRtYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8obmV3X2ZvbGlvLCBuZXdfb2Zmc2V0KTtcXG4rXFx0XFx0bWFwcGVkX2RhdGEgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGaXJlIGRhdGEgZnJvemVuIHRyaWdnZXIgaWYgZGF0YSBhbHJlYWR5IHdhc24ndCBmcm96ZW4uIERvXFxuIFxcdFxcdCAqIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciBlc2NhcGluZywgYXMgdGhlIHRyaWdnZXIgbWF5IG1vZGlmeVxcbkBAIC0zNzksOCArMzg0LDEwIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBEbyB3ZSBuZWVkIHRvIGRvIGEgZGF0YSBjb3B5P1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFkb19lc2NhcGUpXFxuK1xcdFxcdGlmICghZG9fZXNjYXBlKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9iaChuZXdfYmgsIGZvbGlvLCBvZmZzZXQpO1xcbiBcXHRcXHRcXHRnb3RvIGVzY2FwZV9kb25lO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2amhfaW4tXFx1MDAzZWJfc3RhdGVfbG9jayk7XFxuIFxcdFxcdHRtcCA9IGttYWxsb2MoYmhfaW4tXFx1MDAzZWJfc2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xcbkBAIC0zOTEsNyArMzk4LDcgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhID0gdG1wO1xcbi1cXHRcXHRtZW1jcHlfZnJvbV9mb2xpbyh0bXAsIG5ld19mb2xpbywgbmV3X29mZnNldCwgYmhfaW4tXFx1MDAzZWJfc2l6ZSk7XFxuK1xcdFxcdG1lbWNweV9mcm9tX2ZvbGlvKHRtcCwgZm9saW8sIG9mZnNldCwgYmhfaW4tXFx1MDAzZWJfc2l6ZSk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBhcyB3ZSdyZSB1c2luZyBmcm96ZW5cXG4gXFx0XFx0ICogZGF0YSBmb3IgdGhlIGVzY2FwaW5nLCBidXQgaXQga2VlcHMgY29uc2lzdGVuY3kgd2l0aFxcbkBAIC00MDAsMTMgKzQwNywxMSBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcXG4gXFx0XFx0amhfaW4tXFx1MDAzZWJfZnJvemVuX3RyaWdnZXJzID0gamhfaW4tXFx1MDAzZWJfdHJpZ2dlcnM7XFxuIFxcbiBjb3B5X2RvbmU6XFxuLVxcdFxcdG5ld19mb2xpbyA9IHZpcnRfdG9fZm9saW8oamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbi1cXHRcXHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbiBcXHRcXHRqYmQyX2RhdGFfZG9fZXNjYXBlKGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4rXFx0XFx0bmV3X2JoLVxcdTAwM2ViX2RhdGEgPSBqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YTtcXG4gXFx0fVxcbiBcXG4gZXNjYXBlX2RvbmU6XFxuLVxcdGZvbGlvX3NldF9iaChuZXdfYmgsIG5ld19mb2xpbywgbmV3X29mZnNldCk7XFxuIFxcdG5ld19iaC1cXHUwMDNlYl9zaXplID0gYmhfaW4tXFx1MDAzZWJfc2l6ZTtcXG4gXFx0bmV3X2JoLVxcdTAwM2ViX2JkZXYgPSBqb3VybmFsLVxcdTAwM2VqX2RldjtcXG4gXFx0bmV3X2JoLVxcdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yO1xcbkBAIC04ODEsNyArODg2LDcgQEAgaW50IGpiZDJfZmNfd2FpdF9idWZzKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IG51bV9ibGtzKVxcbiBcXHRcXHQgKiBVcGRhdGUgal9mY19vZmYgc28gamJkMl9mY19yZWxlYXNlX2J1ZnMgY2FuIHJlbGVhc2UgcmVtYWluXFxuIFxcdFxcdCAqIGJ1ZmZlciBoZWFkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpIHtcXG4gXFx0XFx0XFx0am91cm5hbC1cXHUwMDNlal9mY19vZmYgPSBpICsgMTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jXFxuaW5kZXggNWNjN2QwOTdiMmFjOC4uODVkODRkOTA5Zjc4NSAxMDA2NDRcXG4tLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcXG4rKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcXG5AQCAtOTIwLDcgKzkyMCw3IEBAIHN0YXRpYyB2b2lkIGpiZDJfZnJlZXplX2poX2RhdGEoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpXFxuIFxcdGNoYXIgKnNvdXJjZTtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpoMmJoKGpoKTtcXG4gXFxuLVxcdEpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCBcXFwiUG9zc2libGUgSU8gZmFpbHVyZS5cXFxcblxcXCIpO1xcbitcXHRKX0VYUEVDVF9KSChqaCwgYnVmZmVyX3VwdG9kYXRlKGJoKSwgXFxcIkJ1ZmZlciBub3QgdXB0b2RhdGUhXFxcXG5cXFwiKTtcXG4gXFx0c291cmNlID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XFxuIFxcdC8qIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBqdXN0IGJlZm9yZSB3ZSBjb3B5IHRoZSBkYXRhICovXFxuIFxcdGpiZDJfYnVmZmVyX2Zyb3plbl90cmlnZ2VyKGpoLCBzb3VyY2UsIGpoLVxcdTAwM2ViX3RyaWdnZXJzKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcXG5pbmRleCA3YmZlMzc3YWYyZGZjLi43MzNjZWRhNzljYTFmIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcXG4rKysgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jXFxuQEAgLTY2LDEyICs2NiwxNCBAQCBpbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuIFxcbiBcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuIFxcbi1cXHRpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRpZiAoIWJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4gXFx0XFx0b2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShjaSwgYmgpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHQvKiBXZSBkb24ndCBuZWVkIHRvIHJlbW92ZSB0aGUgY2x1c3RlcmVkIHVwdG9kYXRlXFxuLVxcdFxcdCAqIGluZm9ybWF0aW9uIGZvciB0aGlzIGJoIGFzIGl0J3Mgbm90IG1hcmtlZCBsb2NhbGx5XFxuLVxcdFxcdCAqIHVwdG9kYXRlLiAqL1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgYnVmZmVyIHN0aWxsIGhvbGRzIHdoYXQgd2UgdHJpZWQgdG8gd3JpdGUsIGJ1dCBpdCBkaWRcXG4rXFx0XFx0ICogbm90IHJlYWNoIHRoZSBkaXNrLCBzbyBkb24ndCBhZHZlcnRpc2UgaXQgdG8gdGhlIGNsdXN0ZXJcXG4rXFx0XFx0ICogYXMgdXAgdG8gZGF0ZS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4gXFx0fVxcbkBAIC00NDYsNyArNDQ4LDcgQEAgaW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4gXFxuIFxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4gXFxuLVxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbiBcXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jXFxuaW5kZXggZDhhZmJjMWE3NmJiOC4uZWE2ODAyZDg5NGMyYiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmNcXG4rKysgYi9mcy9vY2ZzMi9qb3VybmFsLmNcXG5AQCAtNjc2LDE5ICs2NzYsMjAgQEAgc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdG1sb2coTUxfRVJST1IsIFxcXCJnaXZpbmcgbWUgYSBidWZmZXIgdGhhdCdzIG5vdCB1cHRvZGF0ZSFcXFxcblxcXCIpO1xcbiBcXHRcXHRtbG9nKE1MX0VSUk9SLCBcXFwiYl9ibG9ja25yPSVsbHUsIGJfc3RhdGU9MHglbHhcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC1cXHUwMDNlYl9ibG9ja25yLCBiaC1cXHUwMDNlYl9zdGF0ZSk7XFxuLVxcbitcXHR9XFxuK1xcdC8qXFxuK1xcdCAqIEEgcHJldmlvdXMgdHJhbnNhY3Rpb24gd2l0aCBhIGNvdXBsZSBvZiBidWZmZXIgaGVhZHMgZmFpbFxcbitcXHQgKiB0byBjaGVja3BvaW50LCBzbyBhbGwgdGhlIGJocyBhcmUgbWFya2VkIGFzIEJIX1dyaXRlX0VJTy5cXG4rXFx0ICogRm9yIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHRoZSBiaCBpcyBqdXN0IGFtb25nIHRob3NlIGVycm9yXFxuK1xcdCAqIGJocyB3aGljaCBwcmV2aW91cyB0cmFuc2FjdGlvbiBoYW5kbGUuIFdlIGNhbid0IGp1c3QgY2xlYXJcXG4rXFx0ICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmVcXG4rXFx0ICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YVxcbitcXHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxcbitcXHQgKiBmdXJ0aGVyIGRhbWFnZS5cXG4rXFx0ICovXFxuK1xcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XFxuIFxcdFxcdGxvY2tfYnVmZmVyKGJoKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXFxuLVxcdFxcdCAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLlxcbi1cXHRcXHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3JcXG4tXFx0XFx0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJ3QganVzdCBjbGVhclxcbi1cXHRcXHQgKiBpdHMgQkhfV3JpdGVfRUlPIGFuZCByZXVzZSBkaXJlY3RseSwgc2luY2Ugb3RoZXIgYmhzIGFyZVxcbi1cXHRcXHQgKiBub3Qgd3JpdHRlbiB0byBkaXNrIHlldCBhbmQgdGhhdCB3aWxsIGNhdXNlIG1ldGFkYXRhXFxuLVxcdFxcdCAqIGluY29uc2lzdGVuY3kuIFNvIHdlIHNob3VsZCBzZXQgZnMgcmVhZC1vbmx5IHRvIGF2b2lkXFxuLVxcdFxcdCAqIGZ1cnRoZXIgZGFtYWdlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG4rXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4gXFx0XFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuIFxcdFxcdFxcdHJldHVybiBvY2ZzMl9lcnJvcihvc2ItXFx1MDAzZXNiLCBcXFwiQSBwcmV2aW91cyBhdHRlbXB0IHRvIFxcXCJcXG4gXFx0XFx0XFx0XFx0XFx0XFxcIndyaXRlIHRoaXMgYnVmZmVyIGhlYWQgZmFpbGVkXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb21mcy9pbm9kZS5jIGIvZnMvb21mcy9pbm9kZS5jXFxuaW5kZXggMWQ5MTVlZjcyMTE5Zi4uYmMzNzAyOWE0YWZiMSAxMDA2NDRcXG4tLS0gYS9mcy9vbWZzL2lub2RlLmNcXG4rKysgYi9mcy9vbWZzL2lub2RlLmNcXG5AQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBpbnQgX19vbWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdGlmICh3YWl0KSB7XFxuIFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKVxcbitcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcXG4gXFx0XFx0XFx0c3luY19mYWlsZWQgPSAxO1xcbiBcXHR9XFxuIFxcbkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIGludCBfX29tZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuIFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoMik7XFxuIFxcdFxcdGlmICh3YWl0KSB7XFxuIFxcdFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoMik7XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoMikgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaDIpKVxcbitcXHRcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoMikpXFxuIFxcdFxcdFxcdFxcdHN5bmNfZmFpbGVkID0gMTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVsc2UoYmgyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXFxuaW5kZXggZmQyYzcxMTVjMDU0Mi4uMjBiOGZjYTFhYmZhYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG5AQCAtNTksMTAgKzU5LDcgQEAgc3RydWN0IGFkZHJlc3Nfc3BhY2U7XFxuIHN0cnVjdCBidWZmZXJfaGVhZCB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYl9zdGF0ZTtcXHRcXHQvKiBidWZmZXIgc3RhdGUgYml0bWFwIChzZWUgYWJvdmUpICovXFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYl90aGlzX3BhZ2U7LyogY2lyY3VsYXIgbGlzdCBvZiBwYWdlJ3MgYnVmZmVycyAqL1xcbi1cXHR1bmlvbiB7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpiX3BhZ2U7XFx0LyogdGhlIHBhZ2UgdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi9cXG4tXFx0XFx0c3RydWN0IGZvbGlvICpiX2ZvbGlvO1xcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xcbi1cXHR9O1xcbitcXHRzdHJ1Y3QgZm9saW8gKmJfZm9saW87XFx0XFx0LyogdGhlIGZvbGlvIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXFxuIFxcbiBcXHRzZWN0b3JfdCBiX2Jsb2NrbnI7XFx0XFx0Lyogc3RhcnQgYmxvY2sgbnVtYmVyICovXFxuIFxcdHNpemVfdCBiX3NpemU7XFx0XFx0XFx0Lyogc2l6ZSBvZiBtYXBwaW5nICovXFxuQEAgLTE3Miw3ICsxNjksMzYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYnVmZmVyX3VwdG9kYXRlKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYmhfb2Zmc2V0KGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4tXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXFx1MDAzZWJfZGF0YSBcXHUwMDI2IChwYWdlX3NpemUoYmgtXFx1MDAzZWJfcGFnZSkgLSAxKTtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXFx1MDAzZWJfZGF0YSBcXHUwMDI2IChmb2xpb19zaXplKGJoLVxcdTAwM2ViX2ZvbGlvKSAtIDEpO1xcbit9XFxuK1xcbisvKipcXG4rICoga21hcF9sb2NhbF9iaCAtIE1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cXG4rICogQGJoOiBUaGUgYnVmZmVyLlxcbisgKlxcbisgKiBCdWZmZXJzIHVzdWFsbHkgbGl2ZSBpbiB0aGUgcGFnZSBjYWNoZSwgYnV0IGEgZmV3IGFyZSBidWlsdCBvdmVyIG1lbW9yeVxcbisgKiB3aGljaCBpcyBub3QuICBUaG9zZSBjYXJyeSBubyBmb2xpbyBhbmQgYl9kYXRhIGlzIGFscmVhZHkgYSBrZXJuZWwgYWRkcmVzc1xcbisgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoXFxuKyAqIGt1bm1hcF9sb2NhbF9iaCgpLlxcbisgKlxcbisgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJ3MgZGF0YS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbit7XFxuK1xcdGlmICghYmgtXFx1MDAzZWJfZm9saW8pXFxuK1xcdFxcdHJldHVybiBiaC1cXHUwMDNlYl9kYXRhO1xcbitcXHRyZXR1cm4ga21hcF9sb2NhbF9mb2xpbyhiaC1cXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBrdW5tYXBfbG9jYWxfYmggLSBVbm1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cXG4rICogQGJoOiBUaGUgYnVmZmVyLlxcbisgKiBAYWRkcjogVGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkga21hcF9sb2NhbF9iaCgpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKVxcbit7XFxuK1xcdGlmIChiaC1cXHUwMDNlYl9mb2xpbylcXG4rXFx0XFx0a3VubWFwX2xvY2FsKGFkZHIpO1xcbiB9XFxuIFxcbiAvKiBJZiB3ZSAqa25vdyogcGFnZS1cXHUwMDNlcHJpdmF0ZSByZWZlcnMgdG8gYnVmZmVyX2hlYWRzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjA2LjA0OTkzMTUzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNTgxODgzNjU1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiSkJEMlwiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJFWEZBVF9GU1wiLFxuICAgIFwiQURGU19GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiT01GU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJoX2VuZF93cml0ZVwiLFxuICAgIFwiYmhfZW5kX2FzeW5jX3dyaXRlXCIsXG4gICAgXCJfX2Jmb3JnZXRcIixcbiAgICBcIl9fc3luY19kaXJ0eV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIixcbiAgICBcImpiZDJfZmNfd2FpdF9idWZzXCIsXG4gICAgXCJvY2ZzMl93cml0ZV9ibG9ja1wiLFxuICAgIFwiZmF0X3N5bmNfYmhzXCIsXG4gICAgXCJleGZhdF91cGRhdGVfYmhzXCIsXG4gICAgXCJfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhXCIsXG4gICAgXCJnZnMyX3BpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYnVmZmVyX2hlYWQgaGFuZGxpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhcm91bmQgd3JpdGUgZXJyb3IgdHJhY2tpbmcgKGJ1ZmZlcl93cml0ZV9pb19lcnJvciB2cyBidWZmZXJfdXB0b2RhdGUpIGFuZCBzdXBwb3J0IGZvciBidWZmZXJfaGVhZHMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIGZvbGlvIChlLmcuLCBmb3IgYl9mcm96ZW5fZGF0YSBpbiBqYmQyKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgbXVsdGlwbGUgZmlsZXN5c3RlbXMgKGV4dDQsIGpiZDIsIGdmczIsIG9jZnMyLCBmYXQsIGV4ZmF0LCBhZGZzLCBleHQyLCBvbWZzKSBhbmQgdGhlIGNvcmUgYmxvY2sgbGF5ZXIuIEZ1enppbmcgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBJL08gZXJyb3IgaGFuZGxpbmcgb3IgbWVtb3J5IGFjY2VzcyAodmlhIHRoZSBuZXcga21hcF9sb2NhbF9iaC9iaW9fYWRkX3ZpcnRfbm9mYWlsIHBhdGhzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjY4OGM2ODBjNTlmYzdlOWZiYzY0MzJhNWVjZjc2NDFkMDE4ZWEwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMjA6MDE6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuY1xuaW5kZXggMTFhZmE5ZTE1N2FhNy4uYjhjYzZhNjk3YTA1ZCAxMDA2NDRcbi0tLSBhL2ZzL2FkZnMvZGlyLmNcbisrKyBiL2ZzL2FkZnMvZGlyLmNcbkBAIC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxuIFx0Zm9yIChpID0gZGlyLVx1MDAzZW5yX2J1ZmZlcnMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4gXHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBkaXItXHUwMDNlYmhzW2ldO1xuIFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuY1xuaW5kZXggYmU4YjU3YTYzNWNkOC4uNjhlYTBlZjg0NzBlZSAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4rKysgYi9mcy9idWZmZXIuY1xuQEAgLTIwMywxMSArMjAzLDEwIEBAIHZvaWQgYmhfZW5kX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcbiBcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdGlmIChzdWNjZXNzKSB7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YnVmZmVyX2lvX2Vycm9yKGJoLCBcIiwgbG9zdCBzeW5jIHBhZ2Ugd3JpdGVcIik7XG4gXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdH1cbiBcdHVubG9ja19idWZmZXIoYmgpO1xuIH1cbkBAIC00MzcsMTEgKzQzNiwxMCBAQCB2b2lkIGJoX2VuZF9hc3luY193cml0ZShzdHJ1Y3QgYmlvICpiaW8pXG4gXG4gXHRmb2xpbyA9IGJoLVx1MDAzZWJfZm9saW87XG4gXHRpZiAoc3VjY2Vzcykge1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbitcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJ1ZmZlcl9pb19lcnJvcihiaCwgXCIsIGxvc3QgYXN5bmMgcGFnZSB3cml0ZVwiKTtcbiBcdFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuLVx0XHRjbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpO1xuIFx0fVxuIFxuIFx0Zmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcbkBAIC02MTgsNyArNjE2LDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHR9XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tYi1cdTAwM2Vsb2NrKTtcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLVx0XHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHRcdGJyZWxzZShiaCk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZtbWItXHUwMDNlbG9jayk7XG5AQCAtMTA5MSw2ICsxMDg5LDcgQEAgRVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7XG4gdm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4gXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xuK1x0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdHJlbW92ZV9hc3NvY19xdWV1ZShiaCk7XG4gXHRfX2JyZWxzZShiaCk7XG4gfVxuQEAgLTEwOTksMTIgKzEwOTgsMTYgQEAgRVhQT1JUX1NZTUJPTChfX2Jmb3JnZXQpO1xuIHN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhiaC1cdTAwM2ViX2ZvbGlvKTtcbitcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBleHQ0IGpvdXJuYWwgKGpiZDIpIGNhbiBzdWJtaXQgYSBidWZmZXJfaGVhZCBpdCBkaXJlY3RseSBjcmVhdGVkXG4tXHQgKiBmb3IgYSBub24tcGFnZWNhY2hlIHBhZ2UuICBmc2NyeXB0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZS5cbitcdCAqIGZvciBtZW1vcnkgdGhhdCBpcyBub3QgaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYWxsLiAgZnNjcnlwdCBkb2Vzbid0XG4rXHQgKiBjYXJlIGFib3V0IHRoZXNlLlxuIFx0ICovXG4rXHRpZiAoIWJoLVx1MDAzZWJfZm9saW8pXG4rXHRcdHJldHVybjtcbitcdG1hcHBpbmcgPSBiaC1cdTAwM2ViX2ZvbGlvLVx1MDAzZW1hcHBpbmc7XG4gXHRpZiAoIW1hcHBpbmcpXG4gXHRcdHJldHVybjtcbiBcdGZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBtYXBwaW5nLVx1MDAzZWhvc3QsXG5AQCAtMTExNSw3ICsxMTE4LDYgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcbiBcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIFx0XHRiaW9fZW5kX2lvX3QgZW5kX2JpbylcbiB7XG4tXHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcdTAwMjYgUkVRX09QX01BU0s7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4gXG4gXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcbkBAIC0xMTIzLDExICsxMTI1LDcgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcbiBcdEJVR19PTihidWZmZXJfZGVsYXkoYmgpKTtcbiBcdEJVR19PTihidWZmZXJfdW53cml0dGVuKGJoKSk7XG4gXG4tXHQvKlxuLVx0ICogT25seSBjbGVhciBvdXQgYSB3cml0ZSBlcnJvciB3aGVuIHJld3JpdGluZ1xuLVx0ICovXG4tXHRpZiAodGVzdF9zZXRfYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2IChvcCA9PSBSRVFfT1BfV1JJVEUpKVxuLVx0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuK1x0c2V0X2J1ZmZlcl9yZXEoYmgpO1xuIFxuIFx0aWYgKGJ1ZmZlcl9tZXRhKGJoKSlcbiBcdFx0b3BmIHw9IFJFUV9NRVRBO1xuQEAgLTExNDIsNyArMTE0MCwxMSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gYmgtXHUwMDNlYl9ibG9ja25yICogKGJoLVx1MDAzZWJfc2l6ZSBcdTAwM2VcdTAwM2UgOSk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdyaXRlX2hpbnQ7XG4gXG4tXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSwgYmhfb2Zmc2V0KGJoKSk7XG4rXHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbitcdFx0YmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBiaC1cdTAwM2ViX2ZvbGlvLCBiaC1cdTAwM2ViX3NpemUsXG4rXHRcdFx0XHQgICAgIGJoX29mZnNldChiaCkpO1xuK1x0ZWxzZVxuK1x0XHRiaW9fYWRkX3ZpcnRfbm9mYWlsKGJpbywgYmgtXHUwMDNlYl9kYXRhLCBiaC1cdTAwM2ViX3NpemUpO1xuIFxuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGVuZF9iaW87XG4gXHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGJoO1xuQEAgLTExNTIsNyArMTE1NCw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXG4gXHRpZiAod2JjKSB7XG4gXHRcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XG4tXHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4rXHRcdGlmIChiaC1cdTAwM2ViX2ZvbGlvKVxuK1x0XHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4gXHR9XG4gXG4gXHRibGtfY3J5cHRvX3N1Ym1pdF9iaW8oYmlvKTtcbkBAIC0xNTA4LDcgKzE1MTEsNyBAQCBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7XG4gLyogQml0cyB0aGF0IGFyZSBjbGVhcmVkIGR1cmluZyBhbiBpbnZhbGlkYXRlICovXG4gI2RlZmluZSBCVUZGRVJfRkxBR1NfRElTQ0FSRCBcXFxuIFx0KDEgXHUwMDNjXHUwMDNjIEJIX01hcHBlZCB8IDEgXHUwMDNjXHUwMDNjIEJIX05ldyB8IDEgXHUwMDNjXHUwMDNjIEJIX1JlcSB8IFxcXG4tXHQgMSBcdTAwM2NcdTAwM2MgQkhfRGVsYXkgfCAxIFx1MDAzY1x1MDAzYyBCSF9VbndyaXR0ZW4pXG4rXHQgMSBcdTAwM2NcdTAwM2MgQkhfRGVsYXkgfCAxIFx1MDAzY1x1MDAzYyBCSF9VbndyaXR0ZW4gfCAxIFx1MDAzY1x1MDAzYyBCSF9Xcml0ZV9FSU8pXG4gXG4gc3RhdGljIHZvaWQgZGlzY2FyZF9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpXG4ge1xuQEAgLTI3MzMsNyArMjczNiw3IEBAIGludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbiBcbiBcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLVx0XHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0fSBlbHNlIHtcbiBcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jXG5pbmRleCA2ZjExYTk2YTRmZmE4Li5kZmQwYmJmMzFjOTQwIDEwMDY0NFxuLS0tIGEvZnMvZXhmYXQvbWlzYy5jXG4rKysgYi9mcy9leGZhdC9taXNjLmNcbkBAIC0xODcsNyArMTg3LDcgQEAgaW50IGV4ZmF0X3VwZGF0ZV9iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzLCBpbnQgc3luYylcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2JocyBcdTAwMjZcdTAwMjYgc3luYzsgaSsrKSB7XG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoc1tpXSk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmhzW2ldKSlcbiBcdFx0XHRlcnIgPSAtRUlPO1xuIFx0fVxuIFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyLmMgYi9mcy9leHQyL3hhdHRyLmNcbmluZGV4IGJlNjNmODk0MDJhMzguLjM5MDA1ZWMyM2ZlNWQgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL3hhdHRyLmNcbisrKyBiL2ZzL2V4dDIveGF0dHIuY1xuQEAgLTc2OSw3ICs3NjksNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4gXHRcdGlmIChJU19TWU5DKGlub2RlKSkge1xuIFx0XHRcdHN5bmNfZGlydHlfYnVmZmVyKG5ld19iaCk7XG4gXHRcdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKG5ld19iaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUobmV3X2JoKSlcbitcdFx0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKG5ld19iaCkpXG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggMDJiMDY2Mjk5MTY0OS4uZjMzOGQ2ZTNjMjlmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbisrKyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbkBAIC00MTMsNyArNDEzLDcgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdFx0XHRleHQ0X2Vycm9yX2lub2RlX2Vycihpbm9kZSwgd2hlcmUsIGxpbmUsXG4gXHRcdFx0XHRcdFx0ICAgICBiaC1cdTAwM2ViX2Jsb2NrbnIsIEVJTyxcbiBcdFx0XHRcdFx0XCJJTyBlcnJvciBzeW5jaW5nIGl0YWJsZSBibG9ja1wiKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDhlMjI1OTc5OTYxNGUuLjk1OTk4ODI3ZmYwMTEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIwMywxNyArMjAzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX3NldF9zbmFwX2VycihpbnQgKnNuYXBfZXJyLCBpbnQgZXJyKVxuIHN0YXRpYyB2b2lkIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbitcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdEJVRkZFUl9UUkFDRShiaCwgXCJcIik7XG4tXHRpZiAodXB0b2RhdGUpIHtcbi1cdFx0ZXh0NF9kZWJ1ZyhcIiVzOiBCbG9jayAlbGxkIHVwLXRvLWRhdGVcIixcbitcdGlmIChzdWNjZXNzKSB7XG4rXHRcdGV4dDRfZGVidWcoXCIlczogQmxvY2sgJWxsZCB3cml0dGVuXCIsXG4gXHRcdFx0ICAgX19mdW5jX18sIGJoLVx1MDAzZWJfYmxvY2tucik7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXh0NF9kZWJ1ZyhcIiVzOiBCbG9jayAlbGxkIG5vdCB1cC10by1kYXRlXCIsXG4rXHRcdGV4dDRfZGVidWcoXCIlczogQmxvY2sgJWxsZCB3cml0ZSBmYWlsZWRcIixcbiBcdFx0XHQgICBfX2Z1bmNfXywgYmgtXHUwMDNlYl9ibG9ja25yKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbitcdFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fVxuIFxuIFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tbXAuYyBiL2ZzL2V4dDQvbW1wLmNcbmluZGV4IDdjZTM2MTQ4NGIzODIuLjRiMThkZGVmNDY4ZDcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21tcC5jXG4rKysgYi9mcy9leHQ0L21tcC5jXG5AQCAtNDksNyArNDksNyBAQCBzdGF0aWMgaW50IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLFxuIFx0XHRcdGJoX2VuZF93cml0ZSk7XG4gXHR3YWl0X29uX2J1ZmZlcihiaCk7XG4tXHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxuK1x0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggYmUxOGY2YjU4MTliYS4uNGE0Y2QwMTExZTQ3YSAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbisrKyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0zNTYsNyArMzU2LDcgQEAgaW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9iaHM7IGkrKykge1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaHNbaV0pO1xuLVx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaHNbaV0pKVxuK1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmNcbmluZGV4IDc4YmJhOGNjMTBiOGYuLmUzZTBkY2IxZjU2NzMgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2xvZy5jXG4rKysgYi9mcy9nZnMyL2xvZy5jXG5AQCAtMTA3LDcgKzEwNyw3IEBAIF9fYWNxdWlyZXMoXHUwMDI2c2RwLVx1MDAzZXNkX2FpbF9sb2NrKVxuIFx0XHRnZnMyX2Fzc2VydChzZHAsIGJkLVx1MDAzZWJkX3RyID09IHRyKTtcbiBcbiBcdFx0aWYgKCFidWZmZXJfYnVzeShiaCkpIHtcbi1cdFx0XHRpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRcdGlmICghYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuIFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmJkLVx1MDAzZWJkX2FpbF9zdF9saXN0LFxuIFx0XHRcdFx0XHQgIFx1MDAyNnRyLVx1MDAzZXRyX2FpbDJfbGlzdCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXG4gXHRcdFx0YWN0aXZlX2NvdW50Kys7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cdFx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFjbXB4Y2hnKFx1MDAyNnNkcC1cdTAwM2VzZF9sb2dfZXJyb3IsIDAsIC1FSU8pKVxuIFx0XHRcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmMgYi9mcy9nZnMyL2xvcHMuY1xuaW5kZXggNmRhYmU3M2FkNzkwZC4uNzQ0MGU1YjcyZjhhZCAxMDA2NDRcbi0tLSBhL2ZzL2dmczIvbG9wcy5jXG4rKysgYi9mcy9nZnMyL2xvcHMuY1xuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBnZnMyX3BpbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiBcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRpZiAodGVzdF9zZXRfYnVmZmVyX3Bpbm5lZChiaCkpXG4gXHRcdGdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7XG4tXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcbiBcdFx0Z2ZzMl9pb19lcnJvcl9iaChzZHAsIGJoKTtcbiBcdGJkID0gYmgtXHUwMDNlYl9wcml2YXRlO1xuIFx0LyogSWYgdGhpcyBidWZmZXIgaXMgaW4gdGhlIEFJTCBhbmQgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuXG5AQCAtMTc5LDYgKzE3OSw4IEBAIHN0YXRpYyB2b2lkIGdmczJfZW5kX2xvZ193cml0ZV9iaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGRvIHtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRuZXh0ID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHRcdHNpemUgLT0gYmgtXHUwMDNlYl9zaXplO1xuZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jXG5pbmRleCAzMDI5Y2I2ZjZkNjQwLi5lYmY2YmE1OGZmNGQwIDEwMDY0NFxuLS0tIGEvZnMvamJkMi9jb21taXQuY1xuKysrIGIvZnMvamJkMi9jb21taXQuY1xuQEAgLTMyLDE0ICszMiwxNCBAQFxuIHN0YXRpYyB2b2lkIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbitcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqb3JpZ19iaCA9IGJoLVx1MDAzZWJfcHJpdmF0ZTtcbiBcbiBcdEJVRkZFUl9UUkFDRShiaCwgXCJcIik7XG4tXHRpZiAodXB0b2RhdGUpXG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0aWYgKHN1Y2Nlc3MpXG4rXHRcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHRlbHNlXG4tXHRcdGNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdGlmIChvcmlnX2JoKSB7XG4gXHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChCSF9TaGFkb3csIFx1MDAyNm9yaWdfYmgtXHUwMDNlYl9zdGF0ZSk7XG4gXHR9XG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBpbnQgam91cm5hbF93YWl0X29uX2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLFxuIFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdHdhaXRfb25fYnVmZmVyKGJoKTtcbiBcbi1cdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXG4rXHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpXG4gXHRcdHJldCA9IC1FSU87XG4gXHRwdXRfYmgoYmgpOyAgICAgICAgICAgIC8qIE9uZSBmb3IgZ2V0YmxrKCkgKi9cbiBcbkBAIC0zMzAsOSArMzMwLDkgQEAgc3RhdGljIF9fdTMyIGpiZDJfY2hlY2tzdW1fZGF0YShfX3UzMiBjcmMzMl9zdW0sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRjaGFyICphZGRyO1xuIFx0X191MzIgY2hlY2tzdW07XG4gXG4tXHRhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbitcdGFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTtcbiBcdGNoZWNrc3VtID0gY3JjMzJfYmUoY3JjMzJfc3VtLCBhZGRyLCBiaC1cdTAwM2ViX3NpemUpO1xuLVx0a3VubWFwX2xvY2FsKGFkZHIpO1xuK1x0a3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTtcbiBcbiBcdHJldHVybiBjaGVja3N1bTtcbiB9XG5AQCAtMzU3LDEwICszNTcsMTAgQEAgc3RhdGljIHZvaWQgamJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4gXHRcdHJldHVybjtcbiBcbiBcdHNlcSA9IGNwdV90b19iZTMyKHNlcXVlbmNlKTtcbi1cdGFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVx1MDAzZWJfZm9saW8sIGJoX29mZnNldChiaCkpO1xuK1x0YWRkciA9IGttYXBfbG9jYWxfYmgoYmgpO1xuIFx0Y3N1bTMyID0gamJkMl9jaGtzdW0oai1cdTAwM2VqX2NzdW1fc2VlZCwgKF9fdTggKilcdTAwMjZzZXEsIHNpemVvZihzZXEpKTtcbiBcdGNzdW0zMiA9IGpiZDJfY2hrc3VtKGNzdW0zMiwgYWRkciwgYmgtXHUwMDNlYl9zaXplKTtcbi1cdGt1bm1hcF9sb2NhbChhZGRyKTtcbitcdGt1bm1hcF9sb2NhbF9iaChiaCwgYWRkcik7XG4gXG4gXHRpZiAoamJkMl9oYXNfZmVhdHVyZV9jc3VtMyhqKSlcbiBcdFx0dGFnMy1cdTAwM2V0X2NoZWNrc3VtID0gY3B1X3RvX2JlMzIoY3N1bTMyKTtcbkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcbitcdFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHRcdGpiZDJfdW5maWxlX2xvZ19iaChiaCk7XG4gXHRcdHN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkKys7XG5AQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4tXHRcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXG4rXHRcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcbiBcdFx0XHRlcnIgPSAtRUlPO1xuIFxuIFx0XHRCVUZGRVJfVFJBQ0UoYmgsIFwicGg1OiBjb250cm9sIGJ1ZmZlciB3cml0ZW91dCBkb25lOiB1bmZpbGVcIik7XG5kaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuY1xuaW5kZXggMDllZmEzMzc2NDllMi4uNzJlOGNjYmY3ZGU0ZSAxMDA2NDRcbi0tLSBhL2ZzL2piZDIvam91cm5hbC5jXG4rKysgYi9mcy9qYmQyL2pvdXJuYWwuY1xuQEAgLTMyNyw4ICszMjcsNiBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcbiB7XG4gXHRpbnQgZG9fZXNjYXBlID0gMDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoO1xuLVx0c3RydWN0IGZvbGlvICpuZXdfZm9saW87XG4tXHR1bnNpZ25lZCBpbnQgbmV3X29mZnNldDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfaW4gPSBqaDJiaChqaF9pbik7XG4gXHRqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi1cdTAwM2V0X2pvdXJuYWw7XG4gXG5AQCAtMzQ4LDI0ICszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHQvKiBrZWVwIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucyBzYW5lICovXG4gXHRhdG9taWNfc2V0KFx1MDAyNm5ld19iaC1cdTAwM2ViX2NvdW50LCAxKTtcbiBcbitcdC8qXG4rXHQgKiBiX2Zyb3plbl9kYXRhIGlzIHNsYWIgbWVtb3J5LCBub3QgcGFnZSBjYWNoZSwgc28gd2hlbiB3ZSB1c2UgaXQgdGhlXG4rXHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcbitcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxuK1x0ICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC1cdTAwM2VtYXBwaW5nIHRvXG4rXHQgKiBhbnl0aGluZyB0aGF0IGdvZXMgbG9va2luZyBmb3IgYW4gYWRkcmVzc19zcGFjZS5cbitcdCAqL1xuK1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmpoX2luLVx1MDAzZWJfc3RhdGVfbG9jayk7XG4gXHQvKlxuIFx0ICogSWYgYSBuZXcgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgZG9uZSBhIGJ1ZmZlciBjb3B5LW91dCwgdGhlblxuIFx0ICogd2UgdXNlIHRoYXQgdmVyc2lvbiBvZiB0aGUgZGF0YSBmb3IgdGhlIGNvbW1pdC5cbiBcdCAqL1xuIFx0aWYgKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpIHtcbi1cdFx0bmV3X2ZvbGlvID0gdmlydF90b19mb2xpbyhqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbi1cdFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuIFx0XHRkb19lc2NhcGUgPSBqYmQyX2RhdGFfbmVlZHNfZXNjYXBpbmcoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gXHRcdGlmIChkb19lc2NhcGUpXG4gXHRcdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbitcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG4gXHR9IGVsc2Uge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYmhfaW4tXHUwMDNlYl9mb2xpbztcbitcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgYmhfaW4tXHUwMDNlYl9kYXRhKTtcbiBcdFx0Y2hhciAqdG1wO1xuIFx0XHRjaGFyICptYXBwZWRfZGF0YTtcbiBcbi1cdFx0bmV3X2ZvbGlvID0gYmhfaW4tXHUwMDNlYl9mb2xpbztcbi1cdFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGJoX2luLVx1MDAzZWJfZGF0YSk7XG4tXHRcdG1hcHBlZF9kYXRhID0ga21hcF9sb2NhbF9mb2xpbyhuZXdfZm9saW8sIG5ld19vZmZzZXQpO1xuK1x0XHRtYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7XG4gXHRcdC8qXG4gXHRcdCAqIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBpZiBkYXRhIGFscmVhZHkgd2Fzbid0IGZyb3plbi4gRG9cbiBcdFx0ICogdGhpcyBiZWZvcmUgY2hlY2tpbmcgZm9yIGVzY2FwaW5nLCBhcyB0aGUgdHJpZ2dlciBtYXkgbW9kaWZ5XG5AQCAtMzc5LDggKzM4NCwxMCBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcbiBcdFx0LypcbiBcdFx0ICogRG8gd2UgbmVlZCB0byBkbyBhIGRhdGEgY29weT9cbiBcdFx0ICovXG4tXHRcdGlmICghZG9fZXNjYXBlKVxuK1x0XHRpZiAoIWRvX2VzY2FwZSkge1xuK1x0XHRcdGZvbGlvX3NldF9iaChuZXdfYmgsIGZvbGlvLCBvZmZzZXQpO1xuIFx0XHRcdGdvdG8gZXNjYXBlX2RvbmU7XG4rXHRcdH1cbiBcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2amhfaW4tXHUwMDNlYl9zdGF0ZV9sb2NrKTtcbiBcdFx0dG1wID0ga21hbGxvYyhiaF9pbi1cdTAwM2ViX3NpemUsIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTtcbkBAIC0zOTEsNyArMzk4LDcgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHRcdH1cbiBcbiBcdFx0amhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSA9IHRtcDtcbi1cdFx0bWVtY3B5X2Zyb21fZm9saW8odG1wLCBuZXdfZm9saW8sIG5ld19vZmZzZXQsIGJoX2luLVx1MDAzZWJfc2l6ZSk7XG4rXHRcdG1lbWNweV9mcm9tX2ZvbGlvKHRtcCwgZm9saW8sIG9mZnNldCwgYmhfaW4tXHUwMDNlYl9zaXplKTtcbiBcdFx0LypcbiBcdFx0ICogVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGFzIHdlJ3JlIHVzaW5nIGZyb3plblxuIFx0XHQgKiBkYXRhIGZvciB0aGUgZXNjYXBpbmcsIGJ1dCBpdCBrZWVwcyBjb25zaXN0ZW5jeSB3aXRoXG5AQCAtNDAwLDEzICs0MDcsMTEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHRcdGpoX2luLVx1MDAzZWJfZnJvemVuX3RyaWdnZXJzID0gamhfaW4tXHUwMDNlYl90cmlnZ2VycztcbiBcbiBjb3B5X2RvbmU6XG4tXHRcdG5ld19mb2xpbyA9IHZpcnRfdG9fZm9saW8oamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4tXHRcdG5ld19vZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8obmV3X2ZvbGlvLCBqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbiBcdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbitcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG4gXHR9XG4gXG4gZXNjYXBlX2RvbmU6XG4tXHRmb2xpb19zZXRfYmgobmV3X2JoLCBuZXdfZm9saW8sIG5ld19vZmZzZXQpO1xuIFx0bmV3X2JoLVx1MDAzZWJfc2l6ZSA9IGJoX2luLVx1MDAzZWJfc2l6ZTtcbiBcdG5ld19iaC1cdTAwM2ViX2JkZXYgPSBqb3VybmFsLVx1MDAzZWpfZGV2O1xuIFx0bmV3X2JoLVx1MDAzZWJfYmxvY2tuciA9IGJsb2NrbnI7XG5AQCAtODgxLDcgKzg4Niw3IEBAIGludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcbiBcdFx0ICogVXBkYXRlIGpfZmNfb2ZmIHNvIGpiZDJfZmNfcmVsZWFzZV9idWZzIGNhbiByZWxlYXNlIHJlbWFpblxuIFx0XHQgKiBidWZmZXIgaGVhZC5cbiBcdFx0ICovXG4tXHRcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpIHtcbitcdFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKSB7XG4gXHRcdFx0am91cm5hbC1cdTAwM2VqX2ZjX29mZiA9IGkgKyAxO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jXG5pbmRleCA1Y2M3ZDA5N2IyYWM4Li44NWQ4NGQ5MDlmNzg1IDEwMDY0NFxuLS0tIGEvZnMvamJkMi90cmFuc2FjdGlvbi5jXG4rKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcbkBAIC05MjAsNyArOTIwLDcgQEAgc3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaClcbiBcdGNoYXIgKnNvdXJjZTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBqaDJiaChqaCk7XG4gXG4tXHRKX0VYUEVDVF9KSChqaCwgYnVmZmVyX3VwdG9kYXRlKGJoKSwgXCJQb3NzaWJsZSBJTyBmYWlsdXJlLlxcblwiKTtcbitcdEpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCBcIkJ1ZmZlciBub3QgdXB0b2RhdGUhXFxuXCIpO1xuIFx0c291cmNlID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbiBcdC8qIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBqdXN0IGJlZm9yZSB3ZSBjb3B5IHRoZSBkYXRhICovXG4gXHRqYmQyX2J1ZmZlcl9mcm96ZW5fdHJpZ2dlcihqaCwgc291cmNlLCBqaC1cdTAwM2ViX3RyaWdnZXJzKTtcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY1xuaW5kZXggN2JmZTM3N2FmMmRmYy4uNzMzY2VkYTc5Y2ExZiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcbisrKyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcbkBAIC02NiwxMiArNjYsMTQgQEAgaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFxuIFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFxuLVx0aWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbitcdGlmICghYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuIFx0XHRvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCk7XG4gXHR9IGVsc2Uge1xuLVx0XHQvKiBXZSBkb24ndCBuZWVkIHRvIHJlbW92ZSB0aGUgY2x1c3RlcmVkIHVwdG9kYXRlXG4tXHRcdCAqIGluZm9ybWF0aW9uIGZvciB0aGlzIGJoIGFzIGl0J3Mgbm90IG1hcmtlZCBsb2NhbGx5XG4tXHRcdCAqIHVwdG9kYXRlLiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgYnVmZmVyIHN0aWxsIGhvbGRzIHdoYXQgd2UgdHJpZWQgdG8gd3JpdGUsIGJ1dCBpdCBkaWRcbitcdFx0ICogbm90IHJlYWNoIHRoZSBkaXNrLCBzbyBkb24ndCBhZHZlcnRpc2UgaXQgdG8gdGhlIGNsdXN0ZXJcbitcdFx0ICogYXMgdXAgdG8gZGF0ZS5cbitcdFx0ICovXG4gXHRcdHJldCA9IC1FSU87XG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcdH1cbkBAIC00NDYsNyArNDQ4LDcgQEAgaW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbiBcbiBcdHdhaXRfb25fYnVmZmVyKGJoKTtcbiBcbi1cdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0cmV0ID0gLUVJTztcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuYyBiL2ZzL29jZnMyL2pvdXJuYWwuY1xuaW5kZXggZDhhZmJjMWE3NmJiOC4uZWE2ODAyZDg5NGMyYiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuY1xuKysrIGIvZnMvb2NmczIvam91cm5hbC5jXG5AQCAtNjc2LDE5ICs2NzYsMjAgQEAgc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdG1sb2coTUxfRVJST1IsIFwiZ2l2aW5nIG1lIGEgYnVmZmVyIHRoYXQncyBub3QgdXB0b2RhdGUhXFxuXCIpO1xuIFx0XHRtbG9nKE1MX0VSUk9SLCBcImJfYmxvY2tucj0lbGx1LCBiX3N0YXRlPTB4JWx4XFxuXCIsXG4gXHRcdCAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC1cdTAwM2ViX2Jsb2NrbnIsIGJoLVx1MDAzZWJfc3RhdGUpO1xuLVxuK1x0fVxuK1x0LypcbitcdCAqIEEgcHJldmlvdXMgdHJhbnNhY3Rpb24gd2l0aCBhIGNvdXBsZSBvZiBidWZmZXIgaGVhZHMgZmFpbFxuK1x0ICogdG8gY2hlY2twb2ludCwgc28gYWxsIHRoZSBiaHMgYXJlIG1hcmtlZCBhcyBCSF9Xcml0ZV9FSU8uXG4rXHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3JcbitcdCAqIGJocyB3aGljaCBwcmV2aW91cyB0cmFuc2FjdGlvbiBoYW5kbGUuIFdlIGNhbid0IGp1c3QgY2xlYXJcbitcdCAqIGl0cyBCSF9Xcml0ZV9FSU8gYW5kIHJldXNlIGRpcmVjdGx5LCBzaW5jZSBvdGhlciBiaHMgYXJlXG4rXHQgKiBub3Qgd3JpdHRlbiB0byBkaXNrIHlldCBhbmQgdGhhdCB3aWxsIGNhdXNlIG1ldGFkYXRhXG4rXHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxuK1x0ICogZnVydGhlciBkYW1hZ2UuXG4rXHQgKi9cbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdGxvY2tfYnVmZmVyKGJoKTtcbi1cdFx0Lypcbi1cdFx0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXG4tXHRcdCAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLlxuLVx0XHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3Jcbi1cdFx0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJ3QganVzdCBjbGVhclxuLVx0XHQgKiBpdHMgQkhfV3JpdGVfRUlPIGFuZCByZXVzZSBkaXJlY3RseSwgc2luY2Ugb3RoZXIgYmhzIGFyZVxuLVx0XHQgKiBub3Qgd3JpdHRlbiB0byBkaXNrIHlldCBhbmQgdGhhdCB3aWxsIGNhdXNlIG1ldGFkYXRhXG4tXHRcdCAqIGluY29uc2lzdGVuY3kuIFNvIHdlIHNob3VsZCBzZXQgZnMgcmVhZC1vbmx5IHRvIGF2b2lkXG4tXHRcdCAqIGZ1cnRoZXIgZGFtYWdlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdFx0cmV0dXJuIG9jZnMyX2Vycm9yKG9zYi1cdTAwM2VzYiwgXCJBIHByZXZpb3VzIGF0dGVtcHQgdG8gXCJcbiBcdFx0XHRcdFx0XCJ3cml0ZSB0aGlzIGJ1ZmZlciBoZWFkIGZhaWxlZFxcblwiKTtcbmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmNcbmluZGV4IDFkOTE1ZWY3MjExOWYuLmJjMzcwMjlhNGFmYjEgMTAwNjQ0XG4tLS0gYS9mcy9vbWZzL2lub2RlLmNcbisrKyBiL2ZzL29tZnMvaW5vZGUuY1xuQEAgLTE0NSw3ICsxNDUsNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGlmICh3YWl0KSB7XG4gXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSlcbitcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXG4gXHRcdFx0c3luY19mYWlsZWQgPSAxO1xuIFx0fVxuIFxuQEAgLTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbiBcdFx0bWFya19idWZmZXJfZGlydHkoYmgyKTtcbiBcdFx0aWYgKHdhaXQpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaDIpO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKGJoMikgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgyKSlcbitcdFx0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoMikpXG4gXHRcdFx0XHRzeW5jX2ZhaWxlZCA9IDE7XG4gXHRcdH1cbiBcdFx0YnJlbHNlKGJoMik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCBmZDJjNzExNWMwNTQyLi4yMGI4ZmNhMWFiZmFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC01OSwxMCArNTksNyBAQCBzdHJ1Y3QgYWRkcmVzc19zcGFjZTtcbiBzdHJ1Y3QgYnVmZmVyX2hlYWQge1xuIFx0dW5zaWduZWQgbG9uZyBiX3N0YXRlO1x0XHQvKiBidWZmZXIgc3RhdGUgYml0bWFwIChzZWUgYWJvdmUpICovXG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfdGhpc19wYWdlOy8qIGNpcmN1bGFyIGxpc3Qgb2YgcGFnZSdzIGJ1ZmZlcnMgKi9cbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IHBhZ2UgKmJfcGFnZTtcdC8qIHRoZSBwYWdlIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXG4tXHRcdHN0cnVjdCBmb2xpbyAqYl9mb2xpbztcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xuLVx0fTtcbitcdHN0cnVjdCBmb2xpbyAqYl9mb2xpbztcdFx0LyogdGhlIGZvbGlvIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXG4gXG4gXHRzZWN0b3JfdCBiX2Jsb2NrbnI7XHRcdC8qIHN0YXJ0IGJsb2NrIG51bWJlciAqL1xuIFx0c2l6ZV90IGJfc2l6ZTtcdFx0XHQvKiBzaXplIG9mIG1hcHBpbmcgKi9cbkBAIC0xNzIsNyArMTY5LDM2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGJ1ZmZlcl91cHRvZGF0ZShjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBiaF9vZmZzZXQoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGJoKS1cdTAwM2ViX2RhdGEgXHUwMDI2IChwYWdlX3NpemUoYmgtXHUwMDNlYl9wYWdlKSAtIDEpO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXHUwMDNlYl9kYXRhIFx1MDAyNiAoZm9saW9fc2l6ZShiaC1cdTAwM2ViX2ZvbGlvKSAtIDEpO1xuK31cbitcbisvKipcbisgKiBrbWFwX2xvY2FsX2JoIC0gTWFwIHRoZSBkYXRhIG9mIGEgYnVmZmVyLlxuKyAqIEBiaDogVGhlIGJ1ZmZlci5cbisgKlxuKyAqIEJ1ZmZlcnMgdXN1YWxseSBsaXZlIGluIHRoZSBwYWdlIGNhY2hlLCBidXQgYSBmZXcgYXJlIGJ1aWx0IG92ZXIgbWVtb3J5XG4rICogd2hpY2ggaXMgbm90LiAgVGhvc2UgY2Fycnkgbm8gZm9saW8gYW5kIGJfZGF0YSBpcyBhbHJlYWR5IGEga2VybmVsIGFkZHJlc3NcbisgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoXG4rICoga3VubWFwX2xvY2FsX2JoKCkuXG4rICpcbisgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJ3MgZGF0YS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfbG9jYWxfYmgoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbit7XG4rXHRpZiAoIWJoLVx1MDAzZWJfZm9saW8pXG4rXHRcdHJldHVybiBiaC1cdTAwM2ViX2RhdGE7XG4rXHRyZXR1cm4ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbit9XG4rXG4rLyoqXG4rICoga3VubWFwX2xvY2FsX2JoIC0gVW5tYXAgdGhlIGRhdGEgb2YgYSBidWZmZXIuXG4rICogQGJoOiBUaGUgYnVmZmVyLlxuKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyByZXR1cm5lZCBieSBrbWFwX2xvY2FsX2JoKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKVxuK3tcbitcdGlmIChiaC1cdTAwM2ViX2ZvbGlvKVxuK1x0XHRrdW5tYXBfbG9jYWwoYWRkcik7XG4gfVxuIFxuIC8qIElmIHdlICprbm93KiBwYWdlLVx1MDAzZXByaXZhdGUgcmVmZXJzIHRvIGJ1ZmZlcl9oZWFkcyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MDE6MDYuMDQ5OTMyODA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxMTQzMTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQnVmZmVyIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgdHdlYWtpbmcgYnVmZmVyX2hlYWQgaGFuZGxpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB6ZXJvaW5nIGluIG9uIGBidWZmZXJfdXB0b2RhdGVgIGFuZCBgYnVmZmVyX3dyaXRlX2lvX2Vycm9yYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3cml0ZSBlcnJvcnMgYXJlIG1hbmFnZWQgYW5kIGNoZWNrZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgcmVncmVzc2lvbnMuXG5cblRoaXMgYWxzbyBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBga21hcF9sb2NhbF9iaGAgYW5kIGBrdW5tYXBfbG9jYWxfYmhgIGFuZCB1c2luZyB0aGVtIGluIGBmcy9qYmQyL2NvbW1pdC5jYC4gVGhlIGNoYW5nZXMgYWxzbyBpbmNsdWRlIG1vZGlmeWluZyBgZnMvamJkMi9qb3VybmFsLmNgIHRvIGhhbmRsZSBgYl9mcm96ZW5fZGF0YWAgYW5kIGNoYW5naW5nIGBmcy9idWZmZXIuY2AgdG8gaGFuZGxlIHRoZSBgYmgtXHUwMDNlYl9mb2xpbyA9PSBOVUxMYCBjYXNlIGluIGBfX2JoX3N1Ym1pdGAgYnkgdXNpbmcgYGJpb19hZGRfdmlydF9ub2ZhaWxgIGluc3RlYWQgb2YgYGJpb19hZGRfZm9saW9fbm9mYWlsYC4gVGhhdCdzIGEgc2hpZnQgaW4gaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYmxvY2sgbGF5ZXIuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyB0b3VjaGluZyB0aGUgVkZTLCBibG9jayBsYXllciwgYW5kIGZpbGVzeXN0ZW1zLCB0aGlzIGlzIGEgY29yZSBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQgbmVlZHMgdG8gYmUgZnV6emVkIGhlYXZpbHkuIEl0J3MgaW1wYWN0aW5nIGNvZGUgYWNyb3NzIGEgYnVuY2ggb2YgZmlsZXN5c3RlbXMg4oCTIGBmcy9idWZmZXIuY2AsIGBmcy9qYmQyL2AsIGBmcy9leHQ0L2AsIGBmcy9nZnMyL2AsIGBmcy9vY2ZzMi9gLCBgZnMvZmF0L2AsIGBmcy9leGZhdC9gLCBgZnMvYWRmcy9gLCBgZnMvZXh0Mi9gLCBhbmQgYGZzL29tZnMvYC5cblxuVG8gcmVmaW5lIG15IGZ1enppbmcgYXBwcm9hY2gsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgc3ltYm9scyB0aGF0IGV4cG9zZSB0aGlzIGNoYW5nZSwgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGZvY3VzIHN5bWJvbHMgaW4gdGhlc2UgZmlsZXMuIEkgY2FuIHNlZSBgX19iaF9zdWJtaXRgIGluIGBmcy9idWZmZXIuY2AsIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYG1tYl9zeW5jYCwgYW5kIGBfX2Jmb3JnZXRgIGFyZSBhbHNvIGluIGBmcy9idWZmZXIuY2AuIE92ZXIgaW4gYGZzL2piZDIvam91cm5hbC5jYCBJIHNlZSBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAgYW5kIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCBpcyBpbiBgZnMvamJkMi9jb21taXQuY2AuIEluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLCBJIHNlZSBgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmNgLCBhbmQgaW4gYGZzL2dmczIvbG9wcy5jYCBJIHNlZSBgZ2ZzMl9lbmRfbG9nX3dyaXRlX2JoYC5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJsb2NrIGxheWVyIG5vdy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCdzIHZpc2libGUgYXQgdGhlIGludGVyZmFjZSBhbmQgd2lsbCB0cnkgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlZSBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIG9yIGFyZSBnbG9iYWwgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCBuZWVkcyB0byBiZSB0ZXN0ZWQgYW5kIHdoYXQgbWF5IG5lZWQgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MDE6MTUuMjYxMzc3Mjk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQwNDQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTE5MT1FWFBPUlRfU1lNQk9MKGJoX2VuZF9yZWFkKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTE5OS0gKi9cXG5mcy9idWZmZXIuYzoyMDA6dm9pZCBiaF9lbmRfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxcbmZzL2J1ZmZlci5jLTIwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjE1LjQ2Mjc4ODU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1ODYwNzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipUaGUgR2xvYmFsIE5hdHVyZSBvZiBgYmhfZW5kX3dyaXRlYCBhbmQgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGZhY3QgdGhhdCBgYmhfZW5kX3dyaXRlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZSBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IEkgbmVlZCB0byBjb25zaWRlciB2ZXJ5IGNhcmVmdWxseS4gRnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZSwgdGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4uIEdsb2JhbCB2YXJpYWJsZXMsIHdoaWxlIHNvbWV0aW1lcyBjb252ZW5pZW50IGZvciBxdWljayBhY2Nlc3MsIGluaGVyZW50bHkgaW50cm9kdWNlIHNldmVyYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgaW4gY29tcGxleCwgbXVsdGktdGhyZWFkZWQgb3IgZGlzdHJpYnV0ZWQgc3lzdGVtcyBsaWtlIHRoZSBvbmVzIEkgdHlwaWNhbGx5IGRlYWwgd2l0aC5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEEgZ2xvYmFsIGxpa2UgdGhpcyBpbXBsaWVzIHRoYXQgYW55IHBhcnQgb2YgdGhlIHN5c3RlbSBjYW4gcG90ZW50aWFsbHkgcmVhZCBhbmQgbW9kaWZ5IHRoZSBzdGF0ZSByZXByZXNlbnRlZCBieSB0aGlzIHZhcmlhYmxlLiBUaGlzIGNhbiBtYWtlIGRlYnVnZ2luZyBzaWduaWZpY2FudGx5IGhhcmRlciBiZWNhdXNlIHlvdSBoYXZlIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBhY2Nlc3MgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2YWx1ZSBjaGFuZ2VzLiBJdCBhbHNvIGluY3JlYXNlcyB0aGUgcmlzayBvZiBzdWJ0bGUgYnVncyB0aGF0IGFyZSBoYXJkIHRvIHJlcHJvZHVjZS4gSWYgbXVsdGlwbGUgdGhyZWFkcyBhcmUgbW9kaWZ5aW5nIGBiaF9lbmRfd3JpdGVgIHdpdGhvdXQgcHJvcGVyIHN5bmNocm9uaXphdGlvbiwgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24gYXJlIGEgc2VyaW91cyBwb3NzaWJpbGl0eSwgYW5kIHRob3NlIHR5cGVzIG9mIGJ1Z3MgY2FuIGJlIHJlYWxseSBkaWZmaWN1bHQgdG8gdHJhY2sgZG93bi5cblxuSSdkIHdhbnQgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBgYmhfZW5kX3dyaXRlYCByZXByZXNlbnRzLiBJcyBpdCBhIGNvdW50ZXIsIGEgZmxhZywgYSBwb2ludGVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBndWFyYW50ZWVzLCBpZiBhbnksIGFyZSB0aGVyZSBhYm91dCBhdG9taWMgYWNjZXNzIG9yIHRocmVhZCBzYWZldHk/IEknZCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdmVyeSBjbG9zZWx5IHRvIHNlZSBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKndoZXJlKiBpdCdzIHVzZWQuIElzIGl0IGNvbmZpbmVkIHRvIGEgc2luZ2xlIG1vZHVsZSwgb3IgZG9lcyBpdCBjcm9zcyBtb2R1bGUgYm91bmRhcmllcywgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHk/IElmIGl0IGlzIGEgbmVjZXNzYXJ5IGdsb2JhbCwgSSdkIHdhbnQgdG8gY29uc2lkZXIgc3Vycm91bmRpbmcgaXQgd2l0aCBhY2Nlc3MgZnVuY3Rpb25zLCBwb3RlbnRpYWxseSBwcm92aWRpbmcgYSBoaWdoZXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIG1heWJlIGV2ZW4gd2l0aCBzb21lIGluaGVyZW50IGxvY2tpbmcuIFRoaXMgY291bGQgaGVscCBtaXRpZ2F0ZSB0aGUgcHJvYmxlbXMsIGJ1dCBpdOKAmXMgc3RpbGwgbm90IGEgcGVyZmVjdCBzb2x1dGlvbi5cblxuVWx0aW1hdGVseSwgSSdkIGFwcHJvYWNoIHRoaXMgd2l0aCBhIGhlYWx0aHkgZG9zZSBvZiBza2VwdGljaXNtLiBUaGUgdXNlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIGxpa2UgYGJoX2VuZF93cml0ZWAgc2hvdWxkIHRyaWdnZXIgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIHRvIGVuc3VyZSBpdCdzIHRydWx5IGp1c3RpZmllZCBhbmQgdG8gbWl0aWdhdGUgdGhlIHJpc2tzIGl0IGludHJvZHVjZXMuIEEgY2FyZWZ1bCByZWZhY3RvcmluZyB0byByZWR1Y2UgdGhlIHNjb3BlIG9yIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBzaG91bGQgYmUgYSBrZXkgb2JqZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjIwLjQyMTM5ODYzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE0NDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX2FzeW5jX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTM4ND1zdGF0aWMgdm9pZCBiaF9lbmRfYXN5bmNfcmVhZChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9idWZmZXIuYy00MjUtICovXFxuZnMvYnVmZmVyLmM6NDI2OnZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcXG5mcy9idWZmZXIuYy00Mjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowMToyMC40NzE1NDg2MjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAyNTgxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIEFzeW5jaHJvbm91cyBXcml0ZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJoX2VuZF9hc3luY193cml0ZWAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IGl0J3MgKmdsb2JhbCouIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IHF1ZXN0aW9ucyBpbiBteSBtaW5kLiBBIGdsb2JhbCBmdW5jdGlvbiBsaWtlIHRoaXMgdXN1YWxseSBpbXBsaWVzIHRoYXQgaXQncyBoYW5kbGluZyBhIGNvcmUgb3IgY3JpdGljYWwgb3BlcmF0aW9uIHRoYXQncyBuZWVkZWQgYWNyb3NzIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIGNvbXBsZXRpb24gb2YgYXN5bmNocm9ub3VzIGJsb2NrIGRldmljZSB3cml0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBpdHMgdXNlOyB3aGF0J3MgZGVwZW5kZW50IG9uIGl0cyBjb3JyZWN0IGV4ZWN1dGlvbj8gQW5kLCBtb3JlIHRvIHRoZSBwb2ludCwgd2hhdCBkZXNpZ24gY29uc3RyYWludHMgbGVkIHRvIHRoZSBjaG9pY2Ugb2YgZ2xvYmFsIHNjb3BlPyBXYXMgaXQgZGVlbWVkIG5lY2Vzc2FyeSBmb3IgZWZmaWNpZW5jeSwgb3IgcGVyaGFwcyBhIGxlZ2FjeSBkZWNpc2lvbj8gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIG9wdGltaXphdGlvbnMuIEkgaGF2ZSB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgdG8gc2VlIGl0cyBjYWxsaW5nIGxvY2F0aW9ucy4gR2xvYmFsIHNjb3BlIGlzIGluaGVyZW50bHkgdHJpY2t5IHdpdGggY29uY3VycmVudCBwcm9ncmFtbWluZy4gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbnNpZGVyIGlmIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0J3Mgc2VlIGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgaXQgZG9lcyBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBhc3luYyB3cml0ZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjI0Ljk3NDEzMjAxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUyOTE5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9qb3VybmFsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamJkMi9qb3VybmFsLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdm9pZCBqYmQyX2RhdGFfZG9fZXNjYXBlKGNoYXIgKmRhdGEpXFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy0zMjItXFxuZnMvamJkMi9qb3VybmFsLmM6MzIzOmludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbmZzL2piZDIvam91cm5hbC5jLTMyNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MDE6MjUuMjE5NDI4MjUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5ODA1NzQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWV0YWRhdGEgQnVmZmVyIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLi4uIGl0J3MgYSBnbG9iYWwsIGlzbid0IGl0PyBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlIGFsb25nIHRoZSBsaW5lcyBvZiBob3cgdGhhdCBpbXBhY3RzIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIGpvdXJuYWwgd3JpdGUgcGF0aC4gVGhpbmtpbmcgYWJvdXQgaXRzIHNjb3BlLCB0aGF0IGdsb2JhbCBuYXR1cmUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBhbnkgYWNjZXNzIHRvIGl0IG5lZWRzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uLCBwb3RlbnRpYWxseSB0aHJvdWdoIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgaGVhdnkgSS9PIGxvYWQgb3IgY29uY3VycmVudCB0cmFuc2FjdGlvbnMuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBnbG9iYWwgYnVmZmVyIGNvdWxkIGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gYW5kIHNlcmlhbGl6YXRpb24gd2l0aGluIHRoZSBmaWxlIHN5c3RlbSdzIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiBXaGF04oCZcyB0aGUgbG9ja2luZyBzdHJhdGVneT8gSXMgaXQgZmluZS1ncmFpbmVkIGVub3VnaCwgb3IgY291bGQgd2UgYmUgZmFjaW5nIHBlcmZvcm1hbmNlIGNsaWZmcyBhcyB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBpbmNyZWFzZXM/IEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyDigJMgaXMgdGhlcmUgYSBiYWxhbmNlIHRvIGJlIHN0cnVjayBiZXR3ZWVuIHRoZSBvdmVyaGVhZCBvZiBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSB0aHJvdWdocHV0IG9mIG1ldGFkYXRhIHdyaXRlcz8gVGhpcyBnbG9iYWwgdmFyaWFibGUgcmVhbGx5IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2sgZHVyaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjI5LjQxNzQ4ODc0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NDU5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9jb21taXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL2NvbW1pdC5jPTM0OD1zdGF0aWMgdm9pZCBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldChqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcXG4tLVxcbmZzL2piZDIvY29tbWl0LmMtMzc1LSAqL1xcbmZzL2piZDIvY29tbWl0LmM6Mzc2OnZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXFxuZnMvamJkMi9jb21taXQuYy0zNzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowMToyOS40NjIzMzk4NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNDczNjI3NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAuIEZpcnN0LCBpdCdzIGNsZWFyIHRoYXQgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gTGV0IG1lIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYSBmZXcga25vd24gZXhhbXBsZXMsIGxldCdzIHNlZSwgd2hhdCBhYm91dCBgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmNgIGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgPyBBaCwgdGhhdCdzIGBzdGF0aWNgLiBBbHJpZ2h0LiBOZXh0LCBJJ2xsIGV4YW1pbmUgYGdmczJfZW5kX2xvZ193cml0ZV9iaGAgaW4gYGZzL2dmczIvbG9wcy5jYOKAlHRoYXQgb25lJ3MgYWxzbyBgc3RhdGljYC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgYSBzZW5zZSBvZiB3aGljaCBmaWxlc3lzdGVtcyBtaWdodCBiZSBpbiBwbGF5LiBJJ20gc2VlaW5nIGBDT05GSUdfRVhUNF9GU2AsIGBDT05GSUdfSkJEMmAsIGBDT05GSUdfR0ZTMl9GU2AsIGBDT05GSUdfT0NGUzJfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfRVhGQVRfRlNgLCBgQ09ORklHX0FERlNfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBhbmQgYENPTkZJR19PTUZTX0ZTYC4gUmlnaHQsIHNvIHRoaXMgbGlzdCB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHdoaWNoIGZpbGVzeXN0ZW1zIG1pZ2h0IGxldmVyYWdlIHRoZSBqb3VybmFsLlxuXG5GaW5hbGx5LCBJIHRoaW5rIEknbGwgZ28gYmFjayB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBmcy9qYmQyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uLCBvciBqb3VybmFsIGNvbW1pdHMgaW4gZ2VuZXJhbCwgYXJlIGNvbmZpZ3VyZWQuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBnbG9iYWwgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjA2OjExLjkzNTk3MDUzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MjY2MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBKQkQyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2piZDIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9qYmQyL0tjb25maWc6Mjpjb25maWcgSkJEMlxcbmZzL2piZDIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5mcy9qYmQyL0tjb25maWctMTktXFxuZnMvamJkMi9LY29uZmlnOjIwOmNvbmZpZyBKQkQyX0RFQlVHXFxuZnMvamJkMi9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIkpCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowNjoxMi4xODIyNDE1NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMzkwNzcxODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEZpbGVzeXN0ZW0gTW9kdWxlIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5SaWdodCwgc28gYEpCRDJgIGlzIGEgam91cm5hbGluZyBmaWxlc3lzdGVtOyBpdCdzIHB1bGxlZCBpbiBhcyBhIGRlcGVuZGVuY3kgYnkgYm90aCBgRVhUNF9GU2AgYW5kIGBPQ0ZTMl9GU2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgaXRzIHJvbGUgaW4gZW5zdXJpbmcgZmlsZXN5c3RlbSBpbnRlZ3JpdHkuXG5cbkkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZXhwbGljaXRseSB2ZXJpZnkgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBkZWNsYXJlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGdvIHRvIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jeSBvbiBgSkJEMmAgd2l0aGluIHRoZSBFWFQ0IGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbi4gSnVzdCB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QgaXQgdG8gYmUuIEkgd291bGRuJ3QgYmUgc3VycHJpc2VkLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTI6NTMuNTczMDE2NjU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkyODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTI6NTMuNjE3OTUxNDA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTI3Njc0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIEdGUzIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy9nZnMyL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGF0J3MgdGhlIGNhbm9uaWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEdGUzIgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHJlY2VudCBjaGFuZ2VzLCBkZXBlbmRlbmNpZXMsIG9yIHBvdGVudGlhbCBjb25mbGljdHMgaW50cm9kdWNlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBLbm93aW5nIHRoaXMgZmlsZSBpbnNpZGUgYW5kIG91dCBhbGxvd3MgbWUgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGF2YWlsYWJsZSBHRlMyIGZlYXR1cmVzLCB0aGVpciBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byBteSBjdXJyZW50IHRhc2suIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIEdGUzIuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIG9uIGZlYXR1cmVzIGxpa2UgYENPTkZJR19CTE9DS2AsIGBDT05GSUdfRlNgLCBgQ09ORklHX1hGU2AgYW5kIGBDT05GSUdfSkJEMmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MDcuNTQ1NjI4MTM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM4ODEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9nZnMyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZ2ZzMi9LY29uZmlnOjI6Y29uZmlnIEdGUzJfRlNcXG5mcy9nZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnLTI2LVxcbmZzL2dmczIvS2NvbmZpZzoyNzpjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxcbmZzL2dmczIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJHRlMyIERMTSBsb2NraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDowNy41OTAwMjMzMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzM1NjM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIE9DRlMyIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGZzL29jZnMyL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGJhY2tncm91bmQsIEkga25vdyB0aGlzIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIE9DRlMyIGZpbGVzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgYWxsIHRoZSB2YXJpb3VzIGZlYXR1cmVzLCBvcHRpb25zLCBhbmQgZGVwZW5kZW5jaWVzIG9mIE9DRlMyIGFyZSBkZWZpbmVkIGFuZCBjb250cm9sbGVkIHZpYSB0aGUgS2NvbmZpZyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIGdldCBhIGhpZ2ggbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIHBvc3NpYmxlIGJ1aWxkIHBhcmFtZXRlcnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZCBieSB0aGUgS2J1aWxkIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIHRoZXJlLCB3aGF0IGRlZmF1bHRzIGFyZSBiZWluZyBzZXQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiBob3cgT0NGUzIgaXMgYmVpbmcgY29uZmlndXJlZCwgd2hpY2gsIGluIHR1cm4sIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBsYXRlciBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoxMS4wMzczODI2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjAwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoxMS4wODEwMDc3MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMDU3MDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGQVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBmcy9mYXQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEZBVCBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLCBzbyBpdCdzIHRoZSBuYXR1cmFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIHBhcmFtZXRlcnMgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2Ygd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHRvIGNvbnRyb2wgaXQuIEdvdHRhIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBsYXlvdXQgb2YgdGhpcyBzZWN0aW9uIGFnYWluOyB0aGVyZSdzIGFsd2F5cyBzb21ldGhpbmcgbmV3IHRvIGxlYXJuIG9yIGEgc3VidGxlIGRpZmZlcmVuY2UgY29tcGFyZWQgdG8gd2hhdCBJIHJlbWVtYmVyLiBMZXQncyBzZWUgd2hhdCBnb29kaWVzIGF3YWl0IHVzIHdpdGhpbiB0aGlzIEtjb25maWcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoxNC4yMDE1ODEyNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjk5MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGQVRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mYXQvS2NvbmZpZzoyOmNvbmZpZyBGQVRfRlNcXG5mcy9mYXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjE0LjI0NDg4NjY4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI4MjQwMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgZXhGQVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXhGQVQgZmlsZXN5c3RlbSBtb2R1bGUuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgZnMvZXhmYXQvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgYWxsIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGUga2VybmVsIGludGVncmF0ZXMgYW5kIGRlYWxzIHdpdGggdGhpcyBzcGVjaWZpYyBmaWxlc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogZW5hYmxlL2Rpc2FibGUgZmxhZ3MgZm9yIHRoZSBleEZBVCBtb2R1bGUgaXRzZWxmLCBvcHRpb25zIHJlbGF0ZWQgdG8gZGlmZmVyZW50IGZlYXR1cmVzIGxpa2UgbG9uZyBmaWxlIG5hbWUgc3VwcG9ydCBvciBqb3VybmFsaW5nLCBwZXJoYXBzIGV2ZW4gc29tZSBkZWJ1Z2dpbmcgZmxhZ3MgaWYgdGhleSdyZSBzdGlsbCBtYWludGFpbmVkLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSB3aWxsIGJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBiYXNlZCBvbiBvdGhlciBrZXJuZWwgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgd2UgY3VzdG9taXplIHRoaXMgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBrZXJuZWwgYW5kIGJ1aWxkIHRoZSBrZXJuZWwgdG8gb3VyIHNwZWNpZmljIG5lZWRzLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGdvb2RpZXMgaXQgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MTguMjczMTMwODNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDU2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWEZBVF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leGZhdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZmF0L0tjb25maWctMi1cXG5mcy9leGZhdC9LY29uZmlnOjM6Y29uZmlnIEVYRkFUX0ZTXFxuZnMvZXhmYXQvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJleEZBVCBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjE4LjMxODE5MTY0OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyMjI2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBREZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQURGUyAoQWR2YW5jZWQgRGlzayBGaWxlIFN5c3RlbSkgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZnMvYWRmcy9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0J3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcCB0byB1bmRlcnN0YW5kIGhvdyBBREZTIGlzIGJ1aWx0IGFuZCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgbW9kdWxlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhcmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MjIuMjcwNDIxMDQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4NDgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvYWRmcy9LY29uZmlnOjI6Y29uZmlnIEFERlNfRlNcXG5mcy9hZGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQURGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvYWRmcy9LY29uZmlnLTIyLVxcbmZzL2FkZnMvS2NvbmZpZzoyMzpjb25maWcgQURGU19GU19SV1xcbmZzL2FkZnMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJBREZTIHdyaXRlIHN1cHBvcnQgKERBTkdFUk9VUylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjIyLjMxNTQxMTA5NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM0OTcwNjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmU6IGV4dDIncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZnMvZXh0Mi9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGRldGFpbGluZyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgd2UgY2FuIHR3ZWFrLCBwb3RlbnRpYWxseSBvcHRpbWl6ZSwgb3IgZGlzYWJsZSBhbHRvZ2V0aGVyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBJ4oCZbSB0aGlua2luZyB0aGluZ3MgbGlrZSBqb3VybmFsIHN1cHBvcnQsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGxhcmdlIGZpbGUgc3VwcG9ydCDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgdG9vLCBvZiBjb3Vyc2UgLSB1bmRlcnN0YW5kaW5nIHdoaWNoIG90aGVyIHN1YnN5c3RlbXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGV4dDIgY2FuIGJlIGNvcnJlY3RseSBjb25maWd1cmVkIGFuZCB1c2VkLiBBbmQsIEknbGwgYmUgc3VyZSB0byBub3RlIHRoZSB2YXJpb3VzIGRlZmF1bHQgc2V0dGluZ3MgdG8gc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBjdXJyZW50bHkgYXNzdW1lcy4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIGZpbmUtdHVuaW5nIHRoZSBleHQyIG1vZHVsZSB0byBmaXQgdGhpcyBzcGVjaWZpYyB1c2UtY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1ODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoyNS43NTAzODM5MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzY2Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQyL0tjb25maWc6Mjpjb25maWcgRVhUMl9GU1xcbmZzL2V4dDIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTZWNvbmQgZXh0ZW5kZWQgZnMgc3VwcG9ydCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5mcy9leHQyL0tjb25maWctMjAtXFxuZnMvZXh0Mi9LY29uZmlnOjIxOmNvbmZpZyBFWFQyX0ZTX1hBVFRSXFxuZnMvZXh0Mi9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIkV4dDIgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0yOS1cXG5mcy9leHQyL0tjb25maWc6MzA6Y29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMXFxuZnMvZXh0Mi9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIkV4dDIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQyL0tjb25maWctMzktXFxuZnMvZXh0Mi9LY29uZmlnOjQwOmNvbmZpZyBFWFQyX0ZTX1NFQ1VSSVRZXFxuZnMvZXh0Mi9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIkV4dDIgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoyNS43OTc3NTc5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA2ODg2ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUgZm9yIE9NRlMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGZzL29tZnMvS2NvbmZpZ2AuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgd2hlbmV2ZXIgSSBuZWVkIHRvIGFzc2VzcyBvciB0d2VhayBhbnkgYXNwZWN0cyBvZiBhIGZpbGVzeXN0ZW0ncyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGlzIGZpbGUgdG8gY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIE9NRlMgKE9sZCBNYWNpbnRvc2ggRmlsZSBTeXN0ZW0pIG1vZHVsZSwgb3IgcGVyaGFwcyBjZXJ0YWluIHNwZWNpZmljIGZlYXR1cmVzLiBJJ20gZXNwZWNpYWxseSBrZWVuIG9uIHNlZWluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggYW55IGJyb2FkZXIgZmlsZXN5c3RlbSBzZXR0aW5ncyBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hldGhlciBpdCdzIG1vZHVsYXIsIGFuZCBhbnkgY29tcGlsZS10aW1lIGZlYXR1cmVzIHRoYXQgYXJlIHR1cm5lZCBvbiBvciBvZmYuIEknbGwgYWxzbyB0cnkgdG8gZ2F1Z2UgaXRzIHJlbGF0aXZlIGNvbXBsZXhpdHksIGFuZCBtYXliZSBtYWtlIHNvbWUgbWVudGFsIG5vdGVzIGFib3V0IGFyZWFzIHRoYXQgSSBtaWdodCBuZWVkIHRvIHJldmlzaXQgbGF0ZXIgaWYgSSBwbGFuIG9uIGFueSBraW5kIG9mIG1vZGlmaWNhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjI5LjIwNDY0Nzk3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MDM4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9NRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb21mcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29tZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29tZnMvS2NvbmZpZzoyOmNvbmZpZyBPTUZTX0ZTXFxuZnMvb21mcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNvbmljQmx1ZSBPcHRpbWl6ZWQgTVBFRyBGaWxlIFN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoyOS4yNDkxNTc0NTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyODYyOTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZpbGVzeXN0ZW0gY29uZmlnczogYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYEZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkLCBidXQgYnJvYWQsIGxpc3QuIEhhbmcgb24gYSBzZWNvbmQuLi4gYEZBVF9GU2AuLi4gdGhhdCdzIGEgYml0IGRpZmZlcmVudC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSBiZWluZyBhIGhpZGRlbiBjb25maWcuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjay4gWWVhaCwgdGhhdCdzIHJpZ2h0LiBgRkFUX0ZTYCBpcyBzZWxlY3RlZCBieSBib3RoIGBNU0RPU19GU2AgYW5kIGBWRkFUX0ZTYC4gQmVzdCB0byBjb25maXJtIGJ5IG9wZW5pbmcgdGhlIGBmcy9mYXQvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MzMuMjc3Nzg5ODQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5MjczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVNET1NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L0tjb25maWc9Mj1jb25maWcgRkFUX0ZTXFxuLS1cXG5mcy9mYXQvS2NvbmZpZy0zNy1cXG5mcy9mYXQvS2NvbmZpZzozODpjb25maWcgTVNET1NfRlNcXG5mcy9mYXQvS2NvbmZpZy0zOS1cXHR0cmlzdGF0ZSBcXFwiTVNET1MgZnMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MzMuMzIzMjg4NzIxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjczOTc4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5SaWdodCwgc28gYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGJvdGggdWx0aW1hdGVseSByZWx5IG9uIHRoZSBgRkFUX0ZTYCBjb3JlLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaG93IHRoZSBrZXJuZWwncyBmaWxlIHN5c3RlbSBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBJdCdzIGEgY29tbW9uIGRlcGVuZGVuY3kgcGF0dGVybi4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVkZBVF9GU2AgaXMgZGVmaW5lZCBob3cgSSBleHBlY3QgaXQgdG8gYmUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGZzL2ZhdC9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIE5vIG5lZWQgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB3aXRoIGl0IHJpZ2h0IG5vdywganVzdCBxdWlja2x5IHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc5MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjM2Ljc5MDY4OTIxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjI3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGQVRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L0tjb25maWc9Mzg9Y29uZmlnIE1TRE9TX0ZTXFxuLS1cXG5mcy9mYXQvS2NvbmZpZy02Mi1cXG5mcy9mYXQvS2NvbmZpZzo2Mzpjb25maWcgVkZBVF9GU1xcbmZzL2ZhdC9LY29uZmlnLTY0LVxcdHRyaXN0YXRlIFxcXCJWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDozNi44MzUwNTc3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcxMjk0NDY1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmlsZSBTeXN0ZW0gQnVmZmVyIE1hbmFnZW1lbnQgVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZpbGUgc3lzdGVtIGJ1ZmZlciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBpbmNsdXNpb24gaW4gb3VyIGN1cnJlbnQgYW5hbHlzaXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFjY291bnQgZm9yIGJvdGggYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGluIG91ciBjb3ZlcmFnZS4gVGhhdCBmZWVscyBjcml0aWNhbC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb3VyIGF0dGVudGlvbiBvbi4gSSdtIHRoaW5raW5nIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLCBhbmQgYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gLiBUaGVzZSBmZWVsIGxpa2UgdGhlIGNvcmUgY29tcG9uZW50cy4gQnV0IGlzIHRoYXQgYWxsPyBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUuXG5cbldhaXQsIEkgdGhpbmsgdGhlcmUgYXJlIHR3byBtb3JlIHBvdGVudGlhbCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBpbiBvdXIgcHVydmlldzogYF9fYmZvcmdldGAgYW5kIGBfX3N5bmNfZGlydHlfYnVmZmVyYC4gSSB0aGluayB0aGV5IGFyZSBnZXJtYW5lIHRvIG91ciBvdmVyYWxsIGNvdmVyYWdlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBfX2Jmb3JnZXRgIHRvIGNvbmZpcm0gdGhhdCBpdCdzIGhhbmRsaW5nIGJ1ZmZlcnMsIGFuZCBsZXQncyBnbyBzdHJhaWdodCB0byBgZnMvYnVmZmVyLmNgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwOTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTU6MDMuOTY0NTA2OTg4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc4NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogX19iZm9yZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTEwODA9RVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7XFxuLS1cXG5mcy9idWZmZXIuYy0xMDg4LSAqL1xcbmZzL2J1ZmZlci5jOjEwODk6dm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG5mcy9idWZmZXIuYy0xMDkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTU6MDQuMDA5MzAwMzM3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDAzNzcwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQnVmZmVyIE1hbmFnZW1lbnQ6IERpZ2dpbmcgaW50byBgX19iZm9yZ2V0YCBhbmQgU3luY2hyb25pemF0aW9uKipcblxuUmlnaHQsIHNvIGBfX2Jmb3JnZXRgIGlzIGdsb2JhbCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gQ2xlYXJseSwgaXQncyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgZnMvYnVmZmVyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYF9fYmZvcmdldGAgYW5kIG90aGVyIGJ1ZmZlciBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnVmZmVyIGNhY2hlLCBpZiB0aGlzIGlzIHdoZXJlIHRoZSBkaXJ0eSBiaXRzIHJlc2lkZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgc3luY2hyb25pemF0aW9uIHN0cmF0ZWd5IGlzLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIGRpcnR5IGJ1ZmZlciBtYW5hZ2VtZW50LiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyB3ZSBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHBlcnNpc3RlbmNlLiBJJ20ga2VlbiB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX3N5bmNfZGlydHlfYnVmZmVyYCBpbiB0aGlzIGNvbnRleHQuIEl0IGlzIGxpa2VseSBjYWxsZWQgZHVyaW5nIGJ1ZmZlciB3cml0ZS1iYWNrLCBmaWxlIHN5c3RlbSB1bm1vdW50LCBvciBzaW1pbGFyIGNyaXRpY2FsIG9wZXJhdGlvbnMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGF0IGZ1bmN0aW9uLCBhcyBJIGV4cGVjdCBpdCB3aWxsIGludm9sdmUgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHByb2Nlc3NlcyBvciB0aHJlYWRzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3luY2hyb25pemF0aW9uIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjoxMS4wMTMwNzM2NDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDM2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKiBfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTI3MTY9RVhQT1JUX1NZTUJPTCh3cml0ZV9kaXJ0eV9idWZmZXIpO1xcbi0tXFxuZnMvYnVmZmVyLmMtMjcyMi0gKi9cXG5mcy9idWZmZXIuYzoyNzIzOmludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcXG5mcy9idWZmZXIuYy0yNzI0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MTEuMDU5MTE2MjA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NzA1ODY3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBhIEdsb2JhbCBpbiBPQ0ZTMioqXG5cbk9rYXksIHNvIGBfX3N5bmNfZGlydHlfYnVmZmVyYC4uLiB0aGF0J3MgYSBnbG9iYWwgZnVuY3Rpb24uIEhtbS4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQ/IExldCdzIHRyYWNlIGl0cyB1c2FnZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBjb250ZXh0LCBzZWVtcyB0byBiZSBpbiB0aGUgd3JpdGUgcGF0aC4gTGV0J3MgZGlnIGludG8gYG9jZnMyX3dyaXRlX2Jsb2NrYC4gSSdsbCBmaW5kIHRoYXQgaW4gYGZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNgLiBUaW1lIHRvIHNlZSBob3cgdGhpcyBnbG9iYWwgZnVuY3Rpb24gdGllcyBpbnRvIHRoZSBibG9jayB3cml0ZSBvcGVyYXRpb25zIG9mIE9DRlMyLiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFyb3VuZCBpdHMgcm9sZSBpbiBkYXRhIGludGVncml0eSBhbmQgc3luY2hyb25pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk2NCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjE2LjcyOTcwNTg0M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MDAyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIG9jZnMyX3dyaXRlX2Jsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zNj1CVUZGRVJfRk5TKE5lZWRzVmFsaWRhdGUsIG5lZWRzX3ZhbGlkYXRlKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTM3LVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6Mzg6aW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzktXFx0XFx0ICAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjE2Ljc3NTMxMTg4MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDM5NDEyMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKk9DRlMyIEJsb2NrIFdyaXRlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYG9jZnMyX3dyaXRlX2Jsb2NrYC4gSSBrbm93IHRoaXMgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIGFuZCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgYXMgaXQgcmVsYXRlcyB0byBob3cgT0NGUzIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc3VwZXJibG9jayBhbmQgYmFja3Vwcywgc2luY2UgdGhvc2UgYXJlIGNyaXRpY2FsIG1ldGFkYXRhIGFyZWFzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IHRoaXMgaXMgcHJvYmFibHkgYGZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNgLiBMZXQncyBmb2N1cyBvbiBgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwYCB3aXRoaW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IGl0IGNhbGxzIGFuZCBpbnRlcmFjdHMgd2l0aCBgb2NmczJfd3JpdGVfYmxvY2tgLCBzaW5jZSBpdCBpcyBwcm9iYWJseSBhIHVzZXIgb2YgdGhhdCBmdW5jdGlvbi4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGhlcmUuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM1MywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjIzLjgxNDcyNzgwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NDExNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDAyPXN0YXRpYyB2b2lkIG9jZnMyX2NoZWNrX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00MjQtICovXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzo0MjU6aW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQyNi1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjoyMy44NjExNzg0MTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MTg2MjY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBHbG9iYWwgU3RhdGUgTWFuYWdlbWVudCBpbiBGaWxlc3lzdGVtcyoqXG5cblJpZ2h0LCBgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwYCDigJMgdGhhdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgaG93IGdsb2JhbCBzdGF0ZSBpcyBtYW5hZ2VkIGFuZCBhY2Nlc3NlZC4gWW91IGtub3cgdGhlIGltcGxpY2F0aW9ucyDigJMgcG90ZW50aWFsIGNvbnRlbnRpb24sIHNlcmlhbGl6YXRpb24gaXNzdWVzLCBhbmQgZ2VuZXJhbGx5IHRoZSB0cmlja3kgbmF0dXJlIG9mIGNvbmN1cnJlbnQgYWNjZXNzIGluIGEgZmlsZXN5c3RlbS4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0cyBnbG9iYWwgbmF0dXJlIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC5cblxuTGV0IG1lIHNlZSBob3cgb3RoZXJzIGhhbmRsZSBhIHNpbWlsYXIgcmVxdWlyZW1lbnQuLi4gQWhhISBMZXQncyBleGFtaW5lIGBmYXRfc3luY19iaHNgIGluIGBmcy9mYXQvbWlzYy5jYC4gSSBleHBlY3QgdG8gc2VlIHN0cmF0ZWdpZXMgZm9yIGRlYWxpbmcgd2l0aCBkYXRhIGJ1ZmZlcnMgKEJIUykgYW5kIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGluIGEgc2ltcGxlciBmaWxlc3lzdGVtIGNvbnRleHQuIFRoaXMgbWlnaHQgcHJvdmlkZSBjbHVlcyBvbiBob3cgdGhleSdyZSBoYW5kbGluZyBzaW1pbGFyIGlzc3VlcywgZXZlbiBpZiBpdCdzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgZmlsZSBzeXN0ZW0uIENvbXBhcmluZyBhbmQgY29udHJhc3RpbmcgYXBwcm9hY2hlcyBjb3VsZCBoaWdobGlnaHQgdGhlIHN1YnRsZSBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIGRpZmZlcmVudCBzdGF0ZSBtYW5hZ2VtZW50IGFwcHJvYWNoZXMgd2l0aGluIHRoZXNlIGtpbmRzIG9mIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3ODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjoyNy45NTMwNDM4NjFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjY5NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKiBmYXRfc3luY19iaHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mYXQvbWlzYy5jPTM0OD1FWFBPUlRfU1lNQk9MX0dQTChmYXRfdXBkYXRlX3RpbWUpO1xcbmZzL2ZhdC9taXNjLmMtMzQ5LVxcbmZzL2ZhdC9taXNjLmM6MzUwOmludCBmYXRfc3luY19iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzKVxcbmZzL2ZhdC9taXNjLmMtMzUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MjguMDAwMzE4NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE5MjA1NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEV4RkFUIElzc3VlKipcblxuQWxyaWdodCwgYGZhdF9zeW5jX2Joc2DigKYgdGhhdCdzIGdsb2JhbCwgaXNuJ3QgaXQ/IFNvbWV0aGluZydzIG5hZ2dpbmcgYXQgbWUgYWJvdXQgaXQuIFdlIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgZXhGQVQgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGV4ZmF0X3VwZGF0ZV9iaHNgIGluIGBmcy9leGZhdC9taXNjLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgaXQncyBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgQmxvY2sgSGVhZCBTcGFjZSwgd2hpY2ggY291bGQgdmVyeSB3ZWxsIGJlIHJlbGV2YW50IHRvIHRoZSBnbG9iYWwgdmFyaWFibGUgd2UncmUgY29uY2VybmVkIGFib3V0LiBUaW1lIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHRoZXJlLiBXZSBrbm93IGV4RkFUIGNhbiBiZSB0cmlja3ksIHNvIGxldCdzIGdldCByaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxODUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjozMS43MTk1MjgxNDdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAxNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKiBleGZhdF91cGRhdGVfYmhzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4ZmF0L21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leGZhdC9taXNjLmM9MTY0PWludCBleGZhdF91cGRhdGVfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHN5bmMpXFxuLS1cXG5mcy9leGZhdC9taXNjLmMtMTc2LVxcbmZzL2V4ZmF0L21pc2MuYzoxNzc6aW50IGV4ZmF0X3VwZGF0ZV9iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzLCBpbnQgc3luYylcXG5mcy9leGZhdC9taXNjLmMtMTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MzEuNzY1MDM1Nzk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjMwMDc2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeTpcblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIENvZGUgSW50ZXJhY3Rpb25zKipcblxuUmlnaHQsIGBleGZhdF91cGRhdGVfYmhzYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIEEgZ29vZCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0byB0cmFjZSBpdHMgdXNhZ2UuIEdpdmVuIGl0cyBuYW1lLCBpdCBwcm9iYWJseSBwbGF5cyBhIHJvbGUgaW4gdXBkYXRpbmcgYmxvY2sgaGVhZGVycy4gTGV0J3Mgc2VlIGhvdyBzb21ldGhpbmcgc2ltaWxhciBpcyBoYW5kbGVkIGluIG90aGVyIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNvIGxldCdzIGNoZWNrIGBleHQyX3hhdHRyX3NldDJgIHdpdGhpbiBgZnMvZXh0Mi94YXR0ci5jYCBhcyBhIGNvbXBhcmlzb24uIEl0J2xsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IG9uIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIG1heSBiZSB1cGRhdGVkIGluIHJlbGF0aW9uIHRvIGJsb2NrIGhlYWRlcnMsIGdpdmluZyBtZSBhIHBvaW50IG9mIGNvbXBhcmlzb24gYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxscyB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NDgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjozNS41MjgwNDczMzFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTQ1MDA4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogZXh0Ml94YXR0cl9zZXQyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDIveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MzUuNTc1MjAwNDc5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzMzNzY4MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBleHQyX3hhdHRyX3NldDJgIFNlYXJjaCBTdHJhdGVneSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyB0byB0cmFjayBkb3duIGluc3RhbmNlcyBvZiBgZXh0Ml94YXR0cl9zZXQyYC4gU2ltcGxlIGVub3VnaCwgYSBjb21tb24gZnVuY3Rpb24gbmFtZSB0byBpbnZlc3RpZ2F0ZSB3aGVuIHdvcmtpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGV4dDIgZmlsZXN5c3RlbXMuIEhvd2V2ZXIsIHRoZSBhYnNlbmNlIG9mIHRoZSBgXmAgaW4gdGhlIHNlYXJjaCB0ZXJtIGltcGxpZXMgYSBwcmVmZXJlbmNlIGZvciBhIG1vcmUgYnJvYWQgc2VhcmNoLiBXZSdyZSBub3QgbG9va2luZyBmb3IgZXhhY3QgbWF0Y2hlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGxpbmVzIG9yIGRlZmluaXRpb25zLCBidXQgKmFueSogb2NjdXJyZW5jZXMgb2YgdGhlIHN5bWJvbCBgZXh0Ml94YXR0cl9zZXQyYCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBleHBsb3JpbmcgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiwgaXRzIHVzYWdlIHdpdGhpbiBvdGhlciBmdW5jdGlvbnMsIHBvdGVudGlhbCBtb2RpZmljYXRpb25zIG9mIHRoZSBmdW5jdGlvbiwgb3IgZXZlbiByZWZlcmVuY2VzIHdpdGhpbiBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uLiBJdCBjb3VsZCBpbmRpY2F0ZSBhbiBpbnZlc3RpZ2F0aW9uIG9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIHBvdGVudGlhbCBidWcgaHVudGluZyBvciBtb2RpZmljYXRpb25zIHRvIHRoaXMgcGllY2Ugb2YgY29kZS4gV2UgY291bGQgYmUgbG9va2luZyBmb3I6XG5cbiogICAqKkZ1bmN0aW9uIENhbGxzOioqIFdoZXJlIGlzIGBleHQyX3hhdHRyX3NldDJgIGJlaW5nIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgYXJndW1lbnQgdXNhZ2U/XG4qICAgKipEZWZpbml0aW9ucyBhbmQgSW1wbGVtZW50YXRpb25zOioqIFdlIG1pZ2h0IHdhbnQgdG8gcmV2aWV3IHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGZpbGVzeXN0ZW0ncyBleHRlbmRlZCBhdHRyaWJ1dGUgaW1wbGVtZW50YXRpb24uXG4qICAgKipEb2N1bWVudGF0aW9uIG9yIENvbW1lbnRzOioqIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgbWVudGlvbmVkIGluIGRvY3VtZW50YXRpb24sIG9yIGhhdmUgY29tbWVudHMgaW4gb3RoZXIgbG9jYXRpb25zIGRlc2NyaWJpbmcgaXRzIHVzYWdlLlxuKiAgICoqVmFyaWF0aW9ucyBvciBTaW1pbGFyIEZ1bmN0aW9uczoqKiBXZSBtaWdodCBiZSBsb29raW5nIGZvciBzaW1pbGFyIGZ1bmN0aW9ucywgb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGUgcHJpbWFyeSBmdW5jdGlvbi5cblxuVGhlIGxhY2sgb2YgdGhlIGBeYCBtaWdodCBiZSBiZWNhdXNlIHdlIHdhbnQgdG8gc2VlIHRoZSB2YXJpb3VzIHVzZXMsIGluIHBhcnRpY3VsYXIgd2hlbiB0aGUgcGFyYW1ldGVyIG9yZGVyIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjo0Ni45MDg5NzE2NDRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjIxMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDJfeGF0dHJfc2V0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQyL3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0Mi94YXR0ci5jLTkxLVxcbmZzL2V4dDIveGF0dHIuYzo5MjpzdGF0aWMgaW50IGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuZnMvZXh0Mi94YXR0ci5jLTkzLVxcdFxcdFxcdCAgIHN0cnVjdCBleHQyX3hhdHRyX2hlYWRlciAqKTtcXG4tLVxcbmZzL2V4dDIveGF0dHIuYz00MDY9ZXh0Ml94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQyL3hhdHRyLmMtNjM1LVxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpOyAgLyogd2Ugd2VyZSBtb2RpZnlpbmcgaW4tcGxhY2UuICovXFxuZnMvZXh0Mi94YXR0ci5jOjYzNjpcXHRcXHRlcnJvciA9IGV4dDJfeGF0dHJfc2V0Mihpbm9kZSwgYmgsIE5VTEwpO1xcbmZzL2V4dDIveGF0dHIuYy02MzctXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2V4dDIveGF0dHIuYy02NDAtXFx0XFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7ICAvKiB3ZSB3ZXJlIG1vZGlmeWluZyBpbi1wbGFjZS4gKi9cXG5mcy9leHQyL3hhdHRyLmM6NjQxOlxcdFxcdGVycm9yID0gZXh0Ml94YXR0cl9zZXQyKGlub2RlLCBiaCwgaGVhZGVyKTtcXG5mcy9leHQyL3hhdHRyLmMtNjQyLVxcdH1cXG4tLVxcbmZzL2V4dDIveGF0dHIuYz03MDU9c3RhdGljIGludFxcbmZzL2V4dDIveGF0dHIuYzo3MDY6ZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbmZzL2V4dDIveGF0dHIuYy03MDctXFx0XFx0c3RydWN0IGV4dDJfeGF0dHJfaGVhZGVyICpoZWFkZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjQ2Ljk1MzU5ODQ3M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjM5MjgzNzY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBleHQyX3hhdHRyX3NldDJgIFN0YXRpYyBGdW5jdGlvbiBhbmQgTWV0YWRhdGEgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgZXh0Ml94YXR0cl9zZXQyYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgc2NvcGUsIGxpa2VseSBsaW1pdGluZyBpdHMgZGlyZWN0IHVzYWdlIG91dHNpZGUgdGhlIHNvdXJjZSBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyBmaXQgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBmaWxlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHNldCBhbmQgaG93IHRoYXQgaW1wYWN0cyBvdmVyYWxsIG1ldGFkYXRhIGNvbnNpc3RlbmN5LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSBgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIGZvciBtZXRhZGF0YSB3cml0ZSBvcGVyYXRpb25zIHRvIGJlIGRlYWx0IHdpdGguIFNwZWNpZmljYWxseSwgSSdsbCBsb29rIGludG8gYGZzL2V4dDQvZXh0NF9qYmQyLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBkaXJ0eSBtZXRhZGF0YS4gTGV0J3Mgc2VlIGhvdyB0aGF0IHRpZXMgaW50byB0aGUgam91cm5hbGluZyBwcm9jZXNzLiBJIHN1c3BlY3QgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIG1pZ2h0IGJlIHRoZSBjb3JlIGxvZ2ljIGZvciBlbnN1cmluZyBhdG9taWNpdHkgd2hlbiB3cml0aW5nIGF0dHJpYnV0ZSBkYXRhLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXMgcmVsYXRlZCB0byBqYmQyLCB3aGljaCBpbmRpY2F0ZXMgYSBqb3VybmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU5NSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjA5LjM0NjQzOTM5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MTU0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9leHQ0X2piZDIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfamJkMi5jPTM1Mz1zdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0NF9qYmQyLmMtMzY3LVxcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MzY4OmludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG5mcy9leHQ0L2V4dDRfamJkMi5jLTM2OS1cXHRcXHRcXHRcXHQgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6MDkuMzkxMjYwMzVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5MjkzNDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIERpcnR5IE1ldGFkYXRhIEhhbmRsZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYC4gSXQncyBhIGdsb2JhbCBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgdHJhY2UgdGhpcyB0byBzZWUgd2hlcmUgaXQgbWlnaHQgYmUgYmVpbmcgdXNlZCwgYW5kIHdoYXQgY29udGV4dCB0aGF0IGlzLlxuXG5UaGUgbmV4dCBvYnZpb3VzIHRoaW5nIHRvIGNoZWNrIGlzIGB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkYCBpbiBgZnMvZXh0NC9tbXAuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBoYW5kbGluZyBtaWdodCBiZS4gSSdkIGV4cGVjdCB0aGF0IGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIHdyaXRpbmcgbWV0YWRhdGEsIHBhcnRpY3VsYXJseSBzaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIFwiZGlydHlcIiBoYW5kbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGhhd2luZyBwcm9jZXNzIGlzIGludGVyYWN0aW5nIHdpdGggdGhpcyBnbG9iYWwgaGFuZGxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJlYSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBpbiB0aGUgZmlsZXN5c3RlbSwgZXNwZWNpYWxseSBhcm91bmQgbWV0YWRhdGEgY29uc2lzdGVuY3kgZHVyaW5nIHJlY292ZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjE0Ljg4NDE5NzQxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDYzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVfbW1wX2Jsb2NrX3RoYXdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L21tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvbW1wLmM9MzA9c3RhdGljIHZvaWQgZXh0NF9tbXBfY3N1bV9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcClcXG4tLVxcbmZzL2V4dDQvbW1wLmMtNDEtICovXFxuZnMvZXh0NC9tbXAuYzo0MjpzdGF0aWMgaW50IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L21tcC5jLTQzLVxcdFxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvbW1wLmM9NTc9c3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvbW1wLmMtNjMtXFx0c2NvcGVkX2d1YXJkKHN1cGVyX3dyaXRlLCBzYilcXG5mcy9leHQ0L21tcC5jOjY0OlxcdFxcdHJldHVybiB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHNiLCBiaCk7XFxuZnMvZXh0NC9tbXAuYy02NS19XFxuLS1cXG5mcy9leHQ0L21tcC5jPTI3ND1pbnQgZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21tcC5jLTM1My1cXHQgKi9cXG5mcy9leHQ0L21tcC5jOjM1NDpcXHRyZXR2YWwgPSB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHNiLCBiaCk7XFxuZnMvZXh0NC9tbXAuYy0zNTUtXFx0aWYgKHJldHZhbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6MTQuOTI5NzA4NzUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzI2MzI3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHdyaXRlX21tcF9ibG9ja190aGF3ZWRgIEZ1bmN0aW9uKipcblxuSG1tLCBzbyBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgaXMgbWFya2VkIGFzIGEgYHN0YXRpY2AgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBpdHMgc2NvcGUuIEl0J3Mgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggdGVsbHMgbWUgaXQncyBsaWtlbHkgYSBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgbGFyZ2VyIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgR0ZTMiBmaWxlIHN5c3RlbS4gTm93LCBnaXZlbiB0aGUgXCJ0aGF3ZWRcIiBwYXJ0IG9mIHRoZSBuYW1lLCBpdCBoYXMgdG8gZG8gd2l0aCBob3cgdGhlIGZpbGUgc3lzdGVtIHdyaXRlcyBibG9ja3Mgd2hlbiB0aGV5IGhhdmUgYmVlbiBcInRoYXdlZFwiIGFmdGVyIGEgcG90ZW50aWFsIHNuYXBzaG90IGNyZWF0aW9uLCBvciBhIHNpbWlsYXIgb3BlcmF0aW9uLiBUbyB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiB0aGF0IGxvZ2ljLCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGludGVyZmFjZXMgd2l0aCBvdGhlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoIGBnZnMyX3BpbmBcblxuSSBrbm93IHRoYXQgYGdmczJfcGluYCBpcyBsaWtlbHkgaW1wb3J0YW50IHRvIGludmVzdGlnYXRlIHRoaXMsIHNpbmNlIEkgYW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRpbmcgb2YgZGF0YSB0byB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGlzIGBnZnMyX3BpbmAgaXMgY29tbW9ubHkgdXNlZCB0byBcInBpblwiIGNlcnRhaW4gYmxvY2tzIG9mIHRoZSBmaWxlIHN5c3RlbSwgc28gdGhhdCB0aGV5J3JlIG5vdCBzd2FwcGVkIG91dCBvZiBtZW1vcnkuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvciBtZXRhZGF0YS5cblxuQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGp1bXAgaW50byB0aGUgYGZzL2dmczIvbG9wcy5jYCBzb3VyY2UgY29kZSBhbmQgc2VlIGhvdyBgZ2ZzMl9waW5gIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHdyaXRlX21tcF9ibG9ja190aGF3ZWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hhdCByZXNvdXJjZXMgaXQgYWNxdWlyZXMgYW5kIHJlbGVhc2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGNvbnNpc3RlbmN5IGFuZCBob3cgdGhlIHRoYXdpbmcgbWVjaGFuaXNtIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjE5LjIwMjM0NDkyMVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3Njk1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGdmczJfcGluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvbG9wcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvbG9wcy5jLTQxLSAqL1xcbmZzL2dmczIvbG9wcy5jOjQyOnZvaWQgZ2ZzMl9waW4oc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuZnMvZ2ZzMi9sb3BzLmMtNDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzoxOS4yNDgxMjEyMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI5OTEzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIElzc3VlcyBpbiB0aGUgR0ZTMiBGaWxlc3lzdGVtKipcblxuQWxyaWdodCwgc28gYGdmczJfcGluYCBpcyBmbGFnZ2VkIGFzIGEgZ2xvYmFsIHZhcmlhYmxlLiBUaGF0J3MgaW1tZWRpYXRlbHkgc29tZXRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWU7IGdsb2JhbHMgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50IGxpa2UgYSBmaWxlc3lzdGVtIGFyZSBvZnRlbiBhIHNvdXJjZSBvZiBjb250ZW50aW9uIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIHNjb3BlIGJldHRlci5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGdsb2JhbCBtaWdodCBiZSBpbnZvbHZlZCwgSSBzaG91bGQgZm9jdXMgb24gYSBsaWtlbHkgd3JpdGUgcGF0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbG9vayBhdCBob3cgZGF0YSBnZXRzIHdyaXR0ZW4gdG8gYW4gaW5vZGUuIGBfX29tZnNfd3JpdGVfaW5vZGVgIGluIGBmcy9vbWZzL2lub2RlLmNgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIHdpdGhpbiB0aGUgT01GUyBmaWxlc3lzdGVtIGNvbnRleHQsIGFzc3VtaW5nIGBvbWZzYCBpcyByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBvbi1kaXNrIHN0cnVjdHVyZS4gSXQgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBpbm9kZSBvbiBkaXNrIHdoZW4gYSB3cml0ZSBvY2N1cnMuIFRoaXMgaXMgd2hlcmUgSSdsbCBzdGFydCBkaWdnaW5nIHRvIHNlZSBob3cgYGdmczJfcGluYCBtaWdodCBiZSB0b3VjaGVkIGR1cmluZyBhIHdyaXRlIG9wZXJhdGlvbi4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgaW1wbGljYXRpb25zIGlmIGl0cyBnbG9iYWwgbmF0dXJlIGlzIHBvb3JseSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjIzLjc3ODAzNjk2MloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTI5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19vbWZzX3dyaXRlX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29tZnMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vbWZzL2lub2RlLmM9ODU9c3RhdGljIHZvaWQgb21mc191cGRhdGVfY2hlY2tzdW1zKHN0cnVjdCBvbWZzX2lub2RlICpvaSlcXG4tLVxcbmZzL29tZnMvaW5vZGUuYy0xMDMtXFxuZnMvb21mcy9pbm9kZS5jOjEwNDpzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG5mcy9vbWZzL2lub2RlLmMtMTA1LXtcXG4tLVxcbmZzL29tZnMvaW5vZGUuYz0xNzQ9c3RhdGljIGludCBvbWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbmZzL29tZnMvaW5vZGUuYy0xNzUte1xcbmZzL29tZnMvaW5vZGUuYzoxNzY6XFx0cmV0dXJuIF9fb21mc193cml0ZV9pbm9kZShpbm9kZSwgd2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xcbmZzL29tZnMvaW5vZGUuYy0xNzctfVxcbi0tXFxuZnMvb21mcy9pbm9kZS5jPTE3OT1pbnQgb21mc19zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvb21mcy9pbm9kZS5jLTE4MC17XFxuZnMvb21mcy9pbm9kZS5jOjE4MTpcXHRyZXR1cm4gX19vbWZzX3dyaXRlX2lub2RlKGlub2RlLCAxKTtcXG5mcy9vbWZzL2lub2RlLmMtMTgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6MjMuODIzNjk0OTNaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNjg0ODkyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBhZGZzX2Rpcl9zeW5jYCBGb2xsb3dpbmcgYSBMb29rIGF0IGEgU3RhdGljIElub2RlIFdyaXRlIEZ1bmN0aW9uKipcblxuUmlnaHQsIGBfX29tZnNfd3JpdGVfaW5vZGVgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkIGFuZCBpcyBsaWtlbHkgcGFydCBvZiBhIG1vcmUgbGltaXRlZCBzY29wZSB3aXRoaW4gdGhlIE9NRlMgZmlsZXN5c3RlbS4gR2l2ZW4gdGhhdCBjb250ZXh0LCBJJ20gbm93IGN1cmlvdXMgYWJvdXQgZGlyZWN0b3J5IHN5bmNocm9uaXphdGlvbiB3aXRoaW4gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSwgbGV0J3Mgc2VlLCB0aGUgQURGUyBmaWxlc3lzdGVtLiBNeSBpbnRlbnRpb24gaXMgdG8gY29udHJhc3QgaG93IHRoZXkgYXBwcm9hY2ggaW5vZGUgd3JpdGluZyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgdXBkYXRlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgYWRmc19kaXJfc3luY2AgZnVuY3Rpb24uIExldCdzIGhlYWQgb3ZlciB0byBgZnMvYWRmcy9kaXIuY2AgYW5kIGRpZyBpbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSB1c2VmdWwgaW5zaWdodCBpbnRvIGEgZGlmZmVyZW50IGFwcHJvYWNoIGZvciBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGlzIHJlbGV2YW50IGdpdmVuIHRoZSBwcmlvciBleGFtaW5hdGlvbiBvZiBhIHN0YXRpYywgbGlrZWx5IGludGVybmFsLCB3cml0ZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzozNi4xOTIxOTIwNTRaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDI1MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZnNfZGlyX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWRmcy9kaXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZGZzL2Rpci5jPTE3Nz1zdGF0aWMgdm9pZCBhZGZzX2Rpcl9tYXJrX2RpcnR5KHN0cnVjdCBhZGZzX2RpciAqZGlyKVxcbi0tXFxuZnMvYWRmcy9kaXIuYy0xODUtXFxuZnMvYWRmcy9kaXIuYzoxODY6c3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxcbmZzL2FkZnMvZGlyLmMtMTg3LXtcXG4tLVxcbmZzL2FkZnMvZGlyLmM9Mjc2PWFkZnNfZGlyX3VwZGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9iaiwgaW50IHdhaXQpXFxuLS1cXG5mcy9hZGZzL2Rpci5jLTMwNC1cXHRpZiAod2FpdClcXG5mcy9hZGZzL2Rpci5jOjMwNTpcXHRcXHRyZXQgPSBhZGZzX2Rpcl9zeW5jKFxcdTAwMjZkaXIpO1xcbmZzL2FkZnMvZGlyLmMtMzA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzozNi4yMzY2MjQwODNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NzU3MjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqU3RhdGljIEFuYWx5c2lzIG9mIEFERlMgRGlyZWN0b3J5IFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYGFkZnNfZGlyX3N5bmNgLiBGaXJzdCBvYnNlcnZhdGlvbiDigJMgaXQncyBzdGF0aWMuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTm93LCB0byB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYW5kIGpvdXJuYWwgbWFuYWdlbWVudCBpbiB0aGUgT0NGUzIgZmlsZSBzeXN0ZW0uIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBgX19vY2ZzMl9qb3VybmFsX2FjY2Vzc2AgbG9jYXRlZCBpbiBgZnMvb2NmczIvam91cm5hbC5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyBgYWRmc19kaXJfc3luY2AgbWlnaHQgYmUgaW50ZXJhY3RpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHdpdGggdGhlIGpvdXJuYWxpbmcgbWVjaGFuaXNtIGR1cmluZyBzeW5jaHJvbml6YXRpb24gZXZlbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBqb3VybmFsIGludGVyYWN0aW9ucyBpcyBwYXJhbW91bnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mjk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDAuOTg0MjAwNDE4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwMTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX29jZnMyX2pvdXJuYWxfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2pvdXJuYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9qb3VybmFsLmM9NTI3PXN0YXRpYyB2b2lkIG9jZnMyX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jLTUzNS1cXHQgKiBtdXN0IHVuY29uZGl0aW9uYWxseSBjb21wdXRlIHRoZSBlY2MgZGF0YS5cXG5mcy9vY2ZzMi9qb3VybmFsLmM6NTM2OlxcdCAqIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoKSB3aWxsIG9ubHkgc2V0IHRoZSB0cmlnZ2VycyBpZlxcbmZzL29jZnMyL2pvdXJuYWwuYy01MzctXFx0ICogbWV0YWVjYyBpcyBlbmFibGVkLlxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTU0Nj1zdGF0aWMgdm9pZCBvY2ZzMl9kcV9mcm96ZW5fdHJpZ2dlcihzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2VycyxcXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYy01NTUtXFx0ICogbXVzdCB1bmNvbmRpdGlvbmFsbHkgY29tcHV0ZSB0aGUgZWNjIGRhdGEuXFxuZnMvb2NmczIvam91cm5hbC5jOjU1NjpcXHQgKiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKCkgd2lsbCBvbmx5IHNldCB0aGUgdHJpZ2dlcnMgaWZcXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTU3LVxcdCAqIG1ldGFlY2MgaXMgZW5hYmxlZC5cXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYz01NjY9c3RhdGljIHZvaWQgb2NmczJfZGJfZnJvemVuX3RyaWdnZXIoc3RydWN0IGpiZDJfYnVmZmVyX3RyaWdnZXJfdHlwZSAqdHJpZ2dlcnMsXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTc1LVxcdCAqIG11c3QgdW5jb25kaXRpb25hbGx5IGNvbXB1dGUgdGhlIGVjYyBkYXRhLlxcbmZzL29jZnMyL2pvdXJuYWwuYzo1NzY6XFx0ICogX19vY2ZzMl9qb3VybmFsX2FjY2VzcygpIHdpbGwgb25seSBzZXQgdGhlIHRyaWdnZXJzIGlmXFxuZnMvb2NmczIvam91cm5hbC5jLTU3Ny1cXHQgKiBtZXRhZWNjIGlzIGVuYWJsZWQuXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmM9NjQ3PXZvaWQgb2NmczJfaW5pdGlhbGl6ZV9qb3VybmFsX3RyaWdnZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNjU1LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo2NTY6c3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIvam91cm5hbC5jLTY1Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTczND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzM4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3Mzk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc0MC1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2b3NiLVxcdTAwM2VzX2pvdXJuYWxfdHJpZ2dlcnNbT0NGUzJfSlRSX0RJXSxcXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYz03NDQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jLTc0OC1cXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzQ5OlxcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLFxcbmZzL29jZnMyL2pvdXJuYWwuYy03NTAtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm9zYi1cXHUwMDNlc19qb3VybmFsX3RyaWdnZXJzW09DRlMyX0pUUl9FQl0sXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmM9NzU0PWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSxcXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYy03NTgtXFxuZnMvb2NmczIvam91cm5hbC5jOjc1OTpcXHRyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCxcXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzYwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfUkJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc2ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzY4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3Njk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc3MC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfR0RdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc3ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzc4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3Nzk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc4MC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfREJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc4ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzg4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3ODk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc5MC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfWEJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc5ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzk4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3OTk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTgwMC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRFFdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTgwND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtODA4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo4MDk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTgxMC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRFJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTgxND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtODE4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo4MTk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTgyMC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRExdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTgyND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtODI2LXtcXG5mcy9vY2ZzMi9qb3VybmFsLmM6ODI3OlxcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLCBOVUxMLCB0eXBlKTtcXG5mcy9vY2ZzMi9qb3VybmFsLmMtODI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDEuMDMyMzA3NTE3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDQ5MTY5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIE9DRlMyIGFuZCBHRlMyIEpvdXJuYWxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG9jZnMyYCBjb2RlIGFuZCBJIHNlZSB0aGlzIGZ1bmN0aW9uLCBgX19vY2ZzMl9qb3VybmFsX2FjY2Vzc2AuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQncyBzY29wZWQgdG8gdGhlIHNvdXJjZSBmaWxlIHdoZXJlIGl0J3MgZGVmaW5lZCwgd2hpY2ggaXMgZmFpcmx5IHN0YW5kYXJkIGZvciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBIb3dldmVyLCBJIGFsc28gc2VlIHRoaXMgb3RoZXIsIHNpbWlsYXJseSBuYW1lZCBmdW5jdGlvbiwgYG9jZnMyX2pvdXJuYWxfYWNjZXNzYCwgYW5kIHRoYXQncyBnbG9iYWwuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uIG9yIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgc2NvcGUgd2hlbiBJIGNvbWUgYmFjayBhbmQgYXVkaXQgdGhpcyBjb2RlIGxhdGVyLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZSBHRlMyIGZpbGUgc3lzdGVtIGlzIHNwcmluZ2luZyB0byBtaW5kLiBJdCdzIHRpbWUgdG8gY2hlY2sgaG93IEdGUzIgaGFuZGxlcyBzb21ldGhpbmcgYW5hbG9nb3VzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBHRlMyIGNvZGUgYmFzZSBub3cuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGBnZnMyX2FpbDFfZW1wdHlfb25lYCBmdW5jdGlvbiwgZm91bmQgaW4gYGZzL2dmczIvbG9nLmNgLiBTZWVpbmcgaG93IHRoZSBHRlMyIGF1dGhvcnMgaGFuZGxlIHJlbGF0ZWQgY2FzZXMgbWF5IHByb3ZpZGUgc29tZSB1c2VmdWwgaW5zaWdodHMgYW5kIGJlc3QtcHJhY3RpY2UgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzIyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDYuNjM3MjI3MTI2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTczMDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZnMyX2FpbDFfZW1wdHlfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvbG9nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9sb2cuYz0yNzg9c3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfdHIoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3RyYW5zICp0cixcXG4tLVxcbmZzL2dmczIvbG9nLmMtMjkxLS8qKlxcbmZzL2dmczIvbG9nLmM6MjkyOiAqIGdmczJfYWlsMV9lbXB0eV9vbmUgLSBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zIGluIHRoZSBBSUwgaGFzIGJlZW4gc3luY2VkXFxuZnMvZ2ZzMi9sb2cuYy0yOTMtICogQHNkcDogdGhlIGZpbGVzeXN0ZW1cXG4tLVxcbmZzL2dmczIvbG9nLmMtMjk5LVxcbmZzL2dmczIvbG9nLmM6MzAwOnN0YXRpYyBpbnQgZ2ZzMl9haWwxX2VtcHR5X29uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfdHJhbnMgKnRyLFxcbmZzL2dmczIvbG9nLmMtMzAxLVxcdFxcdFxcdFxcdGludCAqbWF4X3Jldm9rZXMpXFxuLS1cXG5mcy9nZnMyL2xvZy5jPTM1Mj1zdGF0aWMgYm9vbCBnZnMyX2FpbDFfZW1wdHkoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBtYXhfcmV2b2tlcylcXG4tLVxcbmZzL2dmczIvbG9nLmMtMzU5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHRyLCBzLCBcXHUwMDI2c2RwLVxcdTAwM2VzZF9haWwxX2xpc3QsIHRyX2xpc3QpIHtcXG5mcy9nZnMyL2xvZy5jOjM2MDpcXHRcXHRpZiAoIWdmczJfYWlsMV9lbXB0eV9vbmUoc2RwLCB0ciwgXFx1MDAyNm1heF9yZXZva2VzKSBcXHUwMDI2XFx1MDAyNiBvbGRlc3RfdHIpXFxuZnMvZ2ZzMi9sb2cuYy0zNjEtXFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZ0ci1cXHUwMDNldHJfbGlzdCwgXFx1MDAyNnNkcC1cXHUwMDNlc2RfYWlsMl9saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDYuNjgyOTY2NjU0WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTU2NjQ4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGdmczJfYWlsMV9lbXB0eV9vbmVgKipcblxuUmlnaHQsIGBnZnMyX2FpbDFfZW1wdHlfb25lYCBpcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGFib3V0IGl0cyBzY29wZSBhbmQgaG93IGl0J3MgbGlrZWx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBHRlMyIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0J3MgZGVsdmUgaW50byB0aGUgam91cm5hbC4gU3BlY2lmaWNhbGx5LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgamJkMl9mY193YWl0X2J1ZnNgIGluIGBmcy9qYmQyL2pvdXJuYWwuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGFuZCBob3cgdGhpcyBzdGF0aWMgdmFyaWFibGUgcGxheXMgYSByb2xlIGluIGZsb3cgY29udHJvbCB3aXRoaW4gdGhlIGpvdXJuYWwsIGFuZCBwYXJ0aWN1bGFybHksIHdoYXQgaW1wYWN0IGl0IGhhcyBvbiBidWZmZXIgd2FpdGluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGNhbGxzIGNvb3JkaW5hdGUgd2l0aCwgb3IgcG90ZW50aWFsbHkgaW5mbHVlbmNlLCBBSUwgb3BlcmF0aW9ucyB3aXRoaW4gR0ZTMi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1NS45Mzg2MzQzMzNaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODA4OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpiZDJfZmNfd2FpdF9idWZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2piZDIvam91cm5hbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvam91cm5hbC5jPTg2NT1FWFBPUlRfU1lNQk9MKGpiZDJfZmNfZ2V0X2J1Zik7XFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy04NzAtICovXFxuZnMvamJkMi9qb3VybmFsLmM6ODcxOmludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcXG5mcy9qYmQyL2pvdXJuYWwuYy04NzIte1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtODk4LX1cXG5mcy9qYmQyL2pvdXJuYWwuYzo4OTk6RVhQT1JUX1NZTUJPTChqYmQyX2ZjX3dhaXRfYnVmcyk7XFxuZnMvamJkMi9qb3VybmFsLmMtOTAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1NS45ODQ0NTA2OTFaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMzI0MTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgamJkMl9mY193YWl0X2J1ZnNgIFVzYWdlKipcblxuQWxyaWdodCwgc28gYGpiZDJfZmNfd2FpdF9idWZzYCBpcyBhIGdsb2JhbCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBHbG9iYWwgdmFyaWFibGVzIGFsd2F5cyByZXF1aXJlIGV4dHJhIHNjcnV0aW55IGluIHRoaXMgY29udGV4dC4gTGV0IG1lIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBKQkQyIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBgamJkMl9mcmVlemVfamhfZGF0YWAgZnVuY3Rpb24gYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGEgdHJhbnNhY3Rpb24gbWlnaHQgc3RhbGwgd2FpdGluZyBmb3IgYnVmZmVycyB0byBmcmVlIGJlZm9yZSBpdCBjYW4gYmUgZnJvemVuLiBJIHdpbGwgY2hlY2sgdGhlIGBmcy9qYmQyL3RyYW5zYWN0aW9uLmNgIGZpbGUgYXMgdGhlIGxpa2VseSBhcmVhIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBvciwgd29yc2UsIGRlYWRsb2NrIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1OS42MDc2OTQ5ODFaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODcyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpiZDJfZnJlZXplX2poX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi90cmFuc2FjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvdHJhbnNhY3Rpb24uYz05MDg9c3RhdGljIHZvaWQgd2Fybl9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTctLyogQ2FsbCB0X2Zyb3plbiB0cmlnZ2VyIGFuZCBjb3B5IGJ1ZmZlciBkYXRhIGludG8gamgtXFx1MDAzZWJfZnJvemVuX2RhdGEuICovXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjkxODpzdGF0aWMgdm9pZCBqYmQyX2ZyZWV6ZV9qaF9kYXRhKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTkte1xcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTk0OD1kb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLFxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTExMzktXFx0XFx0ZnJvemVuX2J1ZmZlciA9IE5VTEw7XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjExNDA6XFx0XFx0amJkMl9mcmVlemVfamhfZGF0YShqaCk7XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTExNDEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1OS42NTU1NzQyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzY1ODQyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkpCRDIgQW5hbHlzaXM6IFBpbnBvaW50aW5nIHRoZSBGcmVlemUqKlxuXG5SaWdodCwgYGpiZDJfZnJlZXplX2poX2RhdGFgLiBUaGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSB0aGF0J3MgY2FsbGVkIGZyb20uLi4gT2theSwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgbG9ja2luZyBzY2hlbWUgaW4gdGhlIGpvdXJuYWxpbmcgbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIHRoZSByb290IG9mIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHdyaXRlcyBhbmQgZnJlZXppbmcgdGhlIGpvdXJuYWwuXG5cbkxldCdzIGRpdmUgaW50byBgZG9fZ2V0X3dyaXRlX2FjY2Vzc2Agd2l0aGluIGBmcy9qYmQyL3RyYW5zYWN0aW9uLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYWNxdWlyaW5nIHdyaXRlIGFjY2VzcyB0byB0aGUgam91cm5hbC4gSXQncyBjcnVjaWFsIHRvIHNlZSBpZiBpdCdzIGNvbnRyaWJ1dGluZyB0byBhbnkgbG9jayBjb250ZW50aW9uIG9yIGJsb2NraW5nIHJlbGF0ZWQgdG8gdGhlIGZyZWV6ZSBvcGVyYXRpb24uIEl0J3MgbGlrZWx5IHRoYXQgYSBjb21tb24gZnVuY3Rpb24gaXMgY2F1c2luZyBib3RoIGlzc3Vlcy4gVGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBqb3VybmFsIGZyZWV6ZSBtZWNoYW5pc20gYXJlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBwYXRoIHdpdGggc29tZSBmb2N1c2VkIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwMjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxODowMy42MzIxNjE0NzlaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTkyMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2dldF93cml0ZV9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi90cmFuc2FjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvdHJhbnNhY3Rpb24uYz05NDc9c3RhdGljIGludFxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYzo5NDg6ZG9fZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCxcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtOTQ5LVxcdFxcdFxcdGludCBmb3JjZV9jb3B5KVxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTExNjk9c3RhdGljIGJvb2wgamJkMl93cml0ZV9hY2Nlc3NfZ3JhbnRlZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyMDktXFx0ICogZG9lc24ndCBnZXQgcmVvcmRlcmVkIGFuZCBzZWUgaW5jb25zaXN0ZW50IHN0YXRlIG9mIGNvbmN1cnJlbnRcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTIxMDpcXHQgKiBkb19nZXRfd3JpdGVfYWNjZXNzKCkuXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyMTEtXFx0ICovXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM9MTIzMz1pbnQgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xMjYyLVxcdCAqIGNvbXBsZXRlcyBhbnkgb3V0c3RhbmRpbmcgSU8gYmVmb3JlIHByb2NlZWRpbmcuICovXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjEyNjM6XFx0cmMgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDApO1xcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xMjY0LVxcdGpiZDJfam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTtcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0xNDAxPWludCBqYmQyX2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTQyMC1cXHQgKi9cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTQyMTpcXHRlcnIgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDEpO1xcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xNDIyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM9MjEzNz1zdGF0aWMgdm9pZCBfX2piZDJfam91cm5hbF91bmZpbGVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKVxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTIxNzItICogV2hvIGVsc2UgaXMgYWZmZWN0ZWQgYnkgdGhpcz8gIGhtbS4uLiAgUmVhbGx5IHRoZSBvbmx5IGNvbnRlbmRlclxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYzoyMTczOiAqIGlzIGRvX2dldF93cml0ZV9hY2Nlc3MoKSAtIGl0IGNvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIGJ1ZmZlciB3aGlsZVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0yMTc0LSAqIGpvdXJuYWxfdHJ5X3RvX2ZyZWVfYnVmZmVyKCkgaXMgY2hhbmdpbmcgaXRzIHN0YXRlLiAgQnV0IHRoYXRcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0yNTM2PXZvaWQgX19qYmQyX2pvdXJuYWxfZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgsXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1Ny1cXHRcXHQgKiBpbnN0ZWFkIG9mIGJ1ZmZlcl9kaXJ0eS4gV2Ugc2hvdWxkIG5vdCBzZWUgYSBkaXJ0eSBiaXQgc2V0XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjI1NTg6XFx0XFx0ICogaGVyZSBiZWNhdXNlIHdlIGNsZWFyIGl0IGluIGRvX2dldF93cml0ZV9hY2Nlc3MgYnV0IGUuZy5cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1OS1cXHRcXHQgKiB0dW5lMmZzIGNhbiBtb2RpZnkgdGhlIHNiIGFuZCBzZXQgdGhlIGRpcnR5IGJpdCBhdCBhbnkgdGltZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxODowMy42NzY3NTc5ODdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MjEyODgwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoaXMg4oCTIGEgZGlzdGlsbGVkIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgV3JpdGUgQWNjZXNzIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3cml0ZSBhY2Nlc3MgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgamJkMiBqb3VybmFsaW5nIHN5c3RlbS4gVGhlIGNvZGUgaGFzIG1lIGEgYml0IHB1enpsZWQsIHNpbmNlIGBkb19nZXRfd3JpdGVfYWNjZXNzYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbXBsaWVzIGl0J3Mgc2NvcGVkIGxvY2FsbHksIHdoaWxlIGBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzc2Agc2VlbXMgdG8gYmUgZ2xvYmFsLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgSSB3YW50IHRvIGNsYXJpZnkgaG93IHRoaXMgd29ya3MuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0J3MgaGFwcGVuaW5nIGluc2lkZSBgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3NgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaW1wbGVtZW50YXRpb24gZmlsZSBmb3IgdHJhbnNhY3Rpb25zLCB3aGljaCBzaG91bGQgYmUgYGZzL2piZDIvdHJhbnNhY3Rpb24uY2AuIEknbGwgZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGV5IGFyZSByZWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA1OCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE4OjE0LjM5ODA0OTg5MVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4Mjk1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2piZDIvdHJhbnNhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL3RyYW5zYWN0aW9uLmM9MTE2OT1zdGF0aWMgYm9vbCBqYmQyX3dyaXRlX2FjY2Vzc19ncmFudGVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIzMi1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTIzMzppbnQgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE4OjE0LjQ0Mzg4NDY4WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzE2NjM4MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBXcml0ZSBBY2Nlc3MgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzc2Agd29ya3MgYXQgYSBnbG9iYWwgbGV2ZWwuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJhY3Rpb24uIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHBvdGVudGlhbCBmb2N1cyBwb2ludHMsIG15IGluaXRpYWwgbGlzdCBpbmNsdWRlZCBhIGxvdCBvZiBmdW5jdGlvbnMsIGJ1dCBpdCdzIGdvdHRlbiB1bnJ1bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVyY29tcGxpY2F0ZSB0aGluZ3MgaGVyZSwgc28gSSBuZWVkIHRvIHJlZmluZSB0aGF0IGxpc3QgdG8gdGhlIG1vc3QgcmVsZXZhbnQgb3BlcmF0aW9ucy5cblxuSSdtIHplcm9pbmcgaW4gb24gdGhpbmdzIHRoYXQgZGlyZWN0bHkgdG91Y2ggYnVmZmVyIHdyaXRlczogYGJoX2VuZF93cml0ZWAsIGBiaF9lbmRfYXN5bmNfd3JpdGVgLCB0aGUgZnJlZWluZyBvZiBidWZmZXJzIHdpdGggYF9fYmZvcmdldGAsIHN5bmNpbmcgZGlydHkgYnVmZmVycyB3aXRoIGBfX3N5bmNfZGlydHlfYnVmZmVyYCwgYW5kIHRoZSBqb3VybmFsIHdyaXRlcyBsaWtlIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYCBhbmQgY29tbWl0cyB3aXRoIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYC4gSSdsbCBhbHNvIHdhdGNoIGBqYmQyX2ZjX3dhaXRfYnVmc2AuIFRoZW4gdGhlcmUgYXJlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgd3JpdGVzIGxpa2UgYG9jZnMyX3dyaXRlX2Jsb2NrYCwgYGZhdF9zeW5jX2Joc2AsIGBleGZhdF91cGRhdGVfYmhzYCwgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGFuZCBgZ2ZzMl9waW5gLiBJIHRoaW5rIHRoaXMgbGlzdCBjb3ZlcnMgdGhlIGhpZ2gtbGV2ZWwgd3JpdGUgcGF0aHdheXMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlc2Ugd3JpdGVzLiBUaGUgZmlsZXN5c3RlbXMgdGhhdCBhcmUgcmVsZXZhbnQgaW5jbHVkZSBgRVhUNF9GU2AsIGBKQkQyYCwgYEdGUzJfRlNgLCBgT0NGUzJfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLlxuXG5HaXZlbiB0aGF0LCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYEpCRDJgIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4gQWgsIHJpZ2h0LCBpdCdzIHNlbGVjdGVkIHdoZW4gYEVYVDRfRlNgIG9yIGBPQ0ZTMl9GU2AgYXJlIHNlbGVjdGVkLCBzbyBpdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBpdCB0byBiZSBzYWZlLCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIG5lZWQgdG8gZXhjbHVkZSBpdCBpbiBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uXG5cbkknbSBhbHNvIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGZzL2J1ZmZlci5jYCBmb3IgYGttYXBfbG9jYWxfYmhgIGFuZCBga3VubWFwX2xvY2FsX2JoYCwgd2hpY2ggSSByZW1lbWJlciBhcmUgYWN0dWFsbHkgaW5saW5lIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhleSB3b3JrIGluIGNvbnRleHQgb2YgdGhlIHdyaXRlLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgYGZzL2piZDIvY29tbWl0LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNoZWNrc3VtIGZ1bmN0aW9ucywgbGlrZSBgamJkMl9jaGVja3N1bV9kYXRhYCBhbmQgYGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0YCB0aGF0IGFyZSByZWxldmFudCBoZXJlLiBUaGF0IHNob3VsZCBmaWxsIG91dCB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6MjYuMTYwNTI2MTgzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ2MTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJqYmQyX2NoZWNrc3VtX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9jb21taXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL2NvbW1pdC5jPTI4Mj1zdGF0aWMgaW50IGpvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhqb3VybmFsX3QgKmpvdXJuYWwsXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTMyNy1cXG5mcy9qYmQyL2NvbW1pdC5jOjMyODpzdGF0aWMgX191MzIgamJkMl9jaGVja3N1bV9kYXRhKF9fdTMyIGNyYzMyX3N1bSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG5mcy9qYmQyL2NvbW1pdC5jLTMyOS17XFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jPTM3Nj12b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvamJkMi9jb21taXQuYy03NDQtXFx0XFx0XFx0XFx0XFx0Y3JjMzJfc3VtID1cXG5mcy9qYmQyL2NvbW1pdC5jOjc0NTpcXHRcXHRcXHRcXHRcXHQgICAgamJkMl9jaGVja3N1bV9kYXRhKGNyYzMyX3N1bSwgYmgpO1xcbmZzL2piZDIvY29tbWl0LmMtNzQ2LVxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6MjYuMjA1OTkyNjQxWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzI2NzIxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBJbnRlZ3JpdHkgb2YgSm91cm5hbGluZyBEYXRhIFN0cnVjdHVyZXMqKlxuXG5SaWdodCwgYGpiZDJfY2hlY2tzdW1fZGF0YWAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgaG9sZHMgY29uc3RhbnRzIG9yIHBvdGVudGlhbGx5IHByZS1jYWxjdWxhdGVkIHZhbHVlcyByZWxhdGVkIHRvIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyB3aXRoaW4gdGhlIGpiZDIgam91cm5hbGluZyBzeXN0ZW0uIEludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGl0J3MgYSBmaXhlZCBwYXJ0IG9mIHRoZSBkYXRhIGludGVncml0eSBwcm9jZXNzLiBOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzIHRvIGhvdyB0aG9zZSBjaGVja3N1bXMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBhcHBsaWVkIGR1cmluZyB0aGUgam91cm5hbCB1cGRhdGUgcHJvY2Vzcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGZ1bmN0aW9uIGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCdzIGxpa2VseSB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIGFjdHVhbCBjaGVja3N1bSB2YWx1ZXMgb24gYSBibG9jayB0YWcuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcywgaG93IGl0IGNhbGN1bGF0ZXMgYW5kIGFwcGxpZXMgdGhlIGNoZWNrc3VtLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYXJlYXMgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBpbiBlbnN1cmluZyBqb3VybmFsIGRhdGEncyBpbnRlZ3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODE0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6MzAuMDM4NjY5Nzc1WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzNjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qYmQyL2NvbW1pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvY29tbWl0LmM9MzQwPXN0YXRpYyB2b2lkIHdyaXRlX3RhZ19ibG9jayhqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcXG4tLVxcbmZzL2piZDIvY29tbWl0LmMtMzQ3LVxcbmZzL2piZDIvY29tbWl0LmM6MzQ4OnN0YXRpYyB2b2lkIGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0KGpvdXJuYWxfdCAqaiwgam91cm5hbF9ibG9ja190YWdfdCAqdGFnLFxcbmZzL2piZDIvY29tbWl0LmMtMzQ5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBfX3UzMiBzZXF1ZW5jZSlcXG4tLVxcbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTcwNC1cXHRcXHR0YWctXFx1MDAzZXRfZmxhZ3MgPSBjcHVfdG9fYmUxNih0YWdfZmxhZyk7XFxuZnMvamJkMi9jb21taXQuYzo3MDU6XFx0XFx0amJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbCwgdGFnLCB3YnVmW2J1ZnNdLFxcbmZzL2piZDIvY29tbWl0LmMtNzA2LVxcdFxcdFxcdFxcdFxcdGNvbW1pdF90cmFuc2FjdGlvbi1cXHUwMDNldF90aWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxODozMC4wODU3MTM5MTNaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwMTQyNzQxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBLZXJuZWwgQ2hhbmdlcyBXYXJyYW50IEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gc29tZSAqdmVyeSogaW1wb3J0YW50IGFyZWFzLiBUaGUgZmFjdCB0aGF0IGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAgaXMgc3RhdGljIGlzbid0IHJlYWxseSByZWxldmFudCwgYnV0IHdoYXQgaXQgKmRvZXMqIGNoYW5nZSBpcy5cblxuSXQncyBoaXR0aW5nIGBmcy9idWZmZXIuY2AsIGEgdG9uIG9mIHRoZSBmaWxlc3lzdGVtcyDigJMgYGpiZDJgLCBgZXh0NGAsIGBnZnMyYCwgYG9jZnMyYCwgYGZhdGAsIGBleGZhdGAsIGBhZGZzYCwgYGV4dDJgLCBhbmQgYG9tZnNgIOKAkyB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gVGhpcyBpc24ndCBqdXN0IGFib3V0IG9uZSBmaWxlc3lzdGVtOyB0aGlzIGlzIGJyb2FkLiBJdCdzIHRvdWNoaW5nIGhvdyB3ZSBoYW5kbGUgYW5kIGNoZWNrIGZvciB3cml0ZSBlcnJvcnMsIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGBrbWFwX2xvY2FsX2JoYCBhbmQgYGt1bm1hcF9sb2NhbF9iaGAgd2l0aGluIGBmcy9qYmQyL2NvbW1pdC5jYCBpcyBpbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyB3ZSdyZSBtYXBwaW5nIG1lbW9yeSBmb3IgYmxvY2sgSS9PLCBhbmQgdGhhdCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gUGx1cywgaXQncyB1cGRhdGluZyBgZnMvamJkMi9qb3VybmFsLmNgIHRvIGhhbmRsZSB0aGUgYGJfZnJvemVuX2RhdGFgIHNjZW5hcmlvIHdpdGhvdXQgZ2VuZXJhdGluZyBhIGZha2UgZm9saW8sIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggYSB0aG91Z2h0IHRvIHByZXZlbnQgcmVncmVzc2lvbnMuXG5cblRoZSBmYWN0IHRoYXQgaXQncyBhbHRlcmluZyBgZnMvYnVmZmVyLmNgIHRvIGRlYWwgd2l0aCBgYmgtXHUwMDNlYl9mb2xpbyA9PSBOVUxMYCBpbiBgX19iaF9zdWJtaXRgLCBhbmQgZW1wbG95aW5nIGBiaW9fYWRkX3ZpcnRfbm9mYWlsYCBpbnN0ZWFkIG9mIGBiaW9fYWRkX2ZvbGlvX25vZmFpbGAsIGlzIGEgcmVkIGZsYWcuIFRoaXMgZGlyZWN0bHkgY2hhbmdlcyBob3cgd2UgZGVhbCB3aXRoIHRoZSBibG9jayBsYXllci5cblxuU28sIHRoaXMgbG9va3MgbGlrZSBhIGNvcmUga2VybmVsIGNoYW5nZSwgd2l0aCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBWRlMsIGJsb2NrIGxheWVyLCAqYW5kKiBtdWx0aXBsZSBmaWxlc3lzdGVtcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBJIGtub3cgcmVxdWlyZXMgcmlnb3JvdXMgZnV6emluZy4gR2l2ZW4gdGhlIGJyZWFkdGggb2YgdGhlIGltcGFjdCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5JJ2xsIGJlIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBzeW1ib2xzIGxpa2UgYGJoX2VuZF93cml0ZWAsIGBiaF9lbmRfYXN5bmNfd3JpdGVgLCBgX19iZm9yZ2V0YCwgYF9fc3luY19kaXJ0eV9idWZmZXJgLCBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAsIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCwgYGpiZDJfZmNfd2FpdF9idWZzYCwgYG9jZnMyX3dyaXRlX2Jsb2NrYCwgYGZhdF9zeW5jX2Joc2AsIGBleGZhdF91cGRhdGVfYmhzYCwgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgLCBhbmQgYGdmczJfcGluYC4gSSdsbCBuZWVkIHRvIGVuYWJsZSBjb25maWd1cmF0aW9ucyBmb3IgYWxsIHRoZSBhZmZlY3RlZCBmaWxlc3lzdGVtczogYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgRVhGQVRfRlNgLCBgQURGU19GU2AsIGBFWFQyX0ZTYCwgYW5kIGBPTUZTX0ZTYC5cblxuVGhlIGNoYW5nZXMgdG91Y2ggZnVuZGFtZW50YWwgYnVmZmVyX2hlYWQgbG9naWM6IHdyaXRlIGVycm9yIHRyYWNraW5nIChgYnVmZmVyX3dyaXRlX2lvX2Vycm9yYCB2cy4gYGJ1ZmZlcl91cHRvZGF0ZWApIGFuZCB0aGUgdXNlIG9mIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGVzcGVjaWFsbHkgaW4gdGhlIGBiX2Zyb3plbl9kYXRhYCBjb250ZXh0IG9mIGpiZDIpLiBHaXZlbiB0aGUgd2lkZXNwcmVhZCBjaGFuZ2VzIGluIGNvcmUgY29tcG9uZW50cywgSSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIGEgdG9wIHByaW9yaXR5LCBhbmQgZnV6emluZyBpcyB0aGUga2V5IHRvIGNhdGNoaW5nIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBoYXZlIGNyZXB0IGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM3MCwiT3V0cHV0VG9rZW5zIjozNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6NDQuMDk5OTkxNjQ2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzAxNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJKQkQyXCIsXG4gICAgXCJHRlMyX0ZTXCIsXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIixcbiAgICBcIkVYRkFUX0ZTXCIsXG4gICAgXCJBREZTX0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJPTUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmhfZW5kX3dyaXRlXCIsXG4gICAgXCJiaF9lbmRfYXN5bmNfd3JpdGVcIixcbiAgICBcIl9fYmZvcmdldFwiLFxuICAgIFwiX19zeW5jX2RpcnR5X2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvblwiLFxuICAgIFwiamJkMl9mY193YWl0X2J1ZnNcIixcbiAgICBcIm9jZnMyX3dyaXRlX2Jsb2NrXCIsXG4gICAgXCJmYXRfc3luY19iaHNcIixcbiAgICBcImV4ZmF0X3VwZGF0ZV9iaHNcIixcbiAgICBcIl9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFcIixcbiAgICBcImdmczJfcGluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBidWZmZXJfaGVhZCBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3cml0ZSBlcnJvciB0cmFja2luZyAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yIHZzIGJ1ZmZlcl91cHRvZGF0ZSkgYW5kIHN1cHBvcnQgZm9yIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGUuZy4sIGZvciBiX2Zyb3plbl9kYXRhIGluIGpiZDIpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoZXh0NCwgamJkMiwgZ2ZzMiwgb2NmczIsIGZhdCwgZXhmYXQsIGFkZnMsIGV4dDIsIG9tZnMpIGFuZCB0aGUgY29yZSBibG9jayBsYXllci4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzICh2aWEgdGhlIG5ldyBrbWFwX2xvY2FsX2JoL2Jpb19hZGRfdmlydF9ub2ZhaWwgcGF0aHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkpCRDJcIixcbiAgICBcIkdGUzJfRlNcIixcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiLFxuICAgIFwiRVhGQVRfRlNcIixcbiAgICBcIkFERlNfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk9NRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaF9lbmRfd3JpdGVcIixcbiAgICBcImJoX2VuZF9hc3luY193cml0ZVwiLFxuICAgIFwiX19iZm9yZ2V0XCIsXG4gICAgXCJfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uXCIsXG4gICAgXCJqYmQyX2ZjX3dhaXRfYnVmc1wiLFxuICAgIFwib2NmczJfd3JpdGVfYmxvY2tcIixcbiAgICBcImZhdF9zeW5jX2Joc1wiLFxuICAgIFwiZXhmYXRfdXBkYXRlX2Joc1wiLFxuICAgIFwiX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YVwiLFxuICAgIFwiZ2ZzMl9waW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 19:43:01 +0000 UTC FinishedAt: 2026-08-06 20:18:45 +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": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "JBD2", "GFS2_FS", "OCFS2_FS", "MSDOS_FS", "VFAT_FS", "EXFAT_FS", "ADFS_FS", "EXT2_FS", "OMFS_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": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "JBD2", "GFS2_FS", "OCFS2_FS", "MSDOS_FS", "VFAT_FS", "EXFAT_FS", "ADFS_FS", "EXT2_FS", "OMFS_FS" ], "series_id": "54928d99-516e-4894-882b-0edc4daea042" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bh_end_write", "bh_end_async_write", "__bforget", "__sync_dirty_buffer", "jbd2_journal_write_metadata_buffer", "jbd2_journal_commit_transaction", "jbd2_fc_wait_bufs", "ocfs2_write_block", "fat_sync_bhs", "exfat_update_bhs", "__ext4_handle_dirty_metadata", "gfs2_pin" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0pCRDImIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDssCiAgICAmIzM0O0FERlNfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtPTUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmhfZW5kX3dyaXRlJiMzNDssCiAgICAmIzM0O2JoX2VuZF9hc3luY193cml0ZSYjMzQ7LAogICAgJiMzNDtfX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OywKICAgICYjMzQ7amJkMl9mY193YWl0X2J1ZnMmIzM0OywKICAgICYjMzQ7b2NmczJfd3JpdGVfYmxvY2smIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfYmhzJiMzNDssCiAgICAmIzM0O2V4ZmF0X3VwZGF0ZV9iaHMmIzM0OywKICAgICYjMzQ7X19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtnZnMyX3BpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNjg4YzY4MGM1OWZjN2U5ZmJjNjQzMmE1ZWNmNzY0MWQwMThlYTAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMDowMTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuY1xuaW5kZXggMTFhZmE5ZTE1N2FhNy4uYjhjYzZhNjk3YTA1ZCAxMDA2NDRcbi0tLSBhL2ZzL2FkZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FkZnMvZGlyLmNcbkBAIC0xOTEsNyAmIzQzOzE5MSw3IEBAIHN0YXRpYyBpbnQgYWRmc19kaXJfc3luYyhzdHJ1Y3QgYWRmc19kaXIgKmRpcilcbiBcdGZvciAoaSA9IGRpci1cdTAwM2Vucl9idWZmZXJzIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gZGlyLVx1MDAzZWJoc1tpXTtcbiBcdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKVxuJiM0MztcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCBiZThiNTdhNjM1Y2Q4Li42OGVhMGVmODQ3MGVlIDEwMDY0NFxuLS0tIGEvZnMvYnVmZmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J1ZmZlci5jXG5AQCAtMjAzLDExICYjNDM7MjAzLDEwIEBAIHZvaWQgYmhfZW5kX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcbiBcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdGlmIChzdWNjZXNzKSB7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJ1ZmZlcl9pb19lcnJvcihiaCwgXCYjMzQ7LCBsb3N0IHN5bmMgcGFnZSB3cml0ZVwmIzM0Oyk7XG4gXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdH1cbiBcdHVubG9ja19idWZmZXIoYmgpO1xuIH1cbkBAIC00MzcsMTEgJiM0Mzs0MzYsMTAgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxuIFxuIFx0Zm9saW8gPSBiaC1cdTAwM2ViX2ZvbGlvO1xuIFx0aWYgKHN1Y2Nlc3MpIHtcbi1cdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4mIzQzO1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YnVmZmVyX2lvX2Vycm9yKGJoLCBcJiMzNDssIGxvc3QgYXN5bmMgcGFnZSB3cml0ZVwmIzM0Oyk7XG4gXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdH1cbiBcbiBcdGZpcnN0ID0gZm9saW9fYnVmZmVycyhmb2xpbyk7XG5AQCAtNjE4LDcgJiM0Mzs2MTYsNyBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4gXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1iLVx1MDAzZWxvY2spO1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4tXHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcbiYjNDM7XHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHRcdGJyZWxzZShiaCk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZtbWItXHUwMDNlbG9jayk7XG5AQCAtMTA5MSw2ICYjNDM7MTA4OSw3IEBAIEVYUE9SVF9TWU1CT0woX19icmVsc2UpO1xuIHZvaWQgX19iZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4ge1xuIFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbiYjNDM7XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0cmVtb3ZlX2Fzc29jX3F1ZXVlKGJoKTtcbiBcdF9fYnJlbHNlKGJoKTtcbiB9XG5AQCAtMTA5OSwxMiAmIzQzOzEwOTgsMTYgQEAgRVhQT1JUX1NZTUJPTChfX2Jmb3JnZXQpO1xuIHN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhiaC1cdTAwM2ViX2ZvbGlvKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZXh0NCBqb3VybmFsIChqYmQyKSBjYW4gc3VibWl0IGEgYnVmZmVyX2hlYWQgaXQgZGlyZWN0bHkgY3JlYXRlZFxuLVx0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2VzbiYjMzk7dCBjYXJlIGFib3V0IHRoZXNlLlxuJiM0MztcdCAqIGZvciBtZW1vcnkgdGhhdCBpcyBub3QgaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYWxsLiAgZnNjcnlwdCBkb2VzbiYjMzk7dFxuJiM0MztcdCAqIGNhcmUgYWJvdXQgdGhlc2UuXG4gXHQgKi9cbiYjNDM7XHRpZiAoIWJoLVx1MDAzZWJfZm9saW8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWFwcGluZyA9IGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZztcbiBcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuO1xuIFx0ZnNjcnlwdF9zZXRfYmlvX2NyeXB0X2N0eChiaW8sIG1hcHBpbmctXHUwMDNlaG9zdCxcbkBAIC0xMTE1LDcgJiM0MzsxMTE4LDYgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcbiBcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIFx0XHRiaW9fZW5kX2lvX3QgZW5kX2JpbylcbiB7XG4tXHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcdTAwMjYgUkVRX09QX01BU0s7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4gXG4gXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcbkBAIC0xMTIzLDExICYjNDM7MTEyNSw3IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXHRCVUdfT04oYnVmZmVyX2RlbGF5KGJoKSk7XG4gXHRCVUdfT04oYnVmZmVyX3Vud3JpdHRlbihiaCkpO1xuIFxuLVx0Lypcbi1cdCAqIE9ubHkgY2xlYXIgb3V0IGEgd3JpdGUgZXJyb3Igd2hlbiByZXdyaXRpbmdcbi1cdCAqL1xuLVx0aWYgKHRlc3Rfc2V0X2J1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAob3AgPT0gUkVRX09QX1dSSVRFKSlcbi1cdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiYjNDM7XHRzZXRfYnVmZmVyX3JlcShiaCk7XG4gXG4gXHRpZiAoYnVmZmVyX21ldGEoYmgpKVxuIFx0XHRvcGYgfD0gUkVRX01FVEE7XG5AQCAtMTE0Miw3ICYjNDM7MTE0MCwxMSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gYmgtXHUwMDNlYl9ibG9ja25yICogKGJoLVx1MDAzZWJfc2l6ZSBcdTAwM2VcdTAwM2UgOSk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdyaXRlX2hpbnQ7XG4gXG4tXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSwgYmhfb2Zmc2V0KGJoKSk7XG4mIzQzO1x0aWYgKGJoLVx1MDAzZWJfZm9saW8pXG4mIzQzO1x0XHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIGJoX29mZnNldChiaCkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJpb19hZGRfdmlydF9ub2ZhaWwoYmlvLCBiaC1cdTAwM2ViX2RhdGEsIGJoLVx1MDAzZWJfc2l6ZSk7XG4gXG4gXHRiaW8tXHUwMDNlYmlfZW5kX2lvID0gZW5kX2JpbztcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gYmg7XG5AQCAtMTE1Miw3ICYjNDM7MTE1NCw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXG4gXHRpZiAod2JjKSB7XG4gXHRcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XG4tXHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbiYjNDM7XHRcdFx0d2JjX2FjY291bnRfY2dyb3VwX293bmVyKHdiYywgYmgtXHUwMDNlYl9mb2xpbywgYmgtXHUwMDNlYl9zaXplKTtcbiBcdH1cbiBcbiBcdGJsa19jcnlwdG9fc3VibWl0X2JpbyhiaW8pO1xuQEAgLTE1MDgsNyAmIzQzOzE1MTEsNyBAQCBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7XG4gLyogQml0cyB0aGF0IGFyZSBjbGVhcmVkIGR1cmluZyBhbiBpbnZhbGlkYXRlICovXG4gI2RlZmluZSBCVUZGRVJfRkxBR1NfRElTQ0FSRCBcXFxuIFx0KDEgXHUwMDNjXHUwMDNjIEJIX01hcHBlZCB8IDEgXHUwMDNjXHUwMDNjIEJIX05ldyB8IDEgXHUwMDNjXHUwMDNjIEJIX1JlcSB8IFxcXG4tXHQgMSBcdTAwM2NcdTAwM2MgQkhfRGVsYXkgfCAxIFx1MDAzY1x1MDAzYyBCSF9VbndyaXR0ZW4pXG4mIzQzO1x0IDEgXHUwMDNjXHUwMDNjIEJIX0RlbGF5IHwgMSBcdTAwM2NcdTAwM2MgQkhfVW53cml0dGVuIHwgMSBcdTAwM2NcdTAwM2MgQkhfV3JpdGVfRUlPKVxuIFxuIHN0YXRpYyB2b2lkIGRpc2NhcmRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKVxuIHtcbkBAIC0yNzMzLDcgJiM0MzsyNzM2LDcgQEAgaW50IF9fc3luY19kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzKVxuIFxuIFx0XHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4tXHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcbiYjNDM7XHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0fSBlbHNlIHtcbiBcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jXG5pbmRleCA2ZjExYTk2YTRmZmE4Li5kZmQwYmJmMzFjOTQwIDEwMDY0NFxuLS0tIGEvZnMvZXhmYXQvbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9taXNjLmNcbkBAIC0xODcsNyAmIzQzOzE4Nyw3IEBAIGludCBleGZhdF91cGRhdGVfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocywgaW50IHN5bmMpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9iaHMgXHUwMDI2XHUwMDI2IHN5bmM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoc1tpXSk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXG4mIzQzO1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jXG5pbmRleCBiZTYzZjg5NDAyYTM4Li4zOTAwNWVjMjNmZTVkIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3hhdHRyLmNcbkBAIC03NjksNyAmIzQzOzc2OSw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbiBcdFx0aWYgKElTX1NZTkMoaW5vZGUpKSB7XG4gXHRcdFx0c3luY19kaXJ0eV9idWZmZXIobmV3X2JoKTtcbiBcdFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdFx0aWYgKGJ1ZmZlcl9yZXEobmV3X2JoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShuZXdfYmgpKVxuJiM0MztcdFx0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKG5ld19iaCkpXG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggMDJiMDY2Mjk5MTY0OS4uZjMzOGQ2ZTNjMjlmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbkBAIC00MTMsNyAmIzQzOzQxMyw3IEBAIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdFx0fVxuIFx0XHRpZiAoaW5vZGUgXHUwMDI2XHUwMDI2IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4gXHRcdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0XHRcdGV4dDRfZXJyb3JfaW5vZGVfZXJyKGlub2RlLCB3aGVyZSwgbGluZSxcbiBcdFx0XHRcdFx0XHQgICAgIGJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuIFx0XHRcdFx0XHRcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGl0YWJsZSBibG9ja1wmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5pbmRleCA4ZTIyNTk3OTk2MTRlLi45NTk5ODgyN2ZmMDExIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbkBAIC0yMDMsMTcgJiM0MzsyMDMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfc2V0X3NuYXBfZXJyKGludCAqc25hcF9lcnIsIGludCBlcnIpXG4gc3RhdGljIHZvaWQgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRib29sIHVwdG9kYXRlID0gYmlvX2VuZGlvX2JoKGJpbywgXHUwMDI2YmgpO1xuJiM0MztcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdEJVRkZFUl9UUkFDRShiaCwgXCYjMzQ7XCYjMzQ7KTtcbi1cdGlmICh1cHRvZGF0ZSkge1xuLVx0XHRleHQ0X2RlYnVnKFwmIzM0OyVzOiBCbG9jayAlbGxkIHVwLXRvLWRhdGVcJiMzNDssXG4mIzQzO1x0aWYgKHN1Y2Nlc3MpIHtcbiYjNDM7XHRcdGV4dDRfZGVidWcoXCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdHRlblwmIzM0OyxcbiBcdFx0XHQgICBfX2Z1bmNfXywgYmgtXHUwMDNlYl9ibG9ja25yKTtcbi1cdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4mIzQzO1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXh0NF9kZWJ1ZyhcJiMzNDslczogQmxvY2sgJWxsZCBub3QgdXAtdG8tZGF0ZVwmIzM0OyxcbiYjNDM7XHRcdGV4dDRfZGVidWcoXCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdGUgZmFpbGVkXCYjMzQ7LFxuIFx0XHRcdCAgIF9fZnVuY19fLCBiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuLVx0XHRjbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fVxuIFxuIFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tbXAuYyBiL2ZzL2V4dDQvbW1wLmNcbmluZGV4IDdjZTM2MTQ4NGIzODIuLjRiMThkZGVmNDY4ZDcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L21tcC5jXG5AQCAtNDksNyAmIzQzOzQ5LDcgQEAgc3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IFJFUV9TWU5DIHwgUkVRX01FVEEgfCBSRVFfUFJJTyxcbiBcdFx0XHRiaF9lbmRfd3JpdGUpO1xuIFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLVx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXG5pbmRleCBiZTE4ZjZiNTgxOWJhLi40YTRjZDAxMTFlNDdhIDEwMDY0NFxuLS0tIGEvZnMvZmF0L21pc2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L21pc2MuY1xuQEAgLTM1Niw3ICYjNDM7MzU2LDcgQEAgaW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9iaHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoc1tpXSk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXG4mIzQzO1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmNcbmluZGV4IDc4YmJhOGNjMTBiOGYuLmUzZTBkY2IxZjU2NzMgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2xvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2xvZy5jXG5AQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCBfX2FjcXVpcmVzKFx1MDAyNnNkcC1cdTAwM2VzZF9haWxfbG9jaylcbiBcdFx0Z2ZzMl9hc3NlcnQoc2RwLCBiZC1cdTAwM2ViZF90ciA9PSB0cik7XG4gXG4gXHRcdGlmICghYnVmZmVyX2J1c3koYmgpKSB7XG4tXHRcdFx0aWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2YmQtXHUwMDNlYmRfYWlsX3N0X2xpc3QsXG4gXHRcdFx0XHRcdCAgXHUwMDI2dHItXHUwMDNldHJfYWlsMl9saXN0KTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXG4gXHRcdFx0YWN0aXZlX2NvdW50JiM0MzsmIzQzOztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFjbXB4Y2hnKFx1MDAyNnNkcC1cdTAwM2VzZF9sb2dfZXJyb3IsIDAsIC1FSU8pKVxuIFx0XHRcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmMgYi9mcy9nZnMyL2xvcHMuY1xuaW5kZXggNmRhYmU3M2FkNzkwZC4uNzQ0MGU1YjcyZjhhZCAxMDA2NDRcbi0tLSBhL2ZzL2dmczIvbG9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2xvcHMuY1xuQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQgZ2ZzMl9waW4oc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xuIFx0aWYgKHRlc3Rfc2V0X2J1ZmZlcl9waW5uZWQoYmgpKVxuIFx0XHRnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApO1xuLVx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKVxuJiM0MztcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSB8fCBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRnZnMyX2lvX2Vycm9yX2JoKHNkcCwgYmgpO1xuIFx0YmQgPSBiaC1cdTAwM2ViX3ByaXZhdGU7XG4gXHQvKiBJZiB0aGlzIGJ1ZmZlciBpcyBpbiB0aGUgQUlMIGFuZCBpdCBoYXMgYWxyZWFkeSBiZWVuIHdyaXR0ZW5cbkBAIC0xNzksNiAmIzQzOzE3OSw4IEBAIHN0YXRpYyB2b2lkIGdmczJfZW5kX2xvZ193cml0ZV9iaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGRvIHtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdG5leHQgPSBiaC1cdTAwM2ViX3RoaXNfcGFnZTtcbiBcdFx0c2l6ZSAtPSBiaC1cdTAwM2ViX3NpemU7XG5kaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmNcbmluZGV4IDMwMjljYjZmNmQ2NDAuLmViZjZiYTU4ZmY0ZDAgMTAwNjQ0XG4tLS0gYS9mcy9qYmQyL2NvbW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9qYmQyL2NvbW1pdC5jXG5AQCAtMzIsMTQgJiM0MzszMiwxNCBAQFxuIHN0YXRpYyB2b2lkIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiYjNDM7XHRib29sIHN1Y2Nlc3MgPSBiaW9fZW5kaW9fYmgoYmlvLCBcdTAwMjZiaCk7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9yaWdfYmggPSBiaC1cdTAwM2ViX3ByaXZhdGU7XG4gXG4gXHRCVUZGRVJfVFJBQ0UoYmgsIFwmIzM0O1wmIzM0Oyk7XG4tXHRpZiAodXB0b2RhdGUpXG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdGlmIChzdWNjZXNzKVxuJiM0MztcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdGVsc2Vcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdGlmIChvcmlnX2JoKSB7XG4gXHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChCSF9TaGFkb3csIFx1MDAyNm9yaWdfYmgtXHUwMDNlYl9zdGF0ZSk7XG4gXHR9XG5AQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdGF0aWMgaW50IGpvdXJuYWxfd2FpdF9vbl9jb21taXRfcmVjb3JkKGpvdXJuYWxfdCAqam91cm5hbCxcbiBcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXG4tXHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxuJiM0MztcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcbiBcdFx0cmV0ID0gLUVJTztcbiBcdHB1dF9iaChiaCk7ICAgICAgICAgICAgLyogT25lIGZvciBnZXRibGsoKSAqL1xuIFxuQEAgLTMzMCw5ICYjNDM7MzMwLDkgQEAgc3RhdGljIF9fdTMyIGpiZDJfY2hlY2tzdW1fZGF0YShfX3UzMiBjcmMzMl9zdW0sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRjaGFyICphZGRyO1xuIFx0X191MzIgY2hlY2tzdW07XG4gXG4tXHRhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbiYjNDM7XHRhZGRyID0ga21hcF9sb2NhbF9iaChiaCk7XG4gXHRjaGVja3N1bSA9IGNyYzMyX2JlKGNyYzMyX3N1bSwgYWRkciwgYmgtXHUwMDNlYl9zaXplKTtcbi1cdGt1bm1hcF9sb2NhbChhZGRyKTtcbiYjNDM7XHRrdW5tYXBfbG9jYWxfYmgoYmgsIGFkZHIpO1xuIFxuIFx0cmV0dXJuIGNoZWNrc3VtO1xuIH1cbkBAIC0zNTcsMTAgJiM0MzszNTcsMTAgQEAgc3RhdGljIHZvaWQgamJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4gXHRcdHJldHVybjtcbiBcbiBcdHNlcSA9IGNwdV90b19iZTMyKHNlcXVlbmNlKTtcbi1cdGFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVx1MDAzZWJfZm9saW8sIGJoX29mZnNldChiaCkpO1xuJiM0MztcdGFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTtcbiBcdGNzdW0zMiA9IGpiZDJfY2hrc3VtKGotXHUwMDNlal9jc3VtX3NlZWQsIChfX3U4ICopXHUwMDI2c2VxLCBzaXplb2Yoc2VxKSk7XG4gXHRjc3VtMzIgPSBqYmQyX2Noa3N1bShjc3VtMzIsIGFkZHIsIGJoLVx1MDAzZWJfc2l6ZSk7XG4tXHRrdW5tYXBfbG9jYWwoYWRkcik7XG4mIzQzO1x0a3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTtcbiBcbiBcdGlmIChqYmQyX2hhc19mZWF0dXJlX2NzdW0zKGopKVxuIFx0XHR0YWczLVx1MDAzZXRfY2hlY2tzdW0gPSBjcHVfdG9fYmUzMihjc3VtMzIpO1xuQEAgLTgzNCw3ICYjNDM7ODM0LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcbiYjNDM7XHRcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcbiBcdFx0XHRlcnIgPSAtRUlPO1xuIFx0XHRqYmQyX3VuZmlsZV9sb2dfYmgoYmgpO1xuIFx0XHRzdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZCYjNDM7JiM0Mzs7XG5AQCAtODc3LDcgJiM0Mzs4NzcsNyBAQCB2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxuIFx0XHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxuJiM0MztcdFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXG4gXHRcdEJVRkZFUl9UUkFDRShiaCwgXCYjMzQ7cGg1OiBjb250cm9sIGJ1ZmZlciB3cml0ZW91dCBkb25lOiB1bmZpbGVcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmNcbmluZGV4IDA5ZWZhMzM3NjQ5ZTIuLjcyZThjY2JmN2RlNGUgMTAwNjQ0XG4tLS0gYS9mcy9qYmQyL2pvdXJuYWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvamJkMi9qb3VybmFsLmNcbkBAIC0zMjcsOCAmIzQzOzMyNyw2IEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuIHtcbiBcdGludCBkb19lc2NhcGUgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmg7XG4tXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbztcbi1cdHVuc2lnbmVkIGludCBuZXdfb2Zmc2V0O1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9pbiA9IGpoMmJoKGpoX2luKTtcbiBcdGpvdXJuYWxfdCAqam91cm5hbCA9IHRyYW5zYWN0aW9uLVx1MDAzZXRfam91cm5hbDtcbiBcbkBAIC0zNDgsMjQgJiM0MzszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHQvKiBrZWVwIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucyBzYW5lICovXG4gXHRhdG9taWNfc2V0KFx1MDAyNm5ld19iaC1cdTAwM2ViX2NvdW50LCAxKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGVcbiYjNDM7XHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcbiYjNDM7XHQgKiBhbGxvY2F0aW9uIGFuZCBiX2RhdGEgcG9pbnRzIHN0cmFpZ2h0IGF0IHRoZSBjb3B5LiAgUG9pbnRpbmcgaXQgYXRcbiYjNDM7XHQgKiB0aGUgc2xhYiBmb2xpbyBpbnN0ZWFkIHdvdWxkIGhhbmQgaXRzIG92ZXJsb2FkZWQgLVx1MDAzZW1hcHBpbmcgdG9cbiYjNDM7XHQgKiBhbnl0aGluZyB0aGF0IGdvZXMgbG9va2luZyBmb3IgYW4gYWRkcmVzc19zcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XG4gXHRzcGluX2xvY2soXHUwMDI2amhfaW4tXHUwMDNlYl9zdGF0ZV9sb2NrKTtcbiBcdC8qXG4gXHQgKiBJZiBhIG5ldyB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBkb25lIGEgYnVmZmVyIGNvcHktb3V0LCB0aGVuXG4gXHQgKiB3ZSB1c2UgdGhhdCB2ZXJzaW9uIG9mIHRoZSBkYXRhIGZvciB0aGUgY29tbWl0LlxuIFx0ICovXG4gXHRpZiAoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSkge1xuLVx0XHRuZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuLVx0XHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gXHRcdGRvX2VzY2FwZSA9IGpiZDJfZGF0YV9uZWVkc19lc2NhcGluZyhqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbiBcdFx0aWYgKGRvX2VzY2FwZSlcbiBcdFx0XHRqYmQyX2RhdGFfZG9fZXNjYXBlKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuJiM0MztcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJoX2luLVx1MDAzZWJfZm9saW87XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBiaF9pbi1cdTAwM2ViX2RhdGEpO1xuIFx0XHRjaGFyICp0bXA7XG4gXHRcdGNoYXIgKm1hcHBlZF9kYXRhO1xuIFxuLVx0XHRuZXdfZm9saW8gPSBiaF9pbi1cdTAwM2ViX2ZvbGlvO1xuLVx0XHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgYmhfaW4tXHUwMDNlYl9kYXRhKTtcbi1cdFx0bWFwcGVkX2RhdGEgPSBrbWFwX2xvY2FsX2ZvbGlvKG5ld19mb2xpbywgbmV3X29mZnNldCk7XG4mIzQzO1x0XHRtYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7XG4gXHRcdC8qXG4gXHRcdCAqIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBpZiBkYXRhIGFscmVhZHkgd2FzbiYjMzk7dCBmcm96ZW4uIERvXG4gXHRcdCAqIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciBlc2NhcGluZywgYXMgdGhlIHRyaWdnZXIgbWF5IG1vZGlmeVxuQEAgLTM3OSw4ICYjNDM7Mzg0LDEwIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuIFx0XHQvKlxuIFx0XHQgKiBEbyB3ZSBuZWVkIHRvIGRvIGEgZGF0YSBjb3B5P1xuIFx0XHQgKi9cbi1cdFx0aWYgKCFkb19lc2NhcGUpXG4mIzQzO1x0XHRpZiAoIWRvX2VzY2FwZSkge1xuJiM0MztcdFx0XHRmb2xpb19zZXRfYmgobmV3X2JoLCBmb2xpbywgb2Zmc2V0KTtcbiBcdFx0XHRnb3RvIGVzY2FwZV9kb25lO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZqaF9pbi1cdTAwM2ViX3N0YXRlX2xvY2spO1xuIFx0XHR0bXAgPSBrbWFsbG9jKGJoX2luLVx1MDAzZWJfc2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xuQEAgLTM5MSw3ICYjNDM7Mzk4LDcgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHRcdH1cbiBcbiBcdFx0amhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSA9IHRtcDtcbi1cdFx0bWVtY3B5X2Zyb21fZm9saW8odG1wLCBuZXdfZm9saW8sIG5ld19vZmZzZXQsIGJoX2luLVx1MDAzZWJfc2l6ZSk7XG4mIzQzO1x0XHRtZW1jcHlfZnJvbV9mb2xpbyh0bXAsIGZvbGlvLCBvZmZzZXQsIGJoX2luLVx1MDAzZWJfc2l6ZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSwgYXMgd2UmIzM5O3JlIHVzaW5nIGZyb3plblxuIFx0XHQgKiBkYXRhIGZvciB0aGUgZXNjYXBpbmcsIGJ1dCBpdCBrZWVwcyBjb25zaXN0ZW5jeSB3aXRoXG5AQCAtNDAwLDEzICYjNDM7NDA3LDExIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxuIFx0XHRqaF9pbi1cdTAwM2ViX2Zyb3plbl90cmlnZ2VycyA9IGpoX2luLVx1MDAzZWJfdHJpZ2dlcnM7XG4gXG4gY29weV9kb25lOlxuLVx0XHRuZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuLVx0XHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gXHRcdGpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4mIzQzO1x0XHRuZXdfYmgtXHUwMDNlYl9kYXRhID0gamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YTtcbiBcdH1cbiBcbiBlc2NhcGVfZG9uZTpcbi1cdGZvbGlvX3NldF9iaChuZXdfYmgsIG5ld19mb2xpbywgbmV3X29mZnNldCk7XG4gXHRuZXdfYmgtXHUwMDNlYl9zaXplID0gYmhfaW4tXHUwMDNlYl9zaXplO1xuIFx0bmV3X2JoLVx1MDAzZWJfYmRldiA9IGpvdXJuYWwtXHUwMDNlal9kZXY7XG4gXHRuZXdfYmgtXHUwMDNlYl9ibG9ja25yID0gYmxvY2tucjtcbkBAIC04ODEsNyAmIzQzOzg4Niw3IEBAIGludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcbiBcdFx0ICogVXBkYXRlIGpfZmNfb2ZmIHNvIGpiZDJfZmNfcmVsZWFzZV9idWZzIGNhbiByZWxlYXNlIHJlbWFpblxuIFx0XHQgKiBidWZmZXIgaGVhZC5cbiBcdFx0ICovXG4tXHRcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSkge1xuIFx0XHRcdGpvdXJuYWwtXHUwMDNlal9mY19vZmYgPSBpICYjNDM7IDE7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcbmluZGV4IDVjYzdkMDk3YjJhYzguLjg1ZDg0ZDkwOWY3ODUgMTAwNjQ0XG4tLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uY1xuQEAgLTkyMCw3ICYjNDM7OTIwLDcgQEAgc3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaClcbiBcdGNoYXIgKnNvdXJjZTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBqaDJiaChqaCk7XG4gXG4tXHRKX0VYUEVDVF9KSChqaCwgYnVmZmVyX3VwdG9kYXRlKGJoKSwgXCYjMzQ7UG9zc2libGUgSU8gZmFpbHVyZS5cXG5cJiMzNDspO1xuJiM0MztcdEpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCBcJiMzNDtCdWZmZXIgbm90IHVwdG9kYXRlIVxcblwmIzM0Oyk7XG4gXHRzb3VyY2UgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVx1MDAzZWJfZm9saW8sIGJoX29mZnNldChiaCkpO1xuIFx0LyogRmlyZSBkYXRhIGZyb3plbiB0cmlnZ2VyIGp1c3QgYmVmb3JlIHdlIGNvcHkgdGhlIGRhdGEgKi9cbiBcdGpiZDJfYnVmZmVyX2Zyb3plbl90cmlnZ2VyKGpoLCBzb3VyY2UsIGpoLVx1MDAzZWJfdHJpZ2dlcnMpO1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jXG5pbmRleCA3YmZlMzc3YWYyZGZjLi43MzNjZWRhNzljYTFmIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY1xuQEAgLTY2LDEyICYjNDM7NjYsMTQgQEAgaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFxuIFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFxuLVx0aWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRpZiAoIWJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0b2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShjaSwgYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0LyogV2UgZG9uJiMzOTt0IG5lZWQgdG8gcmVtb3ZlIHRoZSBjbHVzdGVyZWQgdXB0b2RhdGVcbi1cdFx0ICogaW5mb3JtYXRpb24gZm9yIHRoaXMgYmggYXMgaXQmIzM5O3Mgbm90IG1hcmtlZCBsb2NhbGx5XG4tXHRcdCAqIHVwdG9kYXRlLiAqL1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBidWZmZXIgc3RpbGwgaG9sZHMgd2hhdCB3ZSB0cmllZCB0byB3cml0ZSwgYnV0IGl0IGRpZFxuJiM0MztcdFx0ICogbm90IHJlYWNoIHRoZSBkaXNrLCBzbyBkb24mIzM5O3QgYWR2ZXJ0aXNlIGl0IHRvIHRoZSBjbHVzdGVyXG4mIzQzO1x0XHQgKiBhcyB1cCB0byBkYXRlLlxuJiM0MztcdFx0ICovXG4gXHRcdHJldCA9IC1FSU87XG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcdH1cbkBAIC00NDYsNyAmIzQzOzQ0OCw3IEBAIGludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4gXG4gXHR3YWl0X29uX2J1ZmZlcihiaCk7XG4gXG4tXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbiYjNDM7XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuIFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jXG5pbmRleCBkOGFmYmMxYTc2YmI4Li5lYTY4MDJkODk0YzJiIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvam91cm5hbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9qb3VybmFsLmNcbkBAIC02NzYsMTkgJiM0Mzs2NzYsMjAgQEAgc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdG1sb2coTUxfRVJST1IsIFwmIzM0O2dpdmluZyBtZSBhIGJ1ZmZlciB0aGF0JiMzOTtzIG5vdCB1cHRvZGF0ZSFcXG5cJiMzNDspO1xuIFx0XHRtbG9nKE1MX0VSUk9SLCBcJiMzNDtiX2Jsb2NrbnI9JWxsdSwgYl9zdGF0ZT0weCVseFxcblwmIzM0OyxcbiBcdFx0ICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLVx1MDAzZWJfYmxvY2tuciwgYmgtXHUwMDNlYl9zdGF0ZSk7XG4tXG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXG4mIzQzO1x0ICogdG8gY2hlY2twb2ludCwgc28gYWxsIHRoZSBiaHMgYXJlIG1hcmtlZCBhcyBCSF9Xcml0ZV9FSU8uXG4mIzQzO1x0ICogRm9yIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHRoZSBiaCBpcyBqdXN0IGFtb25nIHRob3NlIGVycm9yXG4mIzQzO1x0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXJcbiYjNDM7XHQgKiBpdHMgQkhfV3JpdGVfRUlPIGFuZCByZXVzZSBkaXJlY3RseSwgc2luY2Ugb3RoZXIgYmhzIGFyZVxuJiM0MztcdCAqIG5vdCB3cml0dGVuIHRvIGRpc2sgeWV0IGFuZCB0aGF0IHdpbGwgY2F1c2UgbWV0YWRhdGFcbiYjNDM7XHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxuJiM0MztcdCAqIGZ1cnRoZXIgZGFtYWdlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdGxvY2tfYnVmZmVyKGJoKTtcbi1cdFx0Lypcbi1cdFx0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXG4tXHRcdCAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLlxuLVx0XHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3Jcbi1cdFx0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXJcbi1cdFx0ICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmVcbi1cdFx0ICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YVxuLVx0XHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxuLVx0XHQgKiBmdXJ0aGVyIGRhbWFnZS5cbi1cdFx0ICovXG4tXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuJiM0MztcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0XHRyZXR1cm4gb2NmczJfZXJyb3Iob3NiLVx1MDAzZXNiLCBcJiMzNDtBIHByZXZpb3VzIGF0dGVtcHQgdG8gXCYjMzQ7XG4gXHRcdFx0XHRcdFwmIzM0O3dyaXRlIHRoaXMgYnVmZmVyIGhlYWQgZmFpbGVkXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmNcbmluZGV4IDFkOTE1ZWY3MjExOWYuLmJjMzcwMjlhNGFmYjEgMTAwNjQ0XG4tLS0gYS9mcy9vbWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29tZnMvaW5vZGUuY1xuQEAgLTE0NSw3ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGludCBfX29tZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRpZiAod2FpdCkge1xuIFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4mIzQzO1x0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcbiBcdFx0XHRzeW5jX2ZhaWxlZCA9IDE7XG4gXHR9XG4gXG5AQCAtMTU5LDcgJiM0MzsxNTksNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbiBcdFx0bWFya19idWZmZXJfZGlydHkoYmgyKTtcbiBcdFx0aWYgKHdhaXQpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaDIpO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKGJoMikgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgyKSlcbiYjNDM7XHRcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaDIpKVxuIFx0XHRcdFx0c3luY19mYWlsZWQgPSAxO1xuIFx0XHR9XG4gXHRcdGJyZWxzZShiaDIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggZmQyYzcxMTVjMDU0Mi4uMjBiOGZjYTFhYmZhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5AQCAtNTksMTAgJiM0Mzs1OSw3IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlO1xuIHN0cnVjdCBidWZmZXJfaGVhZCB7XG4gXHR1bnNpZ25lZCBsb25nIGJfc3RhdGU7XHRcdC8qIGJ1ZmZlciBzdGF0ZSBiaXRtYXAgKHNlZSBhYm92ZSkgKi9cbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYl90aGlzX3BhZ2U7LyogY2lyY3VsYXIgbGlzdCBvZiBwYWdlJiMzOTtzIGJ1ZmZlcnMgKi9cbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IHBhZ2UgKmJfcGFnZTtcdC8qIHRoZSBwYWdlIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXG4tXHRcdHN0cnVjdCBmb2xpbyAqYl9mb2xpbztcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xuLVx0fTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmJfZm9saW87XHRcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xuIFxuIFx0c2VjdG9yX3QgYl9ibG9ja25yO1x0XHQvKiBzdGFydCBibG9jayBudW1iZXIgKi9cbiBcdHNpemVfdCBiX3NpemU7XHRcdFx0Lyogc2l6ZSBvZiBtYXBwaW5nICovXG5AQCAtMTcyLDcgJiM0MzsxNjksMzYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYnVmZmVyX3VwdG9kYXRlKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJoX29mZnNldChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZykoYmgpLVx1MDAzZWJfZGF0YSBcdTAwMjYgKHBhZ2Vfc2l6ZShiaC1cdTAwM2ViX3BhZ2UpIC0gMSk7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXHUwMDNlYl9kYXRhIFx1MDAyNiAoZm9saW9fc2l6ZShiaC1cdTAwM2ViX2ZvbGlvKSAtIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga21hcF9sb2NhbF9iaCAtIE1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cbiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBCdWZmZXJzIHVzdWFsbHkgbGl2ZSBpbiB0aGUgcGFnZSBjYWNoZSwgYnV0IGEgZmV3IGFyZSBidWlsdCBvdmVyIG1lbW9yeVxuJiM0MzsgKiB3aGljaCBpcyBub3QuICBUaG9zZSBjYXJyeSBubyBmb2xpbyBhbmQgYl9kYXRhIGlzIGFscmVhZHkgYSBrZXJuZWwgYWRkcmVzc1xuJiM0MzsgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoXG4mIzQzOyAqIGt1bm1hcF9sb2NhbF9iaCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJiMzOTtzIGRhdGEuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfbG9jYWxfYmgoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiYjNDM7e1xuJiM0MztcdGlmICghYmgtXHUwMDNlYl9mb2xpbylcbiYjNDM7XHRcdHJldHVybiBiaC1cdTAwM2ViX2RhdGE7XG4mIzQzO1x0cmV0dXJuIGttYXBfbG9jYWxfZm9saW8oYmgtXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBrdW5tYXBfbG9jYWxfYmggLSBVbm1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cbiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyLlxuJiM0MzsgKiBAYWRkcjogVGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkga21hcF9sb2NhbF9iaCgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGJoLVx1MDAzZWJfZm9saW8pXG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoYWRkcik7XG4gfVxuIFxuIC8qIElmIHdlICprbm93KiBwYWdlLVx1MDAzZXByaXZhdGUgcmVmZXJzIHRvIGJ1ZmZlcl9oZWFkcyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE3bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtKQkQyJiMzNDssCiAgICAmIzM0O0dGUzJfRlMmIzM0OywKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtFWEZBVF9GUyYjMzQ7LAogICAgJiMzNDtBREZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDJfRlMmIzM0OywKICAgICYjMzQ7T01GU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JoX2VuZF93cml0ZSYjMzQ7LAogICAgJiMzNDtiaF9lbmRfYXN5bmNfd3JpdGUmIzM0OywKICAgICYjMzQ7X19iZm9yZ2V0JiMzNDssCiAgICAmIzM0O19fc3luY19kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uJiMzNDssCiAgICAmIzM0O2piZDJfZmNfd2FpdF9idWZzJiMzNDssCiAgICAmIzM0O29jZnMyX3dyaXRlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2JocyYjMzQ7LAogICAgJiMzNDtleGZhdF91cGRhdGVfYmhzJiMzNDssCiAgICAmIzM0O19fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7Z2ZzMl9waW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBidWZmZXJfaGVhZCBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3cml0ZSBlcnJvciB0cmFja2luZyAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yIHZzIGJ1ZmZlcl91cHRvZGF0ZSkgYW5kIHN1cHBvcnQgZm9yIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGUuZy4sIGZvciBiX2Zyb3plbl9kYXRhIGluIGpiZDIpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoZXh0NCwgamJkMiwgZ2ZzMiwgb2NmczIsIGZhdCwgZXhmYXQsIGFkZnMsIGV4dDIsIG9tZnMpIGFuZCB0aGUgY29yZSBibG9jayBsYXllci4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzICh2aWEgdGhlIG5ldyBrbWFwX2xvY2FsX2JoL2Jpb19hZGRfdmlydF9ub2ZhaWwgcGF0aHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjY4OGM2ODBjNTlmYzdlOWZiYzY0MzJhNWVjZjc2NDFkMDE4ZWEwMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMjA6MDE6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuYwppbmRleCAxMWFmYTllMTU3YWE3Li5iOGNjNmE2OTdhMDVkIDEwMDY0NAotLS0gYS9mcy9hZGZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FkZnMvZGlyLmMKQEAgLTE5MSw3ICYjNDM7MTkxLDcgQEAgc3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKQogCWZvciAoaSA9IGRpci0mZ3Q7bnJfYnVmZmVycyAtIDE7IGkgJmd0Oz0gMDsgaS0tKSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBkaXItJmd0O2Joc1tpXTsKIAkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKQogCQkJZXJyID0gLUVJTzsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggYmU4YjU3YTYzNWNkOC4uNjhlYTBlZjg0NzBlZSAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTIwMywxMSAmIzQzOzIwMywxMCBAQCB2b2lkIGJoX2VuZF93cml0ZShzdHJ1Y3QgYmlvICpiaW8pCiAJYm9vbCBzdWNjZXNzID0gYmlvX2VuZGlvX2JoKGJpbywgJmFtcDtiaCk7CiAKIAlpZiAoc3VjY2VzcykgewotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfSBlbHNlIHsKIAkJYnVmZmVyX2lvX2Vycm9yKGJoLCAmIzM0OywgbG9zdCBzeW5jIHBhZ2Ugd3JpdGUmIzM0Oyk7CiAJCW1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKLQkJY2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAl9CiAJdW5sb2NrX2J1ZmZlcihiaCk7CiB9CkBAIC00MzcsMTEgJiM0Mzs0MzYsMTAgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKQogCiAJZm9saW8gPSBiaC0mZ3Q7Yl9mb2xpbzsKIAlpZiAoc3VjY2VzcykgewotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfSBlbHNlIHsKIAkJYnVmZmVyX2lvX2Vycm9yKGJoLCAmIzM0OywgbG9zdCBhc3luYyBwYWdlIHdyaXRlJiMzNDspOwogCQltYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7Ci0JCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJfQogCiAJZmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTsKQEAgLTYxOCw3ICYjNDM7NjE2LDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKQogCQl9CiAJCXNwaW5fdW5sb2NrKCZhbXA7bW1iLSZndDtsb2NrKTsKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwotCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCiYjNDM7CQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkKIAkJCWVyciA9IC1FSU87CiAJCWJyZWxzZShiaCk7CiAJCXNwaW5fbG9jaygmYW1wO21tYi0mZ3Q7bG9jayk7CkBAIC0xMDkxLDYgJiM0MzsxMDg5LDcgQEAgRVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7CiB2b2lkIF9fYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiYjNDM7CWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJcmVtb3ZlX2Fzc29jX3F1ZXVlKGJoKTsKIAlfX2JyZWxzZShiaCk7CiB9CkBAIC0xMDk5LDEyICYjNDM7MTA5OCwxNiBAQCBFWFBPUlRfU1lNQk9MKF9fYmZvcmdldCk7CiBzdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGJoLSZndDtiX2ZvbGlvKTsKJiM0MzsJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKIAkvKgogCSAqIFRoZSBleHQ0IGpvdXJuYWwgKGpiZDIpIGNhbiBzdWJtaXQgYSBidWZmZXJfaGVhZCBpdCBkaXJlY3RseSBjcmVhdGVkCi0JICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2VzbiYjMzk7dCBjYXJlIGFib3V0IHRoZXNlLgomIzQzOwkgKiBmb3IgbWVtb3J5IHRoYXQgaXMgbm90IGluIHRoZSBwYWdlIGNhY2hlIGF0IGFsbC4gIGZzY3J5cHQgZG9lc24mIzM5O3QKJiM0MzsJICogY2FyZSBhYm91dCB0aGVzZS4KIAkgKi8KJiM0MzsJaWYgKCFiaC0mZ3Q7Yl9mb2xpbykKJiM0MzsJCXJldHVybjsKJiM0MzsJbWFwcGluZyA9IGJoLSZndDtiX2ZvbGlvLSZndDttYXBwaW5nOwogCWlmICghbWFwcGluZykKIAkJcmV0dXJuOwogCWZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBtYXBwaW5nLSZndDtob3N0LApAQCAtMTExNSw3ICYjNDM7MTExOCw2IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAJCWVudW0gcndfaGludCB3cml0ZV9oaW50LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJYmlvX2VuZF9pb190IGVuZF9iaW8pCiB7Ci0JY29uc3QgZW51bSByZXFfb3Agb3AgPSBvcGYgJmFtcDsgUkVRX09QX01BU0s7CiAJc3RydWN0IGJpbyAqYmlvOwogCiAJQlVHX09OKCFidWZmZXJfbG9ja2VkKGJoKSk7CkBAIC0xMTIzLDExICYjNDM7MTEyNSw3IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsCiAJQlVHX09OKGJ1ZmZlcl9kZWxheShiaCkpOwogCUJVR19PTihidWZmZXJfdW53cml0dGVuKGJoKSk7CiAKLQkvKgotCSAqIE9ubHkgY2xlYXIgb3V0IGEgd3JpdGUgZXJyb3Igd2hlbiByZXdyaXRpbmcKLQkgKi8KLQlpZiAodGVzdF9zZXRfYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAob3AgPT0gUkVRX09QX1dSSVRFKSkKLQkJY2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKJiM0MzsJc2V0X2J1ZmZlcl9yZXEoYmgpOwogCiAJaWYgKGJ1ZmZlcl9tZXRhKGJoKSkKIAkJb3BmIHw9IFJFUV9NRVRBOwpAQCAtMTE0Miw3ICYjNDM7MTE0MCwxMSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLAogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBiaC0mZ3Q7Yl9ibG9ja25yICogKGJoLSZndDtiX3NpemUgJmd0OyZndDsgOSk7CiAJYmlvLSZndDtiaV93cml0ZV9oaW50ID0gd3JpdGVfaGludDsKIAotCWJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtJmd0O2JfZm9saW8sIGJoLSZndDtiX3NpemUsIGJoX29mZnNldChiaCkpOwomIzQzOwlpZiAoYmgtJmd0O2JfZm9saW8pCiYjNDM7CQliaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLSZndDtiX2ZvbGlvLCBiaC0mZ3Q7Yl9zaXplLAomIzQzOwkJCQkgICAgIGJoX29mZnNldChiaCkpOwomIzQzOwllbHNlCiYjNDM7CQliaW9fYWRkX3ZpcnRfbm9mYWlsKGJpbywgYmgtJmd0O2JfZGF0YSwgYmgtJmd0O2Jfc2l6ZSk7CiAKIAliaW8tJmd0O2JpX2VuZF9pbyA9IGVuZF9iaW87CiAJYmlvLSZndDtiaV9wcml2YXRlID0gYmg7CkBAIC0xMTUyLDcgJiM0MzsxMTU0LDggQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZiwKIAogCWlmICh3YmMpIHsKIAkJd2JjX2luaXRfYmlvKHdiYywgYmlvKTsKLQkJd2JjX2FjY291bnRfY2dyb3VwX293bmVyKHdiYywgYmgtJmd0O2JfZm9saW8sIGJoLSZndDtiX3NpemUpOwomIzQzOwkJaWYgKGJoLSZndDtiX2ZvbGlvKQomIzQzOwkJCXdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLSZndDtiX2ZvbGlvLCBiaC0mZ3Q7Yl9zaXplKTsKIAl9CiAKIAlibGtfY3J5cHRvX3N1Ym1pdF9iaW8oYmlvKTsKQEAgLTE1MDgsNyAmIzQzOzE1MTEsNyBAQCBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7CiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi8KICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXAogCSgxICZsdDsmbHQ7IEJIX01hcHBlZCB8IDEgJmx0OyZsdDsgQkhfTmV3IHwgMSAmbHQ7Jmx0OyBCSF9SZXEgfCBcCi0JIDEgJmx0OyZsdDsgQkhfRGVsYXkgfCAxICZsdDsmbHQ7IEJIX1Vud3JpdHRlbikKJiM0MzsJIDEgJmx0OyZsdDsgQkhfRGVsYXkgfCAxICZsdDsmbHQ7IEJIX1Vud3JpdHRlbiB8IDEgJmx0OyZsdDsgQkhfV3JpdGVfRUlPKQogCiBzdGF0aWMgdm9pZCBkaXNjYXJkX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKIHsKQEAgLTI3MzMsNyAmIzQzOzI3MzYsNyBAQCBpbnQgX19zeW5jX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MpCiAKIAkJYmhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTsKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwotCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCiYjNDM7CQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkKIAkJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7CiAJCXVubG9ja19idWZmZXIoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jCmluZGV4IDZmMTFhOTZhNGZmYTguLmRmZDBiYmYzMWM5NDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZmF0L21pc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9taXNjLmMKQEAgLTE4Nyw3ICYjNDM7MTg3LDcgQEAgaW50IGV4ZmF0X3VwZGF0ZV9iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzLCBpbnQgc3luYykKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9iaHMgJmFtcDsmYW1wOyBzeW5jOyBpJiM0MzsmIzQzOykgewogCQl3YWl0X29uX2J1ZmZlcihiaHNbaV0pOwotCQlpZiAoIWVyciAmYW1wOyZhbXA7ICFidWZmZXJfdXB0b2RhdGUoYmhzW2ldKSkKJiM0MzsJCWlmICghZXJyICZhbXA7JmFtcDsgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpCiAJCQllcnIgPSAtRUlPOwogCX0KIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jCmluZGV4IGJlNjNmODk0MDJhMzguLjM5MDA1ZWMyM2ZlNWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3hhdHRyLmMKQEAgLTc2OSw3ICYjNDM7NzY5LDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAogCQlpZiAoSVNfU1lOQyhpbm9kZSkpIHsKIAkJCXN5bmNfZGlydHlfYnVmZmVyKG5ld19iaCk7CiAJCQllcnJvciA9IC1FSU87Ci0JCQlpZiAoYnVmZmVyX3JlcShuZXdfYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShuZXdfYmgpKQomIzQzOwkJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IobmV3X2JoKSkKIAkJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuYwppbmRleCAwMmIwNjYyOTkxNjQ5Li5mMzM4ZDZlM2MyOWY2IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmMKQEAgLTQxMyw3ICYjNDM7NDEzLDcgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLAogCQl9CiAJCWlmIChpbm9kZSAmYW1wOyZhbXA7IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7CiAJCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkgewomIzQzOwkJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCQkJZXh0NF9lcnJvcl9pbm9kZV9lcnIoaW5vZGUsIHdoZXJlLCBsaW5lLAogCQkJCQkJICAgICBiaC0mZ3Q7Yl9ibG9ja25yLCBFSU8sCiAJCQkJCSYjMzQ7SU8gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2smIzM0Oyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmMKaW5kZXggOGUyMjU5Nzk5NjE0ZS4uOTU5OTg4MjdmZjAxMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuYwpAQCAtMjAzLDE3ICYjNDM7MjAzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX3NldF9zbmFwX2VycihpbnQgKnNuYXBfZXJyLCBpbnQgZXJyKQogc3RhdGljIHZvaWQgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JYm9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sICZhbXA7YmgpOwomIzQzOwlib29sIHN1Y2Nlc3MgPSBiaW9fZW5kaW9fYmgoYmlvLCAmYW1wO2JoKTsKIAogCUJVRkZFUl9UUkFDRShiaCwgJiMzNDsmIzM0Oyk7Ci0JaWYgKHVwdG9kYXRlKSB7Ci0JCWV4dDRfZGVidWcoJiMzNDslczogQmxvY2sgJWxsZCB1cC10by1kYXRlJiMzNDssCiYjNDM7CWlmIChzdWNjZXNzKSB7CiYjNDM7CQlleHQ0X2RlYnVnKCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdHRlbiYjMzQ7LAogCQkJICAgX19mdW5jX18sIGJoLSZndDtiX2Jsb2NrbnIpOwotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCWNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfSBlbHNlIHsKLQkJZXh0NF9kZWJ1ZygmIzM0OyVzOiBCbG9jayAlbGxkIG5vdCB1cC10by1kYXRlJiMzNDssCiYjNDM7CQlleHQ0X2RlYnVnKCYjMzQ7JXM6IEJsb2NrICVsbGQgd3JpdGUgZmFpbGVkJiMzNDssCiAJCQkgICBfX2Z1bmNfXywgYmgtJmd0O2JfYmxvY2tucik7Ci0JCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQltYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJfQogCiAJdW5sb2NrX2J1ZmZlcihiaCk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21tcC5jIGIvZnMvZXh0NC9tbXAuYwppbmRleCA3Y2UzNjE0ODRiMzgyLi40YjE4ZGRlZjQ2OGQ3IDEwMDY0NAotLS0gYS9mcy9leHQ0L21tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbW1wLmMKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIHN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCWJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLAogCQkJYmhfZW5kX3dyaXRlKTsKIAl3YWl0X29uX2J1ZmZlcihiaCk7Ci0JaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkKJiM0MzsJaWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jCmluZGV4IGJlMThmNmI1ODE5YmEuLjRhNGNkMDExMWU0N2EgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L21pc2MuYwpAQCAtMzU2LDcgJiM0MzszNTYsNyBAQCBpbnQgZmF0X3N5bmNfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocykKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucl9iaHM7IGkmIzQzOyYjNDM7KSB7CiAJCXdhaXRfb25fYnVmZmVyKGJoc1tpXSk7Ci0JCWlmICghZXJyICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaHNbaV0pKQomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmhzW2ldKSkKIAkJCWVyciA9IC1FSU87CiAJfQogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuYwppbmRleCA3OGJiYThjYzEwYjhmLi5lM2UwZGNiMWY1NjczIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2dmczIvbG9nLmMKQEAgLTEwNyw3ICYjNDM7MTA3LDcgQEAgX19hY3F1aXJlcygmYW1wO3NkcC0mZ3Q7c2RfYWlsX2xvY2spCiAJCWdmczJfYXNzZXJ0KHNkcCwgYmQtJmd0O2JkX3RyID09IHRyKTsKIAogCQlpZiAoIWJ1ZmZlcl9idXN5KGJoKSkgewotCQkJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCQlpZiAoIWJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKIAkJCQlsaXN0X21vdmUoJmFtcDtiZC0mZ3Q7YmRfYWlsX3N0X2xpc3QsCiAJCQkJCSAgJmFtcDt0ci0mZ3Q7dHJfYWlsMl9saXN0KTsKIAkJCQljb250aW51ZTsKQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsCiAJCQlhY3RpdmVfY291bnQmIzQzOyYjNDM7OwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpICZhbXA7JmFtcDsKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpICZhbXA7JmFtcDsKIAkJICAgICFjbXB4Y2hnKCZhbXA7c2RwLSZndDtzZF9sb2dfZXJyb3IsIDAsIC1FSU8pKQogCQkJZ2ZzMl9pb19lcnJvcl9iaChzZHAsIGJoKTsKIAkJLyoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggNmRhYmU3M2FkNzkwZC4uNzQ0MGU1YjcyZjhhZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQgZ2ZzMl9waW4oc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAlpZiAodGVzdF9zZXRfYnVmZmVyX3Bpbm5lZChiaCkpCiAJCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7Ci0JaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQomIzQzOwlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkKIAkJZ2ZzMl9pb19lcnJvcl9iaChzZHAsIGJoKTsKIAliZCA9IGJoLSZndDtiX3ByaXZhdGU7CiAJLyogSWYgdGhpcyBidWZmZXIgaXMgaW4gdGhlIEFJTCBhbmQgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuCkBAIC0xNzksNiAmIzQzOzE3OSw4IEBAIHN0YXRpYyB2b2lkIGdmczJfZW5kX2xvZ193cml0ZV9iaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlkbyB7CiAJCWlmIChlcnJvcikKIAkJCW1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpOwogCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJbmV4dCA9IGJoLSZndDtiX3RoaXNfcGFnZTsKIAkJc2l6ZSAtPSBiaC0mZ3Q7Yl9zaXplOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggMzAyOWNiNmY2ZDY0MC4uZWJmNmJhNThmZjRkMCAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC0zMiwxNCAmIzQzOzMyLDE0IEBACiBzdGF0aWMgdm9pZCBqb3VybmFsX2VuZF9idWZmZXJfaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlib29sIHVwdG9kYXRlID0gYmlvX2VuZGlvX2JoKGJpbywgJmFtcDtiaCk7CiYjNDM7CWJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sICZhbXA7YmgpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb3JpZ19iaCA9IGJoLSZndDtiX3ByaXZhdGU7CiAKIAlCVUZGRVJfVFJBQ0UoYmgsICYjMzQ7JiMzNDspOwotCWlmICh1cHRvZGF0ZSkKLQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CWlmIChzdWNjZXNzKQomIzQzOwkJY2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTsKIAllbHNlCi0JCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQltYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJaWYgKG9yaWdfYmgpIHsKIAkJY2xlYXJfYW5kX3dha2VfdXBfYml0KEJIX1NoYWRvdywgJmFtcDtvcmlnX2JoLSZndDtiX3N0YXRlKTsKIAl9CkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBpbnQgam91cm5hbF93YWl0X29uX2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLAogCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiAJd2FpdF9vbl9idWZmZXIoYmgpOwogCi0JaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkKJiM0MzsJaWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKQogCQlyZXQgPSAtRUlPOwogCXB1dF9iaChiaCk7ICAgICAgICAgICAgLyogT25lIGZvciBnZXRibGsoKSAqLwogCkBAIC0zMzAsOSAmIzQzOzMzMCw5IEBAIHN0YXRpYyBfX3UzMiBqYmQyX2NoZWNrc3VtX2RhdGEoX191MzIgY3JjMzJfc3VtLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogCWNoYXIgKmFkZHI7CiAJX191MzIgY2hlY2tzdW07CiAKLQlhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC0mZ3Q7Yl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7CiYjNDM7CWFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTsKIAljaGVja3N1bSA9IGNyYzMyX2JlKGNyYzMyX3N1bSwgYWRkciwgYmgtJmd0O2Jfc2l6ZSk7Ci0Ja3VubWFwX2xvY2FsKGFkZHIpOwomIzQzOwlrdW5tYXBfbG9jYWxfYmgoYmgsIGFkZHIpOwogCiAJcmV0dXJuIGNoZWNrc3VtOwogfQpAQCAtMzU3LDEwICYjNDM7MzU3LDEwIEBAIHN0YXRpYyB2b2lkIGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0KGpvdXJuYWxfdCAqaiwgam91cm5hbF9ibG9ja190YWdfdCAqdGFnLAogCQlyZXR1cm47CiAKIAlzZXEgPSBjcHVfdG9fYmUzMihzZXF1ZW5jZSk7Ci0JYWRkciA9IGttYXBfbG9jYWxfZm9saW8oYmgtJmd0O2JfZm9saW8sIGJoX29mZnNldChiaCkpOwomIzQzOwlhZGRyID0ga21hcF9sb2NhbF9iaChiaCk7CiAJY3N1bTMyID0gamJkMl9jaGtzdW0oai0mZ3Q7al9jc3VtX3NlZWQsIChfX3U4ICopJmFtcDtzZXEsIHNpemVvZihzZXEpKTsKIAljc3VtMzIgPSBqYmQyX2Noa3N1bShjc3VtMzIsIGFkZHIsIGJoLSZndDtiX3NpemUpOwotCWt1bm1hcF9sb2NhbChhZGRyKTsKJiM0MzsJa3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTsKIAogCWlmIChqYmQyX2hhc19mZWF0dXJlX2NzdW0zKGopKQogCQl0YWczLSZndDt0X2NoZWNrc3VtID0gY3B1X3RvX2JlMzIoY3N1bTMyKTsKQEAgLTgzNCw3ICYjNDM7ODM0LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbCkKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwogCQljb25kX3Jlc2NoZWQoKTsKIAotCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKQomIzQzOwkJaWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKQogCQkJZXJyID0gLUVJTzsKIAkJamJkMl91bmZpbGVfbG9nX2JoKGJoKTsKIAkJc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQmIzQzOyYjNDM7OwpAQCAtODc3LDcgJiM0Mzs4NzcsNyBAQCB2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKQogCQl3YWl0X29uX2J1ZmZlcihiaCk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCi0JCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpCiYjNDM7CQlpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpCiAJCQllcnIgPSAtRUlPOwogCiAJCUJVRkZFUl9UUkFDRShiaCwgJiMzNDtwaDU6IGNvbnRyb2wgYnVmZmVyIHdyaXRlb3V0IGRvbmU6IHVuZmlsZSYjMzQ7KTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggMDllZmEzMzc2NDllMi4uNzJlOGNjYmY3ZGU0ZSAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTMyNyw4ICYjNDM7MzI3LDYgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sCiB7CiAJaW50IGRvX2VzY2FwZSA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmg7Ci0Jc3RydWN0IGZvbGlvICpuZXdfZm9saW87Ci0JdW5zaWduZWQgaW50IG5ld19vZmZzZXQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9pbiA9IGpoMmJoKGpoX2luKTsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi0mZ3Q7dF9qb3VybmFsOwogCkBAIC0zNDgsMjQgJiM0MzszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sCiAJLyoga2VlcCBzdWJzZXF1ZW50IGFzc2VydGlvbnMgc2FuZSAqLwogCWF0b21pY19zZXQoJmFtcDtuZXdfYmgtJmd0O2JfY291bnQsIDEpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGUKJiM0MzsJICogc2hhZG93IGJ1ZmZlciBnZXRzIG5vIGZvbGlvIGF0IGFsbDogYl9mb2xpbyBzdGF5cyBOVUxMIGZyb20gdGhlCiYjNDM7CSAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdAomIzQzOwkgKiB0aGUgc2xhYiBmb2xpbyBpbnN0ZWFkIHdvdWxkIGhhbmQgaXRzIG92ZXJsb2FkZWQgLSZndDttYXBwaW5nIHRvCiYjNDM7CSAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLgomIzQzOwkgKi8KJiM0MzsKIAlzcGluX2xvY2soJmFtcDtqaF9pbi0mZ3Q7Yl9zdGF0ZV9sb2NrKTsKIAkvKgogCSAqIElmIGEgbmV3IHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGRvbmUgYSBidWZmZXIgY29weS1vdXQsIHRoZW4KIAkgKiB3ZSB1c2UgdGhhdCB2ZXJzaW9uIG9mIHRoZSBkYXRhIGZvciB0aGUgY29tbWl0LgogCSAqLwogCWlmIChqaF9pbi0mZ3Q7Yl9mcm96ZW5fZGF0YSkgewotCQluZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKLQkJbmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKIAkJZG9fZXNjYXBlID0gamJkMl9kYXRhX25lZWRzX2VzY2FwaW5nKGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKIAkJaWYgKGRvX2VzY2FwZSkKIAkJCWpiZDJfZGF0YV9kb19lc2NhcGUoamhfaW4tJmd0O2JfZnJvemVuX2RhdGEpOwomIzQzOwkJbmV3X2JoLSZndDtiX2RhdGEgPSBqaF9pbi0mZ3Q7Yl9mcm96ZW5fZGF0YTsKIAl9IGVsc2UgewomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGJoX2luLSZndDtiX2ZvbGlvOwomIzQzOwkJdW5zaWduZWQgaW50IG9mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgYmhfaW4tJmd0O2JfZGF0YSk7CiAJCWNoYXIgKnRtcDsKIAkJY2hhciAqbWFwcGVkX2RhdGE7CiAKLQkJbmV3X2ZvbGlvID0gYmhfaW4tJmd0O2JfZm9saW87Ci0JCW5ld19vZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8obmV3X2ZvbGlvLCBiaF9pbi0mZ3Q7Yl9kYXRhKTsKLQkJbWFwcGVkX2RhdGEgPSBrbWFwX2xvY2FsX2ZvbGlvKG5ld19mb2xpbywgbmV3X29mZnNldCk7CiYjNDM7CQltYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7CiAJCS8qCiAJCSAqIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBpZiBkYXRhIGFscmVhZHkgd2FzbiYjMzk7dCBmcm96ZW4uIERvCiAJCSAqIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciBlc2NhcGluZywgYXMgdGhlIHRyaWdnZXIgbWF5IG1vZGlmeQpAQCAtMzc5LDggJiM0MzszODQsMTAgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sCiAJCS8qCiAJCSAqIERvIHdlIG5lZWQgdG8gZG8gYSBkYXRhIGNvcHk/CiAJCSAqLwotCQlpZiAoIWRvX2VzY2FwZSkKJiM0MzsJCWlmICghZG9fZXNjYXBlKSB7CiYjNDM7CQkJZm9saW9fc2V0X2JoKG5ld19iaCwgZm9saW8sIG9mZnNldCk7CiAJCQlnb3RvIGVzY2FwZV9kb25lOwomIzQzOwkJfQogCiAJCXNwaW5fdW5sb2NrKCZhbXA7amhfaW4tJmd0O2Jfc3RhdGVfbG9jayk7CiAJCXRtcCA9IGttYWxsb2MoYmhfaW4tJmd0O2Jfc2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwpAQCAtMzkxLDcgJiM0MzszOTgsNyBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiwKIAkJfQogCiAJCWpoX2luLSZndDtiX2Zyb3plbl9kYXRhID0gdG1wOwotCQltZW1jcHlfZnJvbV9mb2xpbyh0bXAsIG5ld19mb2xpbywgbmV3X29mZnNldCwgYmhfaW4tJmd0O2Jfc2l6ZSk7CiYjNDM7CQltZW1jcHlfZnJvbV9mb2xpbyh0bXAsIGZvbGlvLCBvZmZzZXQsIGJoX2luLSZndDtiX3NpemUpOwogCQkvKgogCQkgKiBUaGlzIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnksIGFzIHdlJiMzOTtyZSB1c2luZyBmcm96ZW4KIAkJICogZGF0YSBmb3IgdGhlIGVzY2FwaW5nLCBidXQgaXQga2VlcHMgY29uc2lzdGVuY3kgd2l0aApAQCAtNDAwLDEzICYjNDM7NDA3LDExIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLAogCQlqaF9pbi0mZ3Q7Yl9mcm96ZW5fdHJpZ2dlcnMgPSBqaF9pbi0mZ3Q7Yl90cmlnZ2VyczsKIAogY29weV9kb25lOgotCQluZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKLQkJbmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLSZndDtiX2Zyb3plbl9kYXRhKTsKIAkJamJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi0mZ3Q7Yl9mcm96ZW5fZGF0YSk7CiYjNDM7CQluZXdfYmgtJmd0O2JfZGF0YSA9IGpoX2luLSZndDtiX2Zyb3plbl9kYXRhOwogCX0KIAogZXNjYXBlX2RvbmU6Ci0JZm9saW9fc2V0X2JoKG5ld19iaCwgbmV3X2ZvbGlvLCBuZXdfb2Zmc2V0KTsKIAluZXdfYmgtJmd0O2Jfc2l6ZSA9IGJoX2luLSZndDtiX3NpemU7CiAJbmV3X2JoLSZndDtiX2JkZXYgPSBqb3VybmFsLSZndDtqX2RldjsKIAluZXdfYmgtJmd0O2JfYmxvY2tuciA9IGJsb2NrbnI7CkBAIC04ODEsNyAmIzQzOzg4Niw3IEBAIGludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcykKIAkJICogVXBkYXRlIGpfZmNfb2ZmIHNvIGpiZDJfZmNfcmVsZWFzZV9idWZzIGNhbiByZWxlYXNlIHJlbWFpbgogCQkgKiBidWZmZXIgaGVhZC4KIAkJICovCi0JCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpIHsKJiM0MzsJCWlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSkgewogCQkJam91cm5hbC0mZ3Q7al9mY19vZmYgPSBpICYjNDM7IDE7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IDVjYzdkMDk3YjJhYzguLjg1ZDg0ZDkwOWY3ODUgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTkyMCw3ICYjNDM7OTIwLDcgQEAgc3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCkKIAljaGFyICpzb3VyY2U7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpoMmJoKGpoKTsKIAotCUpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCAmIzM0O1Bvc3NpYmxlIElPIGZhaWx1cmUuXG4mIzM0Oyk7CiYjNDM7CUpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCAmIzM0O0J1ZmZlciBub3QgdXB0b2RhdGUhXG4mIzM0Oyk7CiAJc291cmNlID0ga21hcF9sb2NhbF9mb2xpbyhiaC0mZ3Q7Yl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7CiAJLyogRmlyZSBkYXRhIGZyb3plbiB0cmlnZ2VyIGp1c3QgYmVmb3JlIHdlIGNvcHkgdGhlIGRhdGEgKi8KIAlqYmQyX2J1ZmZlcl9mcm96ZW5fdHJpZ2dlcihqaCwgc291cmNlLCBqaC0mZ3Q7Yl90cmlnZ2Vycyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYwppbmRleCA3YmZlMzc3YWYyZGZjLi43MzNjZWRhNzljYTFmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKQEAgLTY2LDEyICYjNDM7NjYsMTQgQEAgaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCiAJd2FpdF9vbl9idWZmZXIoYmgpOwogCi0JaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJaWYgKCFidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoY2ksIGJoKTsKIAl9IGVsc2UgewotCQkvKiBXZSBkb24mIzM5O3QgbmVlZCB0byByZW1vdmUgdGhlIGNsdXN0ZXJlZCB1cHRvZGF0ZQotCQkgKiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBiaCBhcyBpdCYjMzk7cyBub3QgbWFya2VkIGxvY2FsbHkKLQkJICogdXB0b2RhdGUuICovCiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGJ1ZmZlciBzdGlsbCBob2xkcyB3aGF0IHdlIHRyaWVkIHRvIHdyaXRlLCBidXQgaXQgZGlkCiYjNDM7CQkgKiBub3QgcmVhY2ggdGhlIGRpc2ssIHNvIGRvbiYjMzk7dCBhZHZlcnRpc2UgaXQgdG8gdGhlIGNsdXN0ZXIKJiM0MzsJCSAqIGFzIHVwIHRvIGRhdGUuCiYjNDM7CQkgKi8KIAkJcmV0ID0gLUVJTzsKIAkJbWxvZ19lcnJubyhyZXQpOwogCX0KQEAgLTQ0Niw3ICYjNDM7NDQ4LDcgQEAgaW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAogCXdhaXRfb25fYnVmZmVyKGJoKTsKIAotCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgewomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewogCQlyZXQgPSAtRUlPOwogCQltbG9nX2Vycm5vKHJldCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGQ4YWZiYzFhNzZiYjguLmVhNjgwMmQ4OTRjMmIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTY3NiwxOSAmIzQzOzY3NiwyMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwKIAkJbWxvZyhNTF9FUlJPUiwgJiMzNDtnaXZpbmcgbWUgYSBidWZmZXIgdGhhdCYjMzk7cyBub3QgdXB0b2RhdGUhXG4mIzM0Oyk7CiAJCW1sb2coTUxfRVJST1IsICYjMzQ7Yl9ibG9ja25yPSVsbHUsIGJfc3RhdGU9MHglbHhcbiYjMzQ7LAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtJmd0O2JfYmxvY2tuciwgYmgtJmd0O2Jfc3RhdGUpOwotCiYjNDM7CX0KJiM0MzsJLyoKJiM0MzsJICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsCiYjNDM7CSAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLgomIzQzOwkgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3IKJiM0MzsJICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXIKJiM0MzsJICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmUKJiM0MzsJICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YQomIzQzOwkgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZAomIzQzOwkgKiBmdXJ0aGVyIGRhbWFnZS4KJiM0MzsJICovCiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCWxvY2tfYnVmZmVyKGJoKTsKLQkJLyoKLQkJICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsCi0JCSAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLgotCQkgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3IKLQkJICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJiMzOTt0IGp1c3QgY2xlYXIKLQkJICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmUKLQkJICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YQotCQkgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZAotCQkgKiBmdXJ0aGVyIGRhbWFnZS4KLQkJICovCi0JCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiAJCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJCXJldHVybiBvY2ZzMl9lcnJvcihvc2ItJmd0O3NiLCAmIzM0O0EgcHJldmlvdXMgYXR0ZW1wdCB0byAmIzM0OwogCQkJCQkmIzM0O3dyaXRlIHRoaXMgYnVmZmVyIGhlYWQgZmFpbGVkXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmMKaW5kZXggMWQ5MTVlZjcyMTE5Zi4uYmMzNzAyOWE0YWZiMSAxMDA2NDQKLS0tIGEvZnMvb21mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29tZnMvaW5vZGUuYwpAQCAtMTQ1LDcgJiM0MzsxNDUsNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJaWYgKHdhaXQpIHsKIAkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkKJiM0MzsJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKQogCQkJc3luY19mYWlsZWQgPSAxOwogCX0KIApAQCAtMTU5LDcgJiM0MzsxNTksNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAkJbWFya19idWZmZXJfZGlydHkoYmgyKTsKIAkJaWYgKHdhaXQpIHsKIAkJCXN5bmNfZGlydHlfYnVmZmVyKGJoMik7Ci0JCQlpZiAoYnVmZmVyX3JlcShiaDIpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaDIpKQomIzQzOwkJCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgyKSkKIAkJCQlzeW5jX2ZhaWxlZCA9IDE7CiAJCX0KIAkJYnJlbHNlKGJoMik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKaW5kZXggZmQyYzcxMTVjMDU0Mi4uMjBiOGZjYTFhYmZhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtNTksMTAgJiM0Mzs1OSw3IEBAIHN0cnVjdCBhZGRyZXNzX3NwYWNlOwogc3RydWN0IGJ1ZmZlcl9oZWFkIHsKIAl1bnNpZ25lZCBsb25nIGJfc3RhdGU7CQkvKiBidWZmZXIgc3RhdGUgYml0bWFwIChzZWUgYWJvdmUpICovCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3RoaXNfcGFnZTsvKiBjaXJjdWxhciBsaXN0IG9mIHBhZ2UmIzM5O3MgYnVmZmVycyAqLwotCXVuaW9uIHsKLQkJc3RydWN0IHBhZ2UgKmJfcGFnZTsJLyogdGhlIHBhZ2UgdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi8KLQkJc3RydWN0IGZvbGlvICpiX2ZvbGlvOwkvKiB0aGUgZm9saW8gdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi8KLQl9OwomIzQzOwlzdHJ1Y3QgZm9saW8gKmJfZm9saW87CQkvKiB0aGUgZm9saW8gdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi8KIAogCXNlY3Rvcl90IGJfYmxvY2tucjsJCS8qIHN0YXJ0IGJsb2NrIG51bWJlciAqLwogCXNpemVfdCBiX3NpemU7CQkJLyogc2l6ZSBvZiBtYXBwaW5nICovCkBAIC0xNzIsNyAmIzQzOzE2OSwzNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWZmZXJfdXB0b2RhdGUoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJoX29mZnNldChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZykoYmgpLSZndDtiX2RhdGEgJmFtcDsgKHBhZ2Vfc2l6ZShiaC0mZ3Q7Yl9wYWdlKSAtIDEpOwomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGJoKS0mZ3Q7Yl9kYXRhICZhbXA7IChmb2xpb19zaXplKGJoLSZndDtiX2ZvbGlvKSAtIDEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBrbWFwX2xvY2FsX2JoIC0gTWFwIHRoZSBkYXRhIG9mIGEgYnVmZmVyLgomIzQzOyAqIEBiaDogVGhlIGJ1ZmZlci4KJiM0MzsgKgomIzQzOyAqIEJ1ZmZlcnMgdXN1YWxseSBsaXZlIGluIHRoZSBwYWdlIGNhY2hlLCBidXQgYSBmZXcgYXJlIGJ1aWx0IG92ZXIgbWVtb3J5CiYjNDM7ICogd2hpY2ggaXMgbm90LiAgVGhvc2UgY2Fycnkgbm8gZm9saW8gYW5kIGJfZGF0YSBpcyBhbHJlYWR5IGEga2VybmVsIGFkZHJlc3MKJiM0MzsgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoCiYjNDM7ICoga3VubWFwX2xvY2FsX2JoKCkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJiMzOTtzIGRhdGEuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkICprbWFwX2xvY2FsX2JoKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiYjNDM7ewomIzQzOwlpZiAoIWJoLSZndDtiX2ZvbGlvKQomIzQzOwkJcmV0dXJuIGJoLSZndDtiX2RhdGE7CiYjNDM7CXJldHVybiBrbWFwX2xvY2FsX2ZvbGlvKGJoLSZndDtiX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICoga3VubWFwX2xvY2FsX2JoIC0gVW5tYXAgdGhlIGRhdGEgb2YgYSBidWZmZXIuCiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyLgomIzQzOyAqIEBhZGRyOiBUaGUgYWRkcmVzcyByZXR1cm5lZCBieSBrbWFwX2xvY2FsX2JoKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKQomIzQzO3sKJiM0MzsJaWYgKGJoLSZndDtiX2ZvbGlvKQomIzQzOwkJa3VubWFwX2xvY2FsKGFkZHIpOwogfQogCiAvKiBJZiB3ZSAqa25vdyogcGFnZS0mZ3Q7cHJpdmF0ZSByZWZlcnMgdG8gYnVmZmVyX2hlYWRzICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCdWZmZXIgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyB0d2Vha2luZyBidWZmZXJfaGVhZCBoYW5kbGluZyBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHplcm9pbmcgaW4gb24gYGJ1ZmZlcl91cHRvZGF0ZWAgYW5kIGBidWZmZXJfd3JpdGVfaW9fZXJyb3JgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3cml0ZSBlcnJvcnMgYXJlIG1hbmFnZWQgYW5kIGNoZWNrZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgcmVncmVzc2lvbnMuCgpUaGlzIGFsc28gc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYGttYXBfbG9jYWxfYmhgIGFuZCBga3VubWFwX2xvY2FsX2JoYCBhbmQgdXNpbmcgdGhlbSBpbiBgZnMvamJkMi9jb21taXQuY2AuIFRoZSBjaGFuZ2VzIGFsc28gaW5jbHVkZSBtb2RpZnlpbmcgYGZzL2piZDIvam91cm5hbC5jYCB0byBoYW5kbGUgYGJfZnJvemVuX2RhdGFgIGFuZCBjaGFuZ2luZyBgZnMvYnVmZmVyLmNgIHRvIGhhbmRsZSB0aGUgYGJoLSZndDtiX2ZvbGlvID09IE5VTExgIGNhc2UgaW4gYF9fYmhfc3VibWl0YCBieSB1c2luZyBgYmlvX2FkZF92aXJ0X25vZmFpbGAgaW5zdGVhZCBvZiBgYmlvX2FkZF9mb2xpb19ub2ZhaWxgLiBUaGF0JiMzOTtzIGEgc2hpZnQgaW4gaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGJsb2NrIGxheWVyLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIHRvdWNoaW5nIHRoZSBWRlMsIGJsb2NrIGxheWVyLCBhbmQgZmlsZXN5c3RlbXMsIHRoaXMgaXMgYSBjb3JlIGNoYW5nZS4gVGhhdCBtZWFucyBpdCBuZWVkcyB0byBiZSBmdXp6ZWQgaGVhdmlseS4gSXQmIzM5O3MgaW1wYWN0aW5nIGNvZGUgYWNyb3NzIGEgYnVuY2ggb2YgZmlsZXN5c3RlbXMg4oCTIGBmcy9idWZmZXIuY2AsIGBmcy9qYmQyL2AsIGBmcy9leHQ0L2AsIGBmcy9nZnMyL2AsIGBmcy9vY2ZzMi9gLCBgZnMvZmF0L2AsIGBmcy9leGZhdC9gLCBgZnMvYWRmcy9gLCBgZnMvZXh0Mi9gLCBhbmQgYGZzL29tZnMvYC4KClRvIHJlZmluZSBteSBmdXp6aW5nIGFwcHJvYWNoLCBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgdGhhdCBleHBvc2UgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgZm9jdXMgc3ltYm9scyBpbiB0aGVzZSBmaWxlcy4gSSBjYW4gc2VlIGBfX2JoX3N1Ym1pdGAgaW4gYGZzL2J1ZmZlci5jYCwgYGJoX2VuZF93cml0ZWAsIGBiaF9lbmRfYXN5bmNfd3JpdGVgLCBgbW1iX3N5bmNgLCBhbmQgYF9fYmZvcmdldGAgYXJlIGFsc28gaW4gYGZzL2J1ZmZlci5jYC4gT3ZlciBpbiBgZnMvamJkMi9qb3VybmFsLmNgIEkgc2VlIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYCBhbmQgYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gIGlzIGluIGBmcy9qYmQyL2NvbW1pdC5jYC4gSW4gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AsIEkgc2VlIGBleHQ0X2VuZF9idWZmZXJfaW9fc3luY2AsIGFuZCBpbiBgZnMvZ2ZzMi9sb3BzLmNgIEkgc2VlIGBnZnMyX2VuZF9sb2dfd3JpdGVfYmhgLgoKSSBuZWVkIHRvIGRpdmUgaW50byB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJsb2NrIGxheWVyIG5vdy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQmIzM5O3MgdmlzaWJsZSBhdCB0aGUgaW50ZXJmYWNlIGFuZCB3aWxsIHRyeSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3IgYXJlIGdsb2JhbCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIHRlc3RlZCBhbmQgd2hhdCBtYXkgbmVlZCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9MTkxPUVYUE9SVF9TWU1CT0woYmhfZW5kX3JlYWQpO1xuLS1cbmZzL2J1ZmZlci5jLTE5OS0gKi9cbmZzL2J1ZmZlci5jOjIwMDp2b2lkIGJoX2VuZF93cml0ZShzdHJ1Y3QgYmlvICpiaW8pXG5mcy9idWZmZXIuYy0yMDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTgwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipUaGUgR2xvYmFsIE5hdHVyZSBvZiBgYmhfZW5kX3dyaXRlYCBhbmQgSW1wbGljYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBmYWN0IHRoYXQgYGJoX2VuZF93cml0ZWAgaXMgYSBnbG9iYWwgdmFyaWFibGUgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBJIG5lZWQgdG8gY29uc2lkZXIgdmVyeSBjYXJlZnVsbHkuIEZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUsIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLiBHbG9iYWwgdmFyaWFibGVzLCB3aGlsZSBzb21ldGltZXMgY29udmVuaWVudCBmb3IgcXVpY2sgYWNjZXNzLCBpbmhlcmVudGx5IGludHJvZHVjZSBzZXZlcmFsIGlzc3VlcywgcGFydGljdWxhcmx5IGluIGNvbXBsZXgsIG11bHRpLXRocmVhZGVkIG9yIGRpc3RyaWJ1dGVkIHN5c3RlbXMgbGlrZSB0aGUgb25lcyBJIHR5cGljYWxseSBkZWFsIHdpdGguCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gQSBnbG9iYWwgbGlrZSB0aGlzIGltcGxpZXMgdGhhdCBhbnkgcGFydCBvZiB0aGUgc3lzdGVtIGNhbiBwb3RlbnRpYWxseSByZWFkIGFuZCBtb2RpZnkgdGhlIHN0YXRlIHJlcHJlc2VudGVkIGJ5IHRoaXMgdmFyaWFibGUuIFRoaXMgY2FuIG1ha2UgZGVidWdnaW5nIHNpZ25pZmljYW50bHkgaGFyZGVyIGJlY2F1c2UgeW91IGhhdmUgdG8gdHJhY2UgYWxsIHBvc3NpYmxlIGFjY2VzcyBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZhbHVlIGNoYW5nZXMuIEl0IGFsc28gaW5jcmVhc2VzIHRoZSByaXNrIG9mIHN1YnRsZSBidWdzIHRoYXQgYXJlIGhhcmQgdG8gcmVwcm9kdWNlLiBJZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBtb2RpZnlpbmcgYGJoX2VuZF93cml0ZWAgd2l0aG91dCBwcm9wZXIgc3luY2hyb25pemF0aW9uLCByYWNlIGNvbmRpdGlvbnMgYW5kIGRhdGEgY29ycnVwdGlvbiBhcmUgYSBzZXJpb3VzIHBvc3NpYmlsaXR5LCBhbmQgdGhvc2UgdHlwZXMgb2YgYnVncyBjYW4gYmUgcmVhbGx5IGRpZmZpY3VsdCB0byB0cmFjayBkb3duLgoKSSYjMzk7ZCB3YW50IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYGJoX2VuZF93cml0ZWAgcmVwcmVzZW50cy4gSXMgaXQgYSBjb3VudGVyLCBhIGZsYWcsIGEgcG9pbnRlciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgZ3VhcmFudGVlcywgaWYgYW55LCBhcmUgdGhlcmUgYWJvdXQgYXRvbWljIGFjY2VzcyBvciB0aHJlYWQgc2FmZXR5PyBJJiMzOTtkIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB2ZXJ5IGNsb3NlbHkgdG8gc2VlIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2hlcmUqIGl0JiMzOTtzIHVzZWQuIElzIGl0IGNvbmZpbmVkIHRvIGEgc2luZ2xlIG1vZHVsZSwgb3IgZG9lcyBpdCBjcm9zcyBtb2R1bGUgYm91bmRhcmllcywgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHk/IElmIGl0IGlzIGEgbmVjZXNzYXJ5IGdsb2JhbCwgSSYjMzk7ZCB3YW50IHRvIGNvbnNpZGVyIHN1cnJvdW5kaW5nIGl0IHdpdGggYWNjZXNzIGZ1bmN0aW9ucywgcG90ZW50aWFsbHkgcHJvdmlkaW5nIGEgaGlnaGVyIGxldmVsIG9mIGFic3RyYWN0aW9uLCBtYXliZSBldmVuIHdpdGggc29tZSBpbmhlcmVudCBsb2NraW5nLiBUaGlzIGNvdWxkIGhlbHAgbWl0aWdhdGUgdGhlIHByb2JsZW1zLCBidXQgaXTigJlzIHN0aWxsIG5vdCBhIHBlcmZlY3Qgc29sdXRpb24uCgpVbHRpbWF0ZWx5LCBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgd2l0aCBhIGhlYWx0aHkgZG9zZSBvZiBza2VwdGljaXNtLiBUaGUgdXNlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIGxpa2UgYGJoX2VuZF93cml0ZWAgc2hvdWxkIHRyaWdnZXIgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIHRvIGVuc3VyZSBpdCYjMzk7cyB0cnVseSBqdXN0aWZpZWQgYW5kIHRvIG1pdGlnYXRlIHRoZSByaXNrcyBpdCBpbnRyb2R1Y2VzLiBBIGNhcmVmdWwgcmVmYWN0b3JpbmcgdG8gcmVkdWNlIHRoZSBzY29wZSBvciByZW1vdmUgdGhlIGRlcGVuZGVuY3kgc2hvdWxkIGJlIGEga2V5IG9iamVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX2FzeW5jX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9Mzg0PXN0YXRpYyB2b2lkIGJoX2VuZF9hc3luY19yZWFkKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9idWZmZXIuYy00MjUtICovXG5mcy9idWZmZXIuYzo0MjY6dm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxuZnMvYnVmZmVyLmMtNDI3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc2NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gQXN5bmNocm9ub3VzIFdyaXRlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiaF9lbmRfYXN5bmNfd3JpdGVgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBpdCYjMzk7cyAqZ2xvYmFsKi4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIEEgZ2xvYmFsIGZ1bmN0aW9uIGxpa2UgdGhpcyB1c3VhbGx5IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBhIGNvcmUgb3IgY3JpdGljYWwgb3BlcmF0aW9uIHRoYXQmIzM5O3MgbmVlZGVkIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbSwgbGlrZWx5IHJlbGF0aW5nIHRvIHRoZSBjb21wbGV0aW9uIG9mIGFzeW5jaHJvbm91cyBibG9jayBkZXZpY2Ugd3JpdGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaXRzIHVzZTsgd2hhdCYjMzk7cyBkZXBlbmRlbnQgb24gaXRzIGNvcnJlY3QgZXhlY3V0aW9uPyBBbmQsIG1vcmUgdG8gdGhlIHBvaW50LCB3aGF0IGRlc2lnbiBjb25zdHJhaW50cyBsZWQgdG8gdGhlIGNob2ljZSBvZiBnbG9iYWwgc2NvcGU/IFdhcyBpdCBkZWVtZWQgbmVjZXNzYXJ5IGZvciBlZmZpY2llbmN5LCBvciBwZXJoYXBzIGEgbGVnYWN5IGRlY2lzaW9uPyBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3doeSYjMzQ7IGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3Igb3B0aW1pemF0aW9ucy4gSSBoYXZlIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIGFyY2hpdGVjdHVyZSB0byBzZWUgaXRzIGNhbGxpbmcgbG9jYXRpb25zLiBHbG9iYWwgc2NvcGUgaXMgaW5oZXJlbnRseSB0cmlja3kgd2l0aCBjb25jdXJyZW50IHByb2dyYW1taW5nLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbnNpZGVyIGlmIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBpdCBkb2VzIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGFzeW5jIHdyaXRlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYz0yODc9c3RhdGljIGlubGluZSB2b2lkIGpiZDJfZGF0YV9kb19lc2NhcGUoY2hhciAqZGF0YSlcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0zMjItXG5mcy9qYmQyL2pvdXJuYWwuYzozMjM6aW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG5mcy9qYmQyL2pvdXJuYWwuYy0zMjQtXHRcdFx0XHQgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1ldGFkYXRhIEJ1ZmZlciBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAuLi4gaXQmIzM5O3MgYSBnbG9iYWwsIGlzbiYjMzk7dCBpdD8gTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSBhbG9uZyB0aGUgbGluZXMgb2YgaG93IHRoYXQgaW1wYWN0cyBjb25jdXJyZW5jeSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoZSBqb3VybmFsIHdyaXRlIHBhdGguIFRoaW5raW5nIGFib3V0IGl0cyBzY29wZSwgdGhhdCBnbG9iYWwgbmF0dXJlIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYW55IGFjY2VzcyB0byBpdCBuZWVkcyBjYXJlZnVsIHN5bmNocm9uaXphdGlvbiwgcG90ZW50aWFsbHkgdGhyb3VnaCBtdXRleGVzIG9yIHNwaW5sb2NrcywgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IEkvTyBsb2FkIG9yIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGdsb2JhbCBidWZmZXIgY291bGQgYmVjb21lIGEgcG9pbnQgb2YgY29udGVudGlvbiBhbmQgc2VyaWFsaXphdGlvbiB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiBXaGF04oCZcyB0aGUgbG9ja2luZyBzdHJhdGVneT8gSXMgaXQgZmluZS1ncmFpbmVkIGVub3VnaCwgb3IgY291bGQgd2UgYmUgZmFjaW5nIHBlcmZvcm1hbmNlIGNsaWZmcyBhcyB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBpbmNyZWFzZXM/IEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyDigJMgaXMgdGhlcmUgYSBiYWxhbmNlIHRvIGJlIHN0cnVjayBiZXR3ZWVuIHRoZSBvdmVyaGVhZCBvZiBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSB0aHJvdWdocHV0IG9mIG1ldGFkYXRhIHdyaXRlcz8gVGhpcyBnbG9iYWwgdmFyaWFibGUgcmVhbGx5IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2sgZHVyaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2piZDIvY29tbWl0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamJkMi9jb21taXQuYz0zNDg9c3RhdGljIHZvaWQgamJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4tLVxuZnMvamJkMi9jb21taXQuYy0zNzUtICovXG5mcy9qYmQyL2NvbW1pdC5jOjM3Njp2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxuZnMvamJkMi9jb21taXQuYy0zNzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU5NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYC4gRmlyc3QsIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIExldCBtZSBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYSBmZXcga25vd24gZXhhbXBsZXMsIGxldCYjMzk7cyBzZWUsIHdoYXQgYWJvdXQgYGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jYCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYD8gQWgsIHRoYXQmIzM5O3MgYHN0YXRpY2AuIEFscmlnaHQuIE5leHQsIEkmIzM5O2xsIGV4YW1pbmUgYGdmczJfZW5kX2xvZ193cml0ZV9iaGAgaW4gYGZzL2dmczIvbG9wcy5jYOKAlHRoYXQgb25lJiMzOTtzIGFsc28gYHN0YXRpY2AuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgYSBzZW5zZSBvZiB3aGljaCBmaWxlc3lzdGVtcyBtaWdodCBiZSBpbiBwbGF5LiBJJiMzOTttIHNlZWluZyBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0pCRDJgLCBgQ09ORklHX0dGUzJfRlNgLCBgQ09ORklHX09DRlMyX0ZTYCwgYENPTkZJR19GQVRfRlNgLCBgQ09ORklHX0VYRkFUX0ZTYCwgYENPTkZJR19BREZTX0ZTYCwgYENPTkZJR19FWFQyX0ZTYCwgYW5kIGBDT05GSUdfT01GU19GU2AuIFJpZ2h0LCBzbyB0aGlzIGxpc3Qgd2lsbCBoZWxwIG1lIGRldGVybWluZSB3aGljaCBmaWxlc3lzdGVtcyBtaWdodCBsZXZlcmFnZSB0aGUgam91cm5hbC4KCkZpbmFsbHksIEkgdGhpbmsgSSYjMzk7bGwgZ28gYmFjayB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBmcy9qYmQyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uLCBvciBqb3VybmFsIGNvbW1pdHMgaW4gZ2VuZXJhbCwgYXJlIGNvbmZpZ3VyZWQuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBnbG9iYWwgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBKQkQyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2piZDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvamJkMi9LY29uZmlnOjI6Y29uZmlnIEpCRDJcbmZzL2piZDIvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5mcy9qYmQyL0tjb25maWctMTktXG5mcy9qYmQyL0tjb25maWc6MjA6Y29uZmlnIEpCRDJfREVCVUdcbmZzL2piZDIvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7SkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIEZpbGVzeXN0ZW0gTW9kdWxlIERlcGVuZGVuY3kgQ2hlY2sqKgoKUmlnaHQsIHNvIGBKQkQyYCBpcyBhIGpvdXJuYWxpbmcgZmlsZXN5c3RlbTsgaXQmIzM5O3MgcHVsbGVkIGluIGFzIGEgZGVwZW5kZW5jeSBieSBib3RoIGBFWFQ0X0ZTYCBhbmQgYE9DRlMyX0ZTYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciBpdHMgcm9sZSBpbiBlbnN1cmluZyBmaWxlc3lzdGVtIGludGVncml0eS4KCkkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZXhwbGljaXRseSB2ZXJpZnkgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBkZWNsYXJlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyB0byBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMgb2YgdGhlIGRlcGVuZGVuY3kgb24gYEpCRDJgIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEp1c3Qgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGFzIEkgZXhwZWN0IGl0IHRvIGJlLiBJIHdvdWxkbiYjMzk7dCBiZSBzdXJwcmlzZWQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBHRlMyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvZ2ZzMi9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgR0ZTMiBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgcmVjZW50IGNoYW5nZXMsIGRlcGVuZGVuY2llcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBpbnRyb2R1Y2VkIGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyBmaWxlIGluc2lkZSBhbmQgb3V0IGFsbG93cyBtZSB0byBxdWlja2x5IGFzc2VzcyB0aGUgYXZhaWxhYmxlIEdGUzIgZmVhdHVyZXMsIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgYW5kIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgdGFzay4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgR0ZTMi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIG9uIGZlYXR1cmVzIGxpa2UgYENPTkZJR19CTE9DS2AsIGBDT05GSUdfRlNgLCBgQ09ORklHX1hGU2AgYW5kIGBDT05GSUdfSkJEMmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2dmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZ2ZzMi9LY29uZmlnOjI6Y29uZmlnIEdGUzJfRlNcbmZzL2dmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZ2ZzMi9LY29uZmlnLTI2LVxuZnMvZ2ZzMi9LY29uZmlnOjI3OmNvbmZpZyBHRlMyX0ZTX0xPQ0tJTkdfRExNXG5mcy9nZnMyL0tjb25maWctMjgtXHRib29sIFwmIzM0O0dGUzIgRExNIGxvY2tpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgT0NGUzIgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBmcy9vY2ZzMi9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGtub3cgdGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhbGwgdGhlIHZhcmlvdXMgZmVhdHVyZXMsIG9wdGlvbnMsIGFuZCBkZXBlbmRlbmNpZXMgb2YgT0NGUzIgYXJlIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgdmlhIHRoZSBLY29uZmlnIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaCBsZXZlbCBvdmVydmlldyBvZiB0aGUgcG9zc2libGUgYnVpbGQgcGFyYW1ldGVycy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZCBieSB0aGUgS2J1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgdGhlcmUsIHdoYXQgZGVmYXVsdHMgYXJlIGJlaW5nIHNldCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIGhvdyBPQ0ZTMiBpcyBiZWluZyBjb25maWd1cmVkLCB3aGljaCwgaW4gdHVybiwgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxuZnMvb2NmczIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNDEtXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxuZnMvb2NmczIvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy01My1cbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjcyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBGQVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGZzL2ZhdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEZBVCBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBwYXJhbWV0ZXJzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHRvIGNvbnRyb2wgaXQuIEdvdHRhIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBsYXlvdXQgb2YgdGhpcyBzZWN0aW9uIGFnYWluOyB0aGVyZSYjMzk7cyBhbHdheXMgc29tZXRoaW5nIG5ldyB0byBsZWFybiBvciBhIHN1YnRsZSBkaWZmZXJlbmNlIGNvbXBhcmVkIHRvIHdoYXQgSSByZW1lbWJlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGdvb2RpZXMgYXdhaXQgdXMgd2l0aGluIHRoaXMgS2NvbmZpZyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkFUX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2ZhdC9LY29uZmlnOjI6Y29uZmlnIEZBVF9GU1xuZnMvZmF0L0tjb25maWctMy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGV4RkFUIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBleEZBVCBmaWxlc3lzdGVtIG1vZHVsZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBmcy9leGZhdC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgYWxsIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGUga2VybmVsIGludGVncmF0ZXMgYW5kIGRlYWxzIHdpdGggdGhpcyBzcGVjaWZpYyBmaWxlc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6IGVuYWJsZS9kaXNhYmxlIGZsYWdzIGZvciB0aGUgZXhGQVQgbW9kdWxlIGl0c2VsZiwgb3B0aW9ucyByZWxhdGVkIHRvIGRpZmZlcmVudCBmZWF0dXJlcyBsaWtlIGxvbmcgZmlsZSBuYW1lIHN1cHBvcnQgb3Igam91cm5hbGluZywgcGVyaGFwcyBldmVuIHNvbWUgZGVidWdnaW5nIGZsYWdzIGlmIHRoZXkmIzM5O3JlIHN0aWxsIG1haW50YWluZWQuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSB3aWxsIGJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBiYXNlZCBvbiBvdGhlciBrZXJuZWwgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgd2UgY3VzdG9taXplIHRoaXMgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBrZXJuZWwgYW5kIGJ1aWxkIHRoZSBrZXJuZWwgdG8gb3VyIHNwZWNpZmljIG5lZWRzLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGdvb2RpZXMgaXQgaG9sZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWEZBVF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4ZmF0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhmYXQvS2NvbmZpZy0yLVxuZnMvZXhmYXQvS2NvbmZpZzozOmNvbmZpZyBFWEZBVF9GU1xuZnMvZXhmYXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7ZXhGQVQgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQURGUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBREZTIChBZHZhbmNlZCBEaXNrIEZpbGUgU3lzdGVtKSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBmcy9hZGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0JiMzOTtzIHRoZSBvYnZpb3VzIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgQURGUyBpcyBidWlsdCBhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmFiaWxpdHkgb2YgdGhlIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGdvb2RpZXMgYXJlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQURGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FkZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2FkZnMvS2NvbmZpZzoyOmNvbmZpZyBBREZTX0ZTXG5mcy9hZGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FERlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2FkZnMvS2NvbmZpZy0yMi1cbmZzL2FkZnMvS2NvbmZpZzoyMzpjb25maWcgQURGU19GU19SV1xuZnMvYWRmcy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtBREZTIHdyaXRlIHN1cHBvcnQgKERBTkdFUk9VUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1ODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmU6IGV4dDImIzM5O3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBmcy9leHQyL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGRldGFpbGluZyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgd2UgY2FuIHR3ZWFrLCBwb3RlbnRpYWxseSBvcHRpbWl6ZSwgb3IgZGlzYWJsZSBhbHRvZ2V0aGVyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBJ4oCZbSB0aGlua2luZyB0aGluZ3MgbGlrZSBqb3VybmFsIHN1cHBvcnQsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGxhcmdlIGZpbGUgc3VwcG9ydCDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIHRvbywgb2YgY291cnNlIC0gdW5kZXJzdGFuZGluZyB3aGljaCBvdGhlciBzdWJzeXN0ZW1zIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBleHQyIGNhbiBiZSBjb3JyZWN0bHkgY29uZmlndXJlZCBhbmQgdXNlZC4gQW5kLCBJJiMzOTtsbCBiZSBzdXJlIHRvIG5vdGUgdGhlIHZhcmlvdXMgZGVmYXVsdCBzZXR0aW5ncyB0byBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGN1cnJlbnRseSBhc3N1bWVzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gZmluZS10dW5pbmcgdGhlIGV4dDIgbW9kdWxlIHRvIGZpdCB0aGlzIHNwZWNpZmljIHVzZS1jYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUMl9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDIvS2NvbmZpZzoyOmNvbmZpZyBFWFQyX0ZTXG5mcy9leHQyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0yMC1cbmZzL2V4dDIvS2NvbmZpZzoyMTpjb25maWcgRVhUMl9GU19YQVRUUlxuZnMvZXh0Mi9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtFeHQyIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9leHQyL0tjb25maWctMjktXG5mcy9leHQyL0tjb25maWc6MzA6Y29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMXG5mcy9leHQyL0tjb25maWctMzEtXHRib29sIFwmIzM0O0V4dDIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQyL0tjb25maWctMzktXG5mcy9leHQyL0tjb25maWc6NDA6Y29uZmlnIEVYVDJfRlNfU0VDVVJJVFlcbmZzL2V4dDIvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7RXh0MiBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIE9NRlMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBmcy9vbWZzL0tjb25maWdgLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3aGVuZXZlciBJIG5lZWQgdG8gYXNzZXNzIG9yIHR3ZWFrIGFueSBhc3BlY3RzIG9mIGEgZmlsZXN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGlzIGZpbGUgdG8gY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIE9NRlMgKE9sZCBNYWNpbnRvc2ggRmlsZSBTeXN0ZW0pIG1vZHVsZSwgb3IgcGVyaGFwcyBjZXJ0YWluIHNwZWNpZmljIGZlYXR1cmVzLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIGFueSBicm9hZGVyIGZpbGVzeXN0ZW0gc2V0dGluZ3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGV0aGVyIGl0JiMzOTtzIG1vZHVsYXIsIGFuZCBhbnkgY29tcGlsZS10aW1lIGZlYXR1cmVzIHRoYXQgYXJlIHR1cm5lZCBvbiBvciBvZmYuIEkmIzM5O2xsIGFsc28gdHJ5IHRvIGdhdWdlIGl0cyByZWxhdGl2ZSBjb21wbGV4aXR5LCBhbmQgbWF5YmUgbWFrZSBzb21lIG1lbnRhbCBub3RlcyBhYm91dCBhcmVhcyB0aGF0IEkgbWlnaHQgbmVlZCB0byByZXZpc2l0IGxhdGVyIGlmIEkgcGxhbiBvbiBhbnkga2luZCBvZiBtb2RpZmljYXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPTUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb21mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29tZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvb21mcy9LY29uZmlnOjI6Y29uZmlnIE9NRlNfRlNcbmZzL29tZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29uaWNCbHVlIE9wdGltaXplZCBNUEVHIEZpbGUgU3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZpbGVzeXN0ZW0gY29uZmlnczogYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYEZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkLCBidXQgYnJvYWQsIGxpc3QuIEhhbmcgb24gYSBzZWNvbmQuLi4gYEZBVF9GU2AuLi4gdGhhdCYjMzk7cyBhIGJpdCBkaWZmZXJlbnQuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUgYmVpbmcgYSBoaWRkZW4gY29uZmlnLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suIFllYWgsIHRoYXQmIzM5O3MgcmlnaHQuIGBGQVRfRlNgIGlzIHNlbGVjdGVkIGJ5IGJvdGggYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgLiBCZXN0IHRvIGNvbmZpcm0gYnkgb3BlbmluZyB0aGUgYGZzL2ZhdC9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVNET1NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mYXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mYXQvS2NvbmZpZz0yPWNvbmZpZyBGQVRfRlNcbi0tXG5mcy9mYXQvS2NvbmZpZy0zNy1cbmZzL2ZhdC9LY29uZmlnOjM4OmNvbmZpZyBNU0RPU19GU1xuZnMvZmF0L0tjb25maWctMzktXHR0cmlzdGF0ZSBcJiMzNDtNU0RPUyBmcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzkxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gTG9naWMqKgoKUmlnaHQsIHNvIGBNU0RPU19GU2AgYW5kIGBWRkFUX0ZTYCBib3RoIHVsdGltYXRlbHkgcmVseSBvbiB0aGUgYEZBVF9GU2AgY29yZS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBob3cgdGhlIGtlcm5lbCYjMzk7cyBmaWxlIHN5c3RlbSBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBJdCYjMzk7cyBhIGNvbW1vbiBkZXBlbmRlbmN5IHBhdHRlcm4uIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYFZGQVRfRlNgIGlzIGRlZmluZWQgaG93IEkgZXhwZWN0IGl0IHRvIGJlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZnMvZmF0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gTm8gbmVlZCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nIHdpdGggaXQgcmlnaHQgbm93LCBqdXN0IHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRkFUX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L0tjb25maWc9Mzg9Y29uZmlnIE1TRE9TX0ZTXG4tLVxuZnMvZmF0L0tjb25maWctNjItXG5mcy9mYXQvS2NvbmZpZzo2Mzpjb25maWcgVkZBVF9GU1xuZnMvZmF0L0tjb25maWctNjQtXHR0cmlzdGF0ZSBcJiMzNDtWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbGUgU3lzdGVtIEJ1ZmZlciBNYW5hZ2VtZW50IFRob3VnaHRzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpbGUgc3lzdGVtIGJ1ZmZlciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBpbmNsdXNpb24gaW4gb3VyIGN1cnJlbnQgYW5hbHlzaXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFjY291bnQgZm9yIGJvdGggYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGluIG91ciBjb3ZlcmFnZS4gVGhhdCBmZWVscyBjcml0aWNhbC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvdXIgYXR0ZW50aW9uIG9uLiBJJiMzOTttIHRoaW5raW5nIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLCBhbmQgYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gLiBUaGVzZSBmZWVsIGxpa2UgdGhlIGNvcmUgY29tcG9uZW50cy4gQnV0IGlzIHRoYXQgYWxsPyBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUuCgpXYWl0LCBJIHRoaW5rIHRoZXJlIGFyZSB0d28gbW9yZSBwb3RlbnRpYWwgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gb3VyIHB1cnZpZXc6IGBfX2Jmb3JnZXRgIGFuZCBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuIEkgdGhpbmsgdGhleSBhcmUgZ2VybWFuZSB0byBvdXIgb3ZlcmFsbCBjb3ZlcmFnZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGBfX2Jmb3JnZXRgIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBidWZmZXJzLCBhbmQgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIGBmcy9idWZmZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIF9fYmZvcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTEwODA9RVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7XG4tLVxuZnMvYnVmZmVyLmMtMTA4OC0gKi9cbmZzL2J1ZmZlci5jOjEwODk6dm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmZzL2J1ZmZlci5jLTEwOTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBCdWZmZXIgTWFuYWdlbWVudDogRGlnZ2luZyBpbnRvIGBfX2Jmb3JnZXRgIGFuZCBTeW5jaHJvbml6YXRpb24qKgoKUmlnaHQsIHNvIGBfX2Jmb3JnZXRgIGlzIGdsb2JhbCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gQ2xlYXJseSwgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGBmcy9idWZmZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgX19iZm9yZ2V0YCBhbmQgb3RoZXIgYnVmZmVyIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBidWZmZXIgY2FjaGUsIGlmIHRoaXMgaXMgd2hlcmUgdGhlIGRpcnR5IGJpdHMgcmVzaWRlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBzeW5jaHJvbml6YXRpb24gc3RyYXRlZ3kgaXMsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmQgdG8gZGlydHkgYnVmZmVyIG1hbmFnZW1lbnQuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyB3ZSBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHBlcnNpc3RlbmNlLiBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19zeW5jX2RpcnR5X2J1ZmZlcmAgaW4gdGhpcyBjb250ZXh0LiBJdCBpcyBsaWtlbHkgY2FsbGVkIGR1cmluZyBidWZmZXIgd3JpdGUtYmFjaywgZmlsZSBzeXN0ZW0gdW5tb3VudCwgb3Igc2ltaWxhciBjcml0aWNhbCBvcGVyYXRpb25zLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBmdW5jdGlvbiwgYXMgSSBleHBlY3QgaXQgd2lsbCBpbnZvbHZlIGNvb3JkaW5hdGlvbiBvZiBtdWx0aXBsZSBwcm9jZXNzZXMgb3IgdGhyZWFkcy4gVW5kZXJzdGFuZGluZyB0aGlzIHN5bmNocm9uaXphdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpLiogX19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTI3MTY9RVhQT1JUX1NZTUJPTCh3cml0ZV9kaXJ0eV9idWZmZXIpO1xuLS1cbmZzL2J1ZmZlci5jLTI3MjItICovXG5mcy9idWZmZXIuYzoyNzIzOmludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbmZzL2J1ZmZlci5jLTI3MjQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk2NAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBhIEdsb2JhbCBpbiBPQ0ZTMioqCgpPa2F5LCBzbyBgX19zeW5jX2RpcnR5X2J1ZmZlcmAuLi4gdGhhdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4gSG1tLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZD8gTGV0JiMzOTtzIHRyYWNlIGl0cyB1c2FnZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBjb250ZXh0LCBzZWVtcyB0byBiZSBpbiB0aGUgd3JpdGUgcGF0aC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBvY2ZzMl93cml0ZV9ibG9ja2AuIEkmIzM5O2xsIGZpbmQgdGhhdCBpbiBgZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY2AuIFRpbWUgdG8gc2VlIGhvdyB0aGlzIGdsb2JhbCBmdW5jdGlvbiB0aWVzIGludG8gdGhlIGJsb2NrIHdyaXRlIG9wZXJhdGlvbnMgb2YgT0NGUzIuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQgYXJvdW5kIGl0cyByb2xlIGluIGRhdGEgaW50ZWdyaXR5IGFuZCBzeW5jaHJvbml6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKiBvY2ZzMl93cml0ZV9ibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zNj1CVUZGRVJfRk5TKE5lZWRzVmFsaWRhdGUsIG5lZWRzX3ZhbGlkYXRlKTtcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzctXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjM4OmludCBvY2ZzMl93cml0ZV9ibG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzktXHRcdCAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1MwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqT0NGUzIgQmxvY2sgV3JpdGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBvY2ZzMl93cml0ZV9ibG9ja2AuIEkga25vdyB0aGlzIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIGhvdyBPQ0ZTMiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc3VwZXJibG9jayBhbmQgYmFja3Vwcywgc2luY2UgdGhvc2UgYXJlIGNyaXRpY2FsIG1ldGFkYXRhIGFyZWFzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IHRoaXMgaXMgcHJvYmFibHkgYGZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNgLiBMZXQmIzM5O3MgZm9jdXMgb24gYG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cGAgd2l0aGluIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyBpdCBjYWxscyBhbmQgaW50ZXJhY3RzIHdpdGggYG9jZnMyX3dyaXRlX2Jsb2NrYCwgc2luY2UgaXQgaXMgcHJvYmFibHkgYSB1c2VyIG9mIHRoYXQgZnVuY3Rpb24uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBoZXJlLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz00MDI9c3RhdGljIHZvaWQgb2NmczJfY2hlY2tfc3VwZXJfb3JfYmFja3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00MjQtICovXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jOjQyNTppbnQgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00MjYtXHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEdsb2JhbCBTdGF0ZSBNYW5hZ2VtZW50IGluIEZpbGVzeXN0ZW1zKioKClJpZ2h0LCBgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwYCDigJMgdGhhdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIGhvdyBnbG9iYWwgc3RhdGUgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQuIFlvdSBrbm93IHRoZSBpbXBsaWNhdGlvbnMg4oCTIHBvdGVudGlhbCBjb250ZW50aW9uLCBzZXJpYWxpemF0aW9uIGlzc3VlcywgYW5kIGdlbmVyYWxseSB0aGUgdHJpY2t5IG5hdHVyZSBvZiBjb25jdXJyZW50IGFjY2VzcyBpbiBhIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgaXRzIGdsb2JhbCBuYXR1cmUgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcgaW4gdGVybXMgb2YgdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0LgoKTGV0IG1lIHNlZSBob3cgb3RoZXJzIGhhbmRsZSBhIHNpbWlsYXIgcmVxdWlyZW1lbnQuLi4gQWhhISBMZXQmIzM5O3MgZXhhbWluZSBgZmF0X3N5bmNfYmhzYCBpbiBgZnMvZmF0L21pc2MuY2AuIEkgZXhwZWN0IHRvIHNlZSBzdHJhdGVnaWVzIGZvciBkZWFsaW5nIHdpdGggZGF0YSBidWZmZXJzIChCSFMpIGFuZCBlbnN1cmluZyBjb25zaXN0ZW5jeSBpbiBhIHNpbXBsZXIgZmlsZXN5c3RlbSBjb250ZXh0LiBUaGlzIG1pZ2h0IHByb3ZpZGUgY2x1ZXMgb24gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHNpbWlsYXIgaXNzdWVzLCBldmVuIGlmIGl0JiMzOTtzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgZmlsZSBzeXN0ZW0uIENvbXBhcmluZyBhbmQgY29udHJhc3RpbmcgYXBwcm9hY2hlcyBjb3VsZCBoaWdobGlnaHQgdGhlIHN1YnRsZSBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIGRpZmZlcmVudCBzdGF0ZSBtYW5hZ2VtZW50IGFwcHJvYWNoZXMgd2l0aGluIHRoZXNlIGtpbmRzIG9mIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGZhdF9zeW5jX2JocyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZhdC9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmF0L21pc2MuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwoZmF0X3VwZGF0ZV90aW1lKTtcbmZzL2ZhdC9taXNjLmMtMzQ5LVxuZnMvZmF0L21pc2MuYzozNTA6aW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXG5mcy9mYXQvbWlzYy5jLTM1MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTg1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRXhGQVQgSXNzdWUqKgoKQWxyaWdodCwgYGZhdF9zeW5jX2Joc2DigKYgdGhhdCYjMzk7cyBnbG9iYWwsIGlzbiYjMzk7dCBpdD8gU29tZXRoaW5nJiMzOTtzIG5hZ2dpbmcgYXQgbWUgYWJvdXQgaXQuIFdlIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgZXhGQVQgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZXhmYXRfdXBkYXRlX2Joc2AgaW4gYGZzL2V4ZmF0L21pc2MuY2AuIFRoYXQgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgQmxvY2sgSGVhZCBTcGFjZSwgd2hpY2ggY291bGQgdmVyeSB3ZWxsIGJlIHJlbGV2YW50IHRvIHRoZSBnbG9iYWwgdmFyaWFibGUgd2UmIzM5O3JlIGNvbmNlcm5lZCBhYm91dC4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QgdGhlcmUuIFdlIGtub3cgZXhGQVQgY2FuIGJlIHRyaWNreSwgc28gbGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGV4ZmF0X3VwZGF0ZV9iaHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leGZhdC9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhmYXQvbWlzYy5jPTE2ND1pbnQgZXhmYXRfdXBkYXRlX2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBzeW5jKVxuLS1cbmZzL2V4ZmF0L21pc2MuYy0xNzYtXG5mcy9leGZhdC9taXNjLmM6MTc3OmludCBleGZhdF91cGRhdGVfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocywgaW50IHN5bmMpXG5mcy9leGZhdC9taXNjLmMtMTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqRXhhbWluaW5nIFBvdGVudGlhbCBDb2RlIEludGVyYWN0aW9ucyoqCgpSaWdodCwgYGV4ZmF0X3VwZGF0ZV9iaHNgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIHRyYWNlIGl0cyB1c2FnZS4gR2l2ZW4gaXRzIG5hbWUsIGl0IHByb2JhYmx5IHBsYXlzIGEgcm9sZSBpbiB1cGRhdGluZyBibG9jayBoZWFkZXJzLiBMZXQmIzM5O3Mgc2VlIGhvdyBzb21ldGhpbmcgc2ltaWxhciBpcyBoYW5kbGVkIGluIG90aGVyIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNvIGxldCYjMzk7cyBjaGVjayBgZXh0Ml94YXR0cl9zZXQyYCB3aXRoaW4gYGZzL2V4dDIveGF0dHIuY2AgYXMgYSBjb21wYXJpc29uLiBJdCYjMzk7bGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgb24gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgbWF5IGJlIHVwZGF0ZWQgaW4gcmVsYXRpb24gdG8gYmxvY2sgaGVhZGVycywgZ2l2aW5nIG1lIGEgcG9pbnQgb2YgY29tcGFyaXNvbiBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKiBleHQyX3hhdHRyX3NldDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQyL3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGV4dDJfeGF0dHJfc2V0MmAgU2VhcmNoIFN0cmF0ZWd5KioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyB0byB0cmFjayBkb3duIGluc3RhbmNlcyBvZiBgZXh0Ml94YXR0cl9zZXQyYC4gU2ltcGxlIGVub3VnaCwgYSBjb21tb24gZnVuY3Rpb24gbmFtZSB0byBpbnZlc3RpZ2F0ZSB3aGVuIHdvcmtpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGV4dDIgZmlsZXN5c3RlbXMuIEhvd2V2ZXIsIHRoZSBhYnNlbmNlIG9mIHRoZSBgXmAgaW4gdGhlIHNlYXJjaCB0ZXJtIGltcGxpZXMgYSBwcmVmZXJlbmNlIGZvciBhIG1vcmUgYnJvYWQgc2VhcmNoLiBXZSYjMzk7cmUgbm90IGxvb2tpbmcgZm9yIGV4YWN0IG1hdGNoZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBsaW5lcyBvciBkZWZpbml0aW9ucywgYnV0ICphbnkqIG9jY3VycmVuY2VzIG9mIHRoZSBzeW1ib2wgYGV4dDJfeGF0dHJfc2V0MmAgd2l0aGluIHRoZSBjb2RlIGJhc2UuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGxpa2VseSBpbnRlcmVzdGVkIGluIGV4cGxvcmluZyBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLCBpdHMgdXNhZ2Ugd2l0aGluIG90aGVyIGZ1bmN0aW9ucywgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb2YgdGhlIGZ1bmN0aW9uLCBvciBldmVuIHJlZmVyZW5jZXMgd2l0aGluIGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24uIEl0IGNvdWxkIGluZGljYXRlIGFuIGludmVzdGlnYXRpb24gb2YgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgcG90ZW50aWFsIGJ1ZyBodW50aW5nIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBwaWVjZSBvZiBjb2RlLiBXZSBjb3VsZCBiZSBsb29raW5nIGZvcjoKCiogICAqKkZ1bmN0aW9uIENhbGxzOioqIFdoZXJlIGlzIGBleHQyX3hhdHRyX3NldDJgIGJlaW5nIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgYXJndW1lbnQgdXNhZ2U/CiogICAqKkRlZmluaXRpb25zIGFuZCBJbXBsZW1lbnRhdGlvbnM6KiogV2UgbWlnaHQgd2FudCB0byByZXZpZXcgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBleHRlbmRlZCBhdHRyaWJ1dGUgaW1wbGVtZW50YXRpb24uCiogICAqKkRvY3VtZW50YXRpb24gb3IgQ29tbWVudHM6KiogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBtZW50aW9uZWQgaW4gZG9jdW1lbnRhdGlvbiwgb3IgaGF2ZSBjb21tZW50cyBpbiBvdGhlciBsb2NhdGlvbnMgZGVzY3JpYmluZyBpdHMgdXNhZ2UuCiogICAqKlZhcmlhdGlvbnMgb3IgU2ltaWxhciBGdW5jdGlvbnM6KiogV2UgbWlnaHQgYmUgbG9va2luZyBmb3Igc2ltaWxhciBmdW5jdGlvbnMsIG9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIHByaW1hcnkgZnVuY3Rpb24uCgpUaGUgbGFjayBvZiB0aGUgYF5gIG1pZ2h0IGJlIGJlY2F1c2Ugd2Ugd2FudCB0byBzZWUgdGhlIHZhcmlvdXMgdXNlcywgaW4gcGFydGljdWxhciB3aGVuIHRoZSBwYXJhbWV0ZXIgb3JkZXIgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQyX3hhdHRyX3NldDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQyL3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0Mi94YXR0ci5jLTkxLVxuZnMvZXh0Mi94YXR0ci5jOjkyOnN0YXRpYyBpbnQgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbmZzL2V4dDIveGF0dHIuYy05My1cdFx0XHQgICBzdHJ1Y3QgZXh0Ml94YXR0cl9oZWFkZXIgKik7XG4tLVxuZnMvZXh0Mi94YXR0ci5jPTQwNj1leHQyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5mcy9leHQyL3hhdHRyLmMtNjM1LVx0XHRcdHVubG9ja19idWZmZXIoYmgpOyAgLyogd2Ugd2VyZSBtb2RpZnlpbmcgaW4tcGxhY2UuICovXG5mcy9leHQyL3hhdHRyLmM6NjM2Olx0XHRlcnJvciA9IGV4dDJfeGF0dHJfc2V0Mihpbm9kZSwgYmgsIE5VTEwpO1xuZnMvZXh0Mi94YXR0ci5jLTYzNy1cdH0gZWxzZSB7XG4tLVxuZnMvZXh0Mi94YXR0ci5jLTY0MC1cdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTsgIC8qIHdlIHdlcmUgbW9kaWZ5aW5nIGluLXBsYWNlLiAqL1xuZnMvZXh0Mi94YXR0ci5jOjY0MTpcdFx0ZXJyb3IgPSBleHQyX3hhdHRyX3NldDIoaW5vZGUsIGJoLCBoZWFkZXIpO1xuZnMvZXh0Mi94YXR0ci5jLTY0Mi1cdH1cbi0tXG5mcy9leHQyL3hhdHRyLmM9NzA1PXN0YXRpYyBpbnRcbmZzL2V4dDIveGF0dHIuYzo3MDY6ZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuZnMvZXh0Mi94YXR0ci5jLTcwNy1cdFx0c3RydWN0IGV4dDJfeGF0dHJfaGVhZGVyICpoZWFkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTk1CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBleHQyX3hhdHRyX3NldDJgIFN0YXRpYyBGdW5jdGlvbiBhbmQgTWV0YWRhdGEgSGFuZGxpbmcqKgoKT2theSwgc28gYGV4dDJfeGF0dHJfc2V0MmAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHNwZWNpZmljIHNjb3BlLCBsaWtlbHkgbGltaXRpbmcgaXRzIGRpcmVjdCB1c2FnZSBvdXRzaWRlIHRoZSBzb3VyY2UgZmlsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgd2hlcmUgZG9lcyB0aGlzIGZpdCB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZSBleHQ0IGZpbGUgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCBob3cgdGhhdCBpbXBhY3RzIG92ZXJhbGwgbWV0YWRhdGEgY29uc2lzdGVuY3kuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgZm9yIG1ldGFkYXRhIHdyaXRlIG9wZXJhdGlvbnMgdG8gYmUgZGVhbHQgd2l0aC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBsb29rIGludG8gYGZzL2V4dDQvZXh0NF9qYmQyLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBkaXJ0eSBtZXRhZGF0YS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB0aWVzIGludG8gdGhlIGpvdXJuYWxpbmcgcHJvY2Vzcy4gSSBzdXNwZWN0IGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBtaWdodCBiZSB0aGUgY29yZSBsb2dpYyBmb3IgZW5zdXJpbmcgYXRvbWljaXR5IHdoZW4gd3JpdGluZyBhdHRyaWJ1dGUgZGF0YSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IGlzIHJlbGF0ZWQgdG8gamJkMiwgd2hpY2ggaW5kaWNhdGVzIGEgam91cm5hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfamJkMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9qYmQyLmM9MzUzPXN0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmMtMzY3LVxuZnMvZXh0NC9leHQ0X2piZDIuYzozNjg6aW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuZnMvZXh0NC9leHQ0X2piZDIuYy0zNjktXHRcdFx0XHQgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIERpcnR5IE1ldGFkYXRhIEhhbmRsZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgLiBJdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyB0cmFjZSB0aGlzIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBiZSBiZWluZyB1c2VkLCBhbmQgd2hhdCBjb250ZXh0IHRoYXQgaXMuCgpUaGUgbmV4dCBvYnZpb3VzIHRoaW5nIHRvIGNoZWNrIGlzIGB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkYCBpbiBgZnMvZXh0NC9tbXAuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBoYW5kbGluZyBtaWdodCBiZS4gSSYjMzk7ZCBleHBlY3QgdGhhdCBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiB3cml0aW5nIG1ldGFkYXRhLCBwYXJ0aWN1bGFybHkgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSAmIzM0O2RpcnR5JiMzNDsgaGFuZGxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRoYXdpbmcgcHJvY2VzcyBpcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZ2xvYmFsIGhhbmRsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGFuIGFyZWEgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgaW4gdGhlIGZpbGVzeXN0ZW0sIGVzcGVjaWFsbHkgYXJvdW5kIG1ldGFkYXRhIGNvbnNpc3RlbmN5IGR1cmluZyByZWNvdmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfbW1wX2Jsb2NrX3RoYXdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvbW1wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9tbXAuYz0zMD1zdGF0aWMgdm9pZCBleHQ0X21tcF9jc3VtX3NldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wKVxuLS1cbmZzL2V4dDQvbW1wLmMtNDEtICovXG5mcy9leHQ0L21tcC5jOjQyOnN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9tbXAuYy00My1cdFx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9leHQ0L21tcC5jPTU3PXN0YXRpYyBpbnQgd3JpdGVfbW1wX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvZXh0NC9tbXAuYy02My1cdHNjb3BlZF9ndWFyZChzdXBlcl93cml0ZSwgc2IpXG5mcy9leHQ0L21tcC5jOjY0Olx0XHRyZXR1cm4gd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZChzYiwgYmgpO1xuZnMvZXh0NC9tbXAuYy02NS19XG4tLVxuZnMvZXh0NC9tbXAuYz0yNzQ9aW50IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbW1wLmMtMzUzLVx0ICovXG5mcy9leHQ0L21tcC5jOjM1NDpcdHJldHZhbCA9IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc2IsIGJoKTtcbmZzL2V4dDQvbW1wLmMtMzU1LVx0aWYgKHJldHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgRnVuY3Rpb24qKgoKSG1tLCBzbyBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgaXMgbWFya2VkIGFzIGEgYHN0YXRpY2AgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBpdHMgc2NvcGUuIEl0JiMzOTtzIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2Ugb3V0c2lkZSBpdHMgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhIGhlbHBlciBmdW5jdGlvbiB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBHRlMyIGZpbGUgc3lzdGVtLiBOb3csIGdpdmVuIHRoZSAmIzM0O3RoYXdlZCYjMzQ7IHBhcnQgb2YgdGhlIG5hbWUsIGl0IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgZmlsZSBzeXN0ZW0gd3JpdGVzIGJsb2NrcyB3aGVuIHRoZXkgaGF2ZSBiZWVuICYjMzQ7dGhhd2VkJiMzNDsgYWZ0ZXIgYSBwb3RlbnRpYWwgc25hcHNob3QgY3JlYXRpb24sIG9yIGEgc2ltaWxhciBvcGVyYXRpb24uIFRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIHRoYXQgbG9naWMsIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHdpdGggYGdmczJfcGluYAoKSSBrbm93IHRoYXQgYGdmczJfcGluYCBpcyBsaWtlbHkgaW1wb3J0YW50IHRvIGludmVzdGlnYXRlIHRoaXMsIHNpbmNlIEkgYW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRpbmcgb2YgZGF0YSB0byB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGlzIGBnZnMyX3BpbmAgaXMgY29tbW9ubHkgdXNlZCB0byAmIzM0O3BpbiYjMzQ7IGNlcnRhaW4gYmxvY2tzIG9mIHRoZSBmaWxlIHN5c3RlbSwgc28gdGhhdCB0aGV5JiMzOTtyZSBub3Qgc3dhcHBlZCBvdXQgb2YgbWVtb3J5LiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgbWV0YWRhdGEuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8ganVtcCBpbnRvIHRoZSBgZnMvZ2ZzMi9sb3BzLmNgIHNvdXJjZSBjb2RlIGFuZCBzZWUgaG93IGBnZnMyX3BpbmAgaXMgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGF0IHJlc291cmNlcyBpdCBhY3F1aXJlcyBhbmQgcmVsZWFzZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgY29uc2lzdGVuY3kgYW5kIGhvdyB0aGUgdGhhd2luZyBtZWNoYW5pc20gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKiBnZnMyX3BpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvbG9wcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2dmczIvbG9wcy5jLTQxLSAqL1xuZnMvZ2ZzMi9sb3BzLmM6NDI6dm9pZCBnZnMyX3BpbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmZzL2dmczIvbG9wcy5jLTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgUG90ZW50aWFsIElzc3VlcyBpbiB0aGUgR0ZTMiBGaWxlc3lzdGVtKioKCkFscmlnaHQsIHNvIGBnZnMyX3BpbmAgaXMgZmxhZ2dlZCBhcyBhIGdsb2JhbCB2YXJpYWJsZS4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBzb21ldGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZTsgZ2xvYmFscyBpbiBhIGNvbmN1cnJlbnQgZW52aXJvbm1lbnQgbGlrZSBhIGZpbGVzeXN0ZW0gYXJlIG9mdGVuIGEgc291cmNlIG9mIGNvbnRlbnRpb24gYW5kIHBvdGVudGlhbCBsb2NraW5nIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzZSBhbmQgc2NvcGUgYmV0dGVyLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGdsb2JhbCBtaWdodCBiZSBpbnZvbHZlZCwgSSBzaG91bGQgZm9jdXMgb24gYSBsaWtlbHkgd3JpdGUgcGF0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbG9vayBhdCBob3cgZGF0YSBnZXRzIHdyaXR0ZW4gdG8gYW4gaW5vZGUuIGBfX29tZnNfd3JpdGVfaW5vZGVgIGluIGBmcy9vbWZzL2lub2RlLmNgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIHdpdGhpbiB0aGUgT01GUyBmaWxlc3lzdGVtIGNvbnRleHQsIGFzc3VtaW5nIGBvbWZzYCBpcyByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBvbi1kaXNrIHN0cnVjdHVyZS4gSXQgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBpbm9kZSBvbiBkaXNrIHdoZW4gYSB3cml0ZSBvY2N1cnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0byBzZWUgaG93IGBnZnMyX3BpbmAgbWlnaHQgYmUgdG91Y2hlZCBkdXJpbmcgYSB3cml0ZSBvcGVyYXRpb24uIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIGltcGxpY2F0aW9ucyBpZiBpdHMgZ2xvYmFsIG5hdHVyZSBpcyBwb29ybHkgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19vbWZzX3dyaXRlX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb21mcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29tZnMvaW5vZGUuYz04NT1zdGF0aWMgdm9pZCBvbWZzX3VwZGF0ZV9jaGVja3N1bXMoc3RydWN0IG9tZnNfaW5vZGUgKm9pKVxuLS1cbmZzL29tZnMvaW5vZGUuYy0xMDMtXG5mcy9vbWZzL2lub2RlLmM6MTA0OnN0YXRpYyBpbnQgX19vbWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuZnMvb21mcy9pbm9kZS5jLTEwNS17XG4tLVxuZnMvb21mcy9pbm9kZS5jPTE3ND1zdGF0aWMgaW50IG9tZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG5mcy9vbWZzL2lub2RlLmMtMTc1LXtcbmZzL29tZnMvaW5vZGUuYzoxNzY6XHRyZXR1cm4gX19vbWZzX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbmZzL29tZnMvaW5vZGUuYy0xNzctfVxuLS1cbmZzL29tZnMvaW5vZGUuYz0xNzk9aW50IG9tZnNfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvb21mcy9pbm9kZS5jLTE4MC17XG5mcy9vbWZzL2lub2RlLmM6MTgxOlx0cmV0dXJuIF9fb21mc193cml0ZV9pbm9kZShpbm9kZSwgMSk7XG5mcy9vbWZzL2lub2RlLmMtMTgyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGFkZnNfZGlyX3N5bmNgIEZvbGxvd2luZyBhIExvb2sgYXQgYSBTdGF0aWMgSW5vZGUgV3JpdGUgRnVuY3Rpb24qKgoKUmlnaHQsIGBfX29tZnNfd3JpdGVfaW5vZGVgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZCBhbmQgaXMgbGlrZWx5IHBhcnQgb2YgYSBtb3JlIGxpbWl0ZWQgc2NvcGUgd2l0aGluIHRoZSBPTUZTIGZpbGVzeXN0ZW0uIEdpdmVuIHRoYXQgY29udGV4dCwgSSYjMzk7bSBub3cgY3VyaW91cyBhYm91dCBkaXJlY3Rvcnkgc3luY2hyb25pemF0aW9uIHdpdGhpbiBhIGRpZmZlcmVudCBmaWxlc3lzdGVtLCBsZXQmIzM5O3Mgc2VlLCB0aGUgQURGUyBmaWxlc3lzdGVtLiBNeSBpbnRlbnRpb24gaXMgdG8gY29udHJhc3QgaG93IHRoZXkgYXBwcm9hY2ggaW5vZGUgd3JpdGluZyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgdXBkYXRlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGFkZnNfZGlyX3N5bmNgIGZ1bmN0aW9uLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9hZGZzL2Rpci5jYCBhbmQgZGlnIGluLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHVzZWZ1bCBpbnNpZ2h0IGludG8gYSBkaWZmZXJlbnQgYXBwcm9hY2ggZm9yIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgcmVsZXZhbnQgZ2l2ZW4gdGhlIHByaW9yIGV4YW1pbmF0aW9uIG9mIGEgc3RhdGljLCBsaWtlbHkgaW50ZXJuYWwsIHdyaXRlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGZzX2Rpcl9zeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWRmcy9kaXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZGZzL2Rpci5jPTE3Nz1zdGF0aWMgdm9pZCBhZGZzX2Rpcl9tYXJrX2RpcnR5KHN0cnVjdCBhZGZzX2RpciAqZGlyKVxuLS1cbmZzL2FkZnMvZGlyLmMtMTg1LVxuZnMvYWRmcy9kaXIuYzoxODY6c3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxuZnMvYWRmcy9kaXIuYy0xODcte1xuLS1cbmZzL2FkZnMvZGlyLmM9Mjc2PWFkZnNfZGlyX3VwZGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9iaiwgaW50IHdhaXQpXG4tLVxuZnMvYWRmcy9kaXIuYy0zMDQtXHRpZiAod2FpdClcbmZzL2FkZnMvZGlyLmM6MzA1Olx0XHRyZXQgPSBhZGZzX2Rpcl9zeW5jKFx1MDAyNmRpcik7XG5mcy9hZGZzL2Rpci5jLTMwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyOTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipTdGF0aWMgQW5hbHlzaXMgb2YgQURGUyBEaXJlY3RvcnkgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBhZGZzX2Rpcl9zeW5jYC4gRmlyc3Qgb2JzZXJ2YXRpb24g4oCTIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTm93LCB0byB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIGFuZCBqb3VybmFsIG1hbmFnZW1lbnQgaW4gdGhlIE9DRlMyIGZpbGUgc3lzdGVtLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYF9fb2NmczJfam91cm5hbF9hY2Nlc3NgIGxvY2F0ZWQgaW4gYGZzL29jZnMyL2pvdXJuYWwuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byBob3cgYGFkZnNfZGlyX3N5bmNgIG1pZ2h0IGJlIGludGVyYWN0aW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB3aXRoIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbSBkdXJpbmcgc3luY2hyb25pemF0aW9uIGV2ZW50cy4gVW5kZXJzdGFuZGluZyB0aGUgam91cm5hbCBpbnRlcmFjdGlvbnMgaXMgcGFyYW1vdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX29jZnMyX2pvdXJuYWxfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvam91cm5hbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2pvdXJuYWwuYz01Mjc9c3RhdGljIHZvaWQgb2NmczJfZnJvemVuX3RyaWdnZXIoc3RydWN0IGpiZDJfYnVmZmVyX3RyaWdnZXJfdHlwZSAqdHJpZ2dlcnMsXG4tLVxuZnMvb2NmczIvam91cm5hbC5jLTUzNS1cdCAqIG11c3QgdW5jb25kaXRpb25hbGx5IGNvbXB1dGUgdGhlIGVjYyBkYXRhLlxuZnMvb2NmczIvam91cm5hbC5jOjUzNjpcdCAqIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoKSB3aWxsIG9ubHkgc2V0IHRoZSB0cmlnZ2VycyBpZlxuZnMvb2NmczIvam91cm5hbC5jLTUzNy1cdCAqIG1ldGFlY2MgaXMgZW5hYmxlZC5cbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmM9NTQ2PXN0YXRpYyB2b2lkIG9jZnMyX2RxX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy01NTUtXHQgKiBtdXN0IHVuY29uZGl0aW9uYWxseSBjb21wdXRlIHRoZSBlY2MgZGF0YS5cbmZzL29jZnMyL2pvdXJuYWwuYzo1NTY6XHQgKiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKCkgd2lsbCBvbmx5IHNldCB0aGUgdHJpZ2dlcnMgaWZcbmZzL29jZnMyL2pvdXJuYWwuYy01NTctXHQgKiBtZXRhZWNjIGlzIGVuYWJsZWQuXG4tLVxuZnMvb2NmczIvam91cm5hbC5jPTU2Nj1zdGF0aWMgdm9pZCBvY2ZzMl9kYl9mcm96ZW5fdHJpZ2dlcihzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2Vycyxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTc1LVx0ICogbXVzdCB1bmNvbmRpdGlvbmFsbHkgY29tcHV0ZSB0aGUgZWNjIGRhdGEuXG5mcy9vY2ZzMi9qb3VybmFsLmM6NTc2Olx0ICogX19vY2ZzMl9qb3VybmFsX2FjY2VzcygpIHdpbGwgb25seSBzZXQgdGhlIHRyaWdnZXJzIGlmXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTc3LVx0ICogbWV0YWVjYyBpcyBlbmFibGVkLlxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz02NDc9dm9pZCBvY2ZzMl9pbml0aWFsaXplX2pvdXJuYWxfdHJpZ2dlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtNjU1LVxuZnMvb2NmczIvam91cm5hbC5jOjY1NjpzdGF0aWMgaW50IF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL2pvdXJuYWwuYy02NTctXHRcdFx0XHQgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03MzQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03MzgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzM5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzQwLVx0XHRcdFx0ICAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfREldLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03NDQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03NDgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzQ5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzUwLVx0XHRcdFx0ICAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRUJdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03NTQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03NTgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzU5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzYwLVx0XHRcdFx0ICAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfUkJdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03NjQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2dkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03NjgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzY5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzcwLVx0XHRcdFx0ICAgICBcdTAwMjZvc2ItXHUwMDNlc19qb3VybmFsX3RyaWdnZXJzW09DRlMyX0pUUl9HRF0sXG4tLVxuZnMvb2NmczIvam91cm5hbC5jPTc3ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXG4tLVxuZnMvb2NmczIvam91cm5hbC5jLTc3OC1cbmZzL29jZnMyL2pvdXJuYWwuYzo3Nzk6XHRyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCxcbmZzL29jZnMyL2pvdXJuYWwuYy03ODAtXHRcdFx0XHQgICAgIFx1MDAyNm9zYi1cdTAwM2VzX2pvdXJuYWxfdHJpZ2dlcnNbT0NGUzJfSlRSX0RCXSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmM9Nzg0PWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzg4LVxuZnMvb2NmczIvam91cm5hbC5jOjc4OTpcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLFxuZnMvb2NmczIvam91cm5hbC5jLTc5MC1cdFx0XHRcdCAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfWEJdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz03OTQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy03OTgtXG5mcy9vY2ZzMi9qb3VybmFsLmM6Nzk5Olx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXG5mcy9vY2ZzMi9qb3VybmFsLmMtODAwLVx0XHRcdFx0ICAgICBcdTAwMjZvc2ItXHUwMDNlc19qb3VybmFsX3RyaWdnZXJzW09DRlMyX0pUUl9EUV0sXG4tLVxuZnMvb2NmczIvam91cm5hbC5jPTgwND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXG4tLVxuZnMvb2NmczIvam91cm5hbC5jLTgwOC1cbmZzL29jZnMyL2pvdXJuYWwuYzo4MDk6XHRyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCxcbmZzL29jZnMyL2pvdXJuYWwuYy04MTAtXHRcdFx0XHQgICAgIFx1MDAyNm9zYi1cdTAwM2VzX2pvdXJuYWxfdHJpZ2dlcnNbT0NGUzJfSlRSX0RSXSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmM9ODE0PWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSxcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmMtODE4LVxuZnMvb2NmczIvam91cm5hbC5jOjgxOTpcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLFxuZnMvb2NmczIvam91cm5hbC5jLTgyMC1cdFx0XHRcdCAgICAgXHUwMDI2b3NiLVx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRExdLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYz04MjQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxuLS1cbmZzL29jZnMyL2pvdXJuYWwuYy04MjYte1xuZnMvb2NmczIvam91cm5hbC5jOjgyNzpcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLCBOVUxMLCB0eXBlKTtcbmZzL29jZnMyL2pvdXJuYWwuYy04MjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMyMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIE9DRlMyIGFuZCBHRlMyIEpvdXJuYWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgb2NmczJgIGNvZGUgYW5kIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBfX29jZnMyX2pvdXJuYWxfYWNjZXNzYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLCB3aGljaCBpcyBmYWlybHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIEhvd2V2ZXIsIEkgYWxzbyBzZWUgdGhpcyBvdGhlciwgc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9uLCBgb2NmczJfam91cm5hbF9hY2Nlc3NgLCBhbmQgdGhhdCYjMzk7cyBnbG9iYWwuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uIG9yIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgc2NvcGUgd2hlbiBJIGNvbWUgYmFjayBhbmQgYXVkaXQgdGhpcyBjb2RlIGxhdGVyLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlIEdGUzIgZmlsZSBzeXN0ZW0gaXMgc3ByaW5naW5nIHRvIG1pbmQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaG93IEdGUzIgaGFuZGxlcyBzb21ldGhpbmcgYW5hbG9nb3VzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgR0ZTMiBjb2RlIGJhc2Ugbm93LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgYGdmczJfYWlsMV9lbXB0eV9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgZnMvZ2ZzMi9sb2cuY2AuIFNlZWluZyBob3cgdGhlIEdGUzIgYXV0aG9ycyBoYW5kbGUgcmVsYXRlZCBjYXNlcyBtYXkgcHJvdmlkZSBzb21lIHVzZWZ1bCBpbnNpZ2h0cyBhbmQgYmVzdC1wcmFjdGljZSBjb25zaWRlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2ZzMl9haWwxX2VtcHR5X29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvbG9nLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9sb2cuYz0yNzg9c3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfdHIoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3RyYW5zICp0cixcbi0tXG5mcy9nZnMyL2xvZy5jLTI5MS0vKipcbmZzL2dmczIvbG9nLmM6MjkyOiAqIGdmczJfYWlsMV9lbXB0eV9vbmUgLSBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zIGluIHRoZSBBSUwgaGFzIGJlZW4gc3luY2VkXG5mcy9nZnMyL2xvZy5jLTI5My0gKiBAc2RwOiB0aGUgZmlsZXN5c3RlbVxuLS1cbmZzL2dmczIvbG9nLmMtMjk5LVxuZnMvZ2ZzMi9sb2cuYzozMDA6c3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXG5mcy9nZnMyL2xvZy5jLTMwMS1cdFx0XHRcdGludCAqbWF4X3Jldm9rZXMpXG4tLVxuZnMvZ2ZzMi9sb2cuYz0zNTI9c3RhdGljIGJvb2wgZ2ZzMl9haWwxX2VtcHR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgbWF4X3Jldm9rZXMpXG4tLVxuZnMvZ2ZzMi9sb2cuYy0zNTktXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZSh0ciwgcywgXHUwMDI2c2RwLVx1MDAzZXNkX2FpbDFfbGlzdCwgdHJfbGlzdCkge1xuZnMvZ2ZzMi9sb2cuYzozNjA6XHRcdGlmICghZ2ZzMl9haWwxX2VtcHR5X29uZShzZHAsIHRyLCBcdTAwMjZtYXhfcmV2b2tlcykgXHUwMDI2XHUwMDI2IG9sZGVzdF90cilcbmZzL2dmczIvbG9nLmMtMzYxLVx0XHRcdGxpc3RfbW92ZShcdTAwMjZ0ci1cdTAwM2V0cl9saXN0LCBcdTAwMjZzZHAtXHUwMDNlc2RfYWlsMl9saXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwODgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBnZnMyX2FpbDFfZW1wdHlfb25lYCoqCgpSaWdodCwgYGdmczJfYWlsMV9lbXB0eV9vbmVgIGlzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MgYWJvdXQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgbGlrZWx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBHRlMyIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGpvdXJuYWwuIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBqYmQyX2ZjX3dhaXRfYnVmc2AgaW4gYGZzL2piZDIvam91cm5hbC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYW5kIGhvdyB0aGlzIHN0YXRpYyB2YXJpYWJsZSBwbGF5cyBhIHJvbGUgaW4gZmxvdyBjb250cm9sIHdpdGhpbiB0aGUgam91cm5hbCwgYW5kIHBhcnRpY3VsYXJseSwgd2hhdCBpbXBhY3QgaXQgaGFzIG9uIGJ1ZmZlciB3YWl0aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBsb3ctbGV2ZWwgY2FsbHMgY29vcmRpbmF0ZSB3aXRoLCBvciBwb3RlbnRpYWxseSBpbmZsdWVuY2UsIEFJTCBvcGVyYXRpb25zIHdpdGhpbiBHRlMyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtqYmQyX2ZjX3dhaXRfYnVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2piZDIvam91cm5hbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2piZDIvam91cm5hbC5jPTg2NT1FWFBPUlRfU1lNQk9MKGpiZDJfZmNfZ2V0X2J1Zik7XG4tLVxuZnMvamJkMi9qb3VybmFsLmMtODcwLSAqL1xuZnMvamJkMi9qb3VybmFsLmM6ODcxOmludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcbmZzL2piZDIvam91cm5hbC5jLTg3Mi17XG4tLVxuZnMvamJkMi9qb3VybmFsLmMtODk4LX1cbmZzL2piZDIvam91cm5hbC5jOjg5OTpFWFBPUlRfU1lNQk9MKGpiZDJfZmNfd2FpdF9idWZzKTtcbmZzL2piZDIvam91cm5hbC5jLTkwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgamJkMl9mY193YWl0X2J1ZnNgIFVzYWdlKioKCkFscmlnaHQsIHNvIGBqYmQyX2ZjX3dhaXRfYnVmc2AgaXMgYSBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gR2xvYmFsIHZhcmlhYmxlcyBhbHdheXMgcmVxdWlyZSBleHRyYSBzY3J1dGlueSBpbiB0aGlzIGNvbnRleHQuIExldCBtZSBzZWUgd2hlcmUgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUgSkJEMiBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGpiZDJfZnJlZXplX2poX2RhdGFgIGZ1bmN0aW9uIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBhIHRyYW5zYWN0aW9uIG1pZ2h0IHN0YWxsIHdhaXRpbmcgZm9yIGJ1ZmZlcnMgdG8gZnJlZSBiZWZvcmUgaXQgY2FuIGJlIGZyb3plbi4gSSB3aWxsIGNoZWNrIHRoZSBgZnMvamJkMi90cmFuc2FjdGlvbi5jYCBmaWxlIGFzIHRoZSBsaWtlbHkgYXJlYSB0byBmaW5kIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBkZWFkbG9jayBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2piZDJfZnJlZXplX2poX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL3RyYW5zYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamJkMi90cmFuc2FjdGlvbi5jPTkwOD1zdGF0aWMgdm9pZCB3YXJuX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTctLyogQ2FsbCB0X2Zyb3plbiB0cmlnZ2VyIGFuZCBjb3B5IGJ1ZmZlciBkYXRhIGludG8gamgtXHUwMDNlYl9mcm96ZW5fZGF0YS4gKi9cbmZzL2piZDIvdHJhbnNhY3Rpb24uYzo5MTg6c3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaClcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTkte1xuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz05NDg9ZG9fZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTEzOS1cdFx0ZnJvemVuX2J1ZmZlciA9IE5VTEw7XG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTE0MDpcdFx0amJkMl9mcmVlemVfamhfZGF0YShqaCk7XG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTE0MS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSkJEMiBBbmFseXNpczogUGlucG9pbnRpbmcgdGhlIEZyZWV6ZSoqCgpSaWdodCwgYGpiZDJfZnJlZXplX2poX2RhdGFgLiBUaGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYuIExldCBtZSBqdXN0IGNvbmZpcm0gd2hlcmUgdGhhdCYjMzk7cyBjYWxsZWQgZnJvbS4uLiBPa2F5LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBsb2NraW5nIHNjaGVtZSBpbiB0aGUgam91cm5hbGluZyBsYXllciBpcyBsaWtlbHkgdG8gYmUgdGhlIHJvb3Qgb2YgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWUsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaW50ZXJhY3RzIHdpdGggd3JpdGVzIGFuZCBmcmVlemluZyB0aGUgam91cm5hbC4KCkxldCYjMzk7cyBkaXZlIGludG8gYGRvX2dldF93cml0ZV9hY2Nlc3NgIHdpdGhpbiBgZnMvamJkMi90cmFuc2FjdGlvbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFjcXVpcmluZyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGpvdXJuYWwuIEl0JiMzOTtzIGNydWNpYWwgdG8gc2VlIGlmIGl0JiMzOTtzIGNvbnRyaWJ1dGluZyB0byBhbnkgbG9jayBjb250ZW50aW9uIG9yIGJsb2NraW5nIHJlbGF0ZWQgdG8gdGhlIGZyZWV6ZSBvcGVyYXRpb24uIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgY29tbW9uIGZ1bmN0aW9uIGlzIGNhdXNpbmcgYm90aCBpc3N1ZXMuIFRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGFuZCB0aGUgam91cm5hbCBmcmVlemUgbWVjaGFuaXNtIGFyZSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgcGF0aCB3aXRoIHNvbWUgZm9jdXNlZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2dldF93cml0ZV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL3RyYW5zYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamJkMi90cmFuc2FjdGlvbi5jPTk0Nz1zdGF0aWMgaW50XG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6OTQ4OmRvX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGpvdXJuYWxfaGVhZCAqamgsXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtOTQ5LVx0XHRcdGludCBmb3JjZV9jb3B5KVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0xMTY5PXN0YXRpYyBib29sIGpiZDJfd3JpdGVfYWNjZXNzX2dyYW50ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIwOS1cdCAqIGRvZXNuJiMzOTt0IGdldCByZW9yZGVyZWQgYW5kIHNlZSBpbmNvbnNpc3RlbnQgc3RhdGUgb2YgY29uY3VycmVudFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjEyMTA6XHQgKiBkb19nZXRfd3JpdGVfYWNjZXNzKCkuXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIxMS1cdCAqL1xuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0xMjMzPWludCBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xMjYyLVx0ICogY29tcGxldGVzIGFueSBvdXRzdGFuZGluZyBJTyBiZWZvcmUgcHJvY2VlZGluZy4gKi9cbmZzL2piZDIvdHJhbnNhY3Rpb24uYzoxMjYzOlx0cmMgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDApO1xuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyNjQtXHRqYmQyX2pvdXJuYWxfcHV0X2pvdXJuYWxfaGVhZChqaCk7XG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTE0MDE9aW50IGpiZDJfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTQyMC1cdCAqL1xuZnMvamJkMi90cmFuc2FjdGlvbi5jOjE0MjE6XHRlcnIgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDEpO1xuZnMvamJkMi90cmFuc2FjdGlvbi5jLTE0MjItXHRpZiAoZXJyKVxuLS1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0yMTM3PXN0YXRpYyB2b2lkIF9famJkMl9qb3VybmFsX3VuZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpXG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTIxNzItICogV2hvIGVsc2UgaXMgYWZmZWN0ZWQgYnkgdGhpcz8gIGhtbS4uLiAgUmVhbGx5IHRoZSBvbmx5IGNvbnRlbmRlclxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjIxNzM6ICogaXMgZG9fZ2V0X3dyaXRlX2FjY2VzcygpIC0gaXQgY291bGQgYmUgbG9va2luZyBhdCB0aGUgYnVmZmVyIHdoaWxlXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjE3NC0gKiBqb3VybmFsX3RyeV90b19mcmVlX2J1ZmZlcigpIGlzIGNoYW5naW5nIGl0cyBzdGF0ZS4gIEJ1dCB0aGF0XG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTI1MzY9dm9pZCBfX2piZDJfam91cm5hbF9maWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1Ny1cdFx0ICogaW5zdGVhZCBvZiBidWZmZXJfZGlydHkuIFdlIHNob3VsZCBub3Qgc2VlIGEgZGlydHkgYml0IHNldFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjI1NTg6XHRcdCAqIGhlcmUgYmVjYXVzZSB3ZSBjbGVhciBpdCBpbiBkb19nZXRfd3JpdGVfYWNjZXNzIGJ1dCBlLmcuXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1OS1cdFx0ICogdHVuZTJmcyBjYW4gbW9kaWZ5IHRoZSBzYiBhbmQgc2V0IHRoZSBkaXJ0eSBiaXQgYXQgYW55IHRpbWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNTgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoaXMg4oCTIGEgZGlzdGlsbGVkIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFdyaXRlIEFjY2VzcyBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3cml0ZSBhY2Nlc3MgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgamJkMiBqb3VybmFsaW5nIHN5c3RlbS4gVGhlIGNvZGUgaGFzIG1lIGEgYml0IHB1enpsZWQsIHNpbmNlIGBkb19nZXRfd3JpdGVfYWNjZXNzYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIHNjb3BlZCBsb2NhbGx5LCB3aGlsZSBgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3NgIHNlZW1zIHRvIGJlIGdsb2JhbC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJIHdhbnQgdG8gY2xhcmlmeSBob3cgdGhpcyB3b3Jrcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluc2lkZSBgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3NgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaW1wbGVtZW50YXRpb24gZmlsZSBmb3IgdHJhbnNhY3Rpb25zLCB3aGljaCBzaG91bGQgYmUgYGZzL2piZDIvdHJhbnNhY3Rpb24uY2AuIEkmIzM5O2xsIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi90cmFuc2FjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2piZDIvdHJhbnNhY3Rpb24uYz0xMTY5PXN0YXRpYyBib29sIGpiZDJfd3JpdGVfYWNjZXNzX2dyYW50ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIzMi1cbmZzL2piZDIvdHJhbnNhY3Rpb24uYzoxMjMzOmludCBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgV3JpdGUgQWNjZXNzIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzc2Agd29ya3MgYXQgYSBnbG9iYWwgbGV2ZWwuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBwb3RlbnRpYWwgZm9jdXMgcG9pbnRzLCBteSBpbml0aWFsIGxpc3QgaW5jbHVkZWQgYSBsb3Qgb2YgZnVuY3Rpb25zLCBidXQgaXQmIzM5O3MgZ290dGVuIHVucnVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVyY29tcGxpY2F0ZSB0aGluZ3MgaGVyZSwgc28gSSBuZWVkIHRvIHJlZmluZSB0aGF0IGxpc3QgdG8gdGhlIG1vc3QgcmVsZXZhbnQgb3BlcmF0aW9ucy4KCkkmIzM5O20gemVyb2luZyBpbiBvbiB0aGluZ3MgdGhhdCBkaXJlY3RseSB0b3VjaCBidWZmZXIgd3JpdGVzOiBgYmhfZW5kX3dyaXRlYCwgYGJoX2VuZF9hc3luY193cml0ZWAsIHRoZSBmcmVlaW5nIG9mIGJ1ZmZlcnMgd2l0aCBgX19iZm9yZ2V0YCwgc3luY2luZyBkaXJ0eSBidWZmZXJzIHdpdGggYF9fc3luY19kaXJ0eV9idWZmZXJgLCBhbmQgdGhlIGpvdXJuYWwgd3JpdGVzIGxpa2UgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgIGFuZCBjb21taXRzIHdpdGggYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gLiBJJiMzOTtsbCBhbHNvIHdhdGNoIGBqYmQyX2ZjX3dhaXRfYnVmc2AuIFRoZW4gdGhlcmUgYXJlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgd3JpdGVzIGxpa2UgYG9jZnMyX3dyaXRlX2Jsb2NrYCwgYGZhdF9zeW5jX2Joc2AsIGBleGZhdF91cGRhdGVfYmhzYCwgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGFuZCBgZ2ZzMl9waW5gLiBJIHRoaW5rIHRoaXMgbGlzdCBjb3ZlcnMgdGhlIGhpZ2gtbGV2ZWwgd3JpdGUgcGF0aHdheXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZXNlIHdyaXRlcy4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIHJlbGV2YW50IGluY2x1ZGUgYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgRVhGQVRfRlNgLCBgQURGU19GU2AsIGBFWFQyX0ZTYCwgYW5kIGBPTUZTX0ZTYC4KCkdpdmVuIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYEpCRDJgIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBzZWxlY3RlZCB3aGVuIGBFWFQ0X0ZTYCBvciBgT0NGUzJfRlNgIGFyZSBzZWxlY3RlZCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBpbmNsdWRlIGl0IHRvIGJlIHNhZmUsIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIG5lZWQgdG8gZXhjbHVkZSBpdCBpbiBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uCgpJJiMzOTttIGFsc28gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZnMvYnVmZmVyLmNgIGZvciBga21hcF9sb2NhbF9iaGAgYW5kIGBrdW5tYXBfbG9jYWxfYmhgLCB3aGljaCBJIHJlbWVtYmVyIGFyZSBhY3R1YWxseSBpbmxpbmUgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhleSB3b3JrIGluIGNvbnRleHQgb2YgdGhlIHdyaXRlLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgYGZzL2piZDIvY29tbWl0LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNoZWNrc3VtIGZ1bmN0aW9ucywgbGlrZSBgamJkMl9jaGVja3N1bV9kYXRhYCBhbmQgYGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0YCB0aGF0IGFyZSByZWxldmFudCBoZXJlLiBUaGF0IHNob3VsZCBmaWxsIG91dCB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7amJkMl9jaGVja3N1bV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2NvbW1pdC5jPTI4Mj1zdGF0aWMgaW50IGpvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhqb3VybmFsX3QgKmpvdXJuYWwsXG4tLVxuZnMvamJkMi9jb21taXQuYy0zMjctXG5mcy9qYmQyL2NvbW1pdC5jOjMyODpzdGF0aWMgX191MzIgamJkMl9jaGVja3N1bV9kYXRhKF9fdTMyIGNyYzMyX3N1bSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmZzL2piZDIvY29tbWl0LmMtMzI5LXtcbi0tXG5mcy9qYmQyL2NvbW1pdC5jPTM3Nj12b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2piZDIvY29tbWl0LmMtNzQ0LVx0XHRcdFx0XHRjcmMzMl9zdW0gPVxuZnMvamJkMi9jb21taXQuYzo3NDU6XHRcdFx0XHRcdCAgICBqYmQyX2NoZWNrc3VtX2RhdGEoY3JjMzJfc3VtLCBiaCk7XG5mcy9qYmQyL2NvbW1pdC5jLTc0Ni1cdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgSW50ZWdyaXR5IG9mIEpvdXJuYWxpbmcgRGF0YSBTdHJ1Y3R1cmVzKioKClJpZ2h0LCBgamJkMl9jaGVja3N1bV9kYXRhYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBob2xkcyBjb25zdGFudHMgb3IgcG90ZW50aWFsbHkgcHJlLWNhbGN1bGF0ZWQgdmFsdWVzIHJlbGF0ZWQgdG8gY2hlY2tzdW0gY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgamJkMiBqb3VybmFsaW5nIHN5c3RlbS4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgYSBmaXhlZCBwYXJ0IG9mIHRoZSBkYXRhIGludGVncml0eSBwcm9jZXNzLiBOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzIHRvIGhvdyB0aG9zZSBjaGVja3N1bXMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBhcHBsaWVkIGR1cmluZyB0aGUgam91cm5hbCB1cGRhdGUgcHJvY2Vzcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGZ1bmN0aW9uIGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCYjMzk7cyBsaWtlbHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBhY3R1YWwgY2hlY2tzdW0gdmFsdWVzIG9uIGEgYmxvY2sgdGFnLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLCBob3cgaXQgY2FsY3VsYXRlcyBhbmQgYXBwbGllcyB0aGUgY2hlY2tzdW0sIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBhcmVhcyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIGVuc3VyaW5nIGpvdXJuYWwgZGF0YSYjMzk7cyBpbnRlZ3JpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2piZDJfYmxvY2tfdGFnX2NzdW1fc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamJkMi9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2NvbW1pdC5jPTM0MD1zdGF0aWMgdm9pZCB3cml0ZV90YWdfYmxvY2soam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4tLVxuZnMvamJkMi9jb21taXQuYy0zNDctXG5mcy9qYmQyL2NvbW1pdC5jOjM0ODpzdGF0aWMgdm9pZCBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldChqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcbmZzL2piZDIvY29tbWl0LmMtMzQ5LVx0XHRcdFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIF9fdTMyIHNlcXVlbmNlKVxuLS1cbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvamJkMi9jb21taXQuYy03MDQtXHRcdHRhZy1cdTAwM2V0X2ZsYWdzID0gY3B1X3RvX2JlMTYodGFnX2ZsYWcpO1xuZnMvamJkMi9jb21taXQuYzo3MDU6XHRcdGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0KGpvdXJuYWwsIHRhZywgd2J1ZltidWZzXSxcbmZzL2piZDIvY29tbWl0LmMtNzA2LVx0XHRcdFx0XHRjb21taXRfdHJhbnNhY3Rpb24tXHUwMDNldF90aWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM3MAoJCQkJCQkJb3V0cHV0OiAzNTcKCQkJCQkJCXRob3VnaHRzOiA2MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29yZSBLZXJuZWwgQ2hhbmdlcyBXYXJyYW50IEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gc29tZSAqdmVyeSogaW1wb3J0YW50IGFyZWFzLiBUaGUgZmFjdCB0aGF0IGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAgaXMgc3RhdGljIGlzbiYjMzk7dCByZWFsbHkgcmVsZXZhbnQsIGJ1dCB3aGF0IGl0ICpkb2VzKiBjaGFuZ2UgaXMuCgpJdCYjMzk7cyBoaXR0aW5nIGBmcy9idWZmZXIuY2AsIGEgdG9uIG9mIHRoZSBmaWxlc3lzdGVtcyDigJMgYGpiZDJgLCBgZXh0NGAsIGBnZnMyYCwgYG9jZnMyYCwgYGZhdGAsIGBleGZhdGAsIGBhZGZzYCwgYGV4dDJgLCBhbmQgYG9tZnNgIOKAkyB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBvbmUgZmlsZXN5c3RlbTsgdGhpcyBpcyBicm9hZC4gSXQmIzM5O3MgdG91Y2hpbmcgaG93IHdlIGhhbmRsZSBhbmQgY2hlY2sgZm9yIHdyaXRlIGVycm9ycywgd2hpY2ggaXMgY3JpdGljYWwuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGBrbWFwX2xvY2FsX2JoYCBhbmQgYGt1bm1hcF9sb2NhbF9iaGAgd2l0aGluIGBmcy9qYmQyL2NvbW1pdC5jYCBpcyBpbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyB3ZSYjMzk7cmUgbWFwcGluZyBtZW1vcnkgZm9yIGJsb2NrIEkvTywgYW5kIHRoYXQgYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFBsdXMsIGl0JiMzOTtzIHVwZGF0aW5nIGBmcy9qYmQyL2pvdXJuYWwuY2AgdG8gaGFuZGxlIHRoZSBgYl9mcm96ZW5fZGF0YWAgc2NlbmFyaW8gd2l0aG91dCBnZW5lcmF0aW5nIGEgZmFrZSBmb2xpbywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIHRob3VnaHQgdG8gcHJldmVudCByZWdyZXNzaW9ucy4KClRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgYGZzL2J1ZmZlci5jYCB0byBkZWFsIHdpdGggYGJoLSZndDtiX2ZvbGlvID09IE5VTExgIGluIGBfX2JoX3N1Ym1pdGAsIGFuZCBlbXBsb3lpbmcgYGJpb19hZGRfdmlydF9ub2ZhaWxgIGluc3RlYWQgb2YgYGJpb19hZGRfZm9saW9fbm9mYWlsYCwgaXMgYSByZWQgZmxhZy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIGhvdyB3ZSBkZWFsIHdpdGggdGhlIGJsb2NrIGxheWVyLgoKU28sIHRoaXMgbG9va3MgbGlrZSBhIGNvcmUga2VybmVsIGNoYW5nZSwgd2l0aCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBWRlMsIGJsb2NrIGxheWVyLCAqYW5kKiBtdWx0aXBsZSBmaWxlc3lzdGVtcy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggSSBrbm93IHJlcXVpcmVzIHJpZ29yb3VzIGZ1enppbmcuIEdpdmVuIHRoZSBicmVhZHRoIG9mIHRoZSBpbXBhY3QsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpJJiMzOTtsbCBiZSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gc3ltYm9scyBsaWtlIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYF9fYmZvcmdldGAsIGBfX3N5bmNfZGlydHlfYnVmZmVyYCwgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLCBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAsIGBqYmQyX2ZjX3dhaXRfYnVmc2AsIGBvY2ZzMl93cml0ZV9ibG9ja2AsIGBmYXRfc3luY19iaHNgLCBgZXhmYXRfdXBkYXRlX2Joc2AsIGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCwgYW5kIGBnZnMyX3BpbmAuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGNvbmZpZ3VyYXRpb25zIGZvciBhbGwgdGhlIGFmZmVjdGVkIGZpbGVzeXN0ZW1zOiBgRVhUNF9GU2AsIGBKQkQyYCwgYEdGUzJfRlNgLCBgT0NGUzJfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLgoKVGhlIGNoYW5nZXMgdG91Y2ggZnVuZGFtZW50YWwgYnVmZmVyX2hlYWQgbG9naWM6IHdyaXRlIGVycm9yIHRyYWNraW5nIChgYnVmZmVyX3dyaXRlX2lvX2Vycm9yYCB2cy4gYGJ1ZmZlcl91cHRvZGF0ZWApIGFuZCB0aGUgdXNlIG9mIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGVzcGVjaWFsbHkgaW4gdGhlIGBiX2Zyb3plbl9kYXRhYCBjb250ZXh0IG9mIGpiZDIpLiBHaXZlbiB0aGUgd2lkZXNwcmVhZCBjaGFuZ2VzIGluIGNvcmUgY29tcG9uZW50cywgSSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIGEgdG9wIHByaW9yaXR5LCBhbmQgZnV6emluZyBpcyB0aGUga2V5IHRvIGNhdGNoaW5nIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBoYXZlIGNyZXB0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtKQkQyJiMzNDssCiAgICAmIzM0O0dGUzJfRlMmIzM0OywKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtFWEZBVF9GUyYjMzQ7LAogICAgJiMzNDtBREZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDJfRlMmIzM0OywKICAgICYjMzQ7T01GU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JoX2VuZF93cml0ZSYjMzQ7LAogICAgJiMzNDtiaF9lbmRfYXN5bmNfd3JpdGUmIzM0OywKICAgICYjMzQ7X19iZm9yZ2V0JiMzNDssCiAgICAmIzM0O19fc3luY19kaXJ0eV9idWZmZXImIzM0OywKICAgICYjMzQ7amJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uJiMzNDssCiAgICAmIzM0O2piZDJfZmNfd2FpdF9idWZzJiMzNDssCiAgICAmIzM0O29jZnMyX3dyaXRlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2JocyYjMzQ7LAogICAgJiMzNDtleGZhdF91cGRhdGVfYmhzJiMzNDssCiAgICAmIzM0O19fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7Z2ZzMl9waW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBidWZmZXJfaGVhZCBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3cml0ZSBlcnJvciB0cmFja2luZyAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yIHZzIGJ1ZmZlcl91cHRvZGF0ZSkgYW5kIHN1cHBvcnQgZm9yIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGUuZy4sIGZvciBiX2Zyb3plbl9kYXRhIGluIGpiZDIpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoZXh0NCwgamJkMiwgZ2ZzMiwgb2NmczIsIGZhdCwgZXhmYXQsIGFkZnMsIGV4dDIsIG9tZnMpIGFuZCB0aGUgY29yZSBibG9jayBsYXllci4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzICh2aWEgdGhlIG5ldyBrbWFwX2xvY2FsX2JoL2Jpb19hZGRfdmlydF9ub2ZhaWwgcGF0aHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0pCRDImIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O0VYRkFUX0ZTJiMzNDssCiAgICAmIzM0O0FERlNfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtPTUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmhfZW5kX3dyaXRlJiMzNDssCiAgICAmIzM0O2JoX2VuZF9hc3luY193cml0ZSYjMzQ7LAogICAgJiMzNDtfX2Jmb3JnZXQmIzM0OywKICAgICYjMzQ7X19zeW5jX2RpcnR5X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyJiMzNDssCiAgICAmIzM0O2piZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24mIzM0OywKICAgICYjMzQ7amJkMl9mY193YWl0X2J1ZnMmIzM0OywKICAgICYjMzQ7b2NmczJfd3JpdGVfYmxvY2smIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfYmhzJiMzNDssCiAgICAmIzM0O2V4ZmF0X3VwZGF0ZV9iaHMmIzM0OywKICAgICYjMzQ7X19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtnZnMyX3BpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowMTowNS41MzE3MDg2NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4NzA2NTk2NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkpCRDJcIixcbiAgICBcIkdGUzJfRlNcIixcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiLFxuICAgIFwiRVhGQVRfRlNcIixcbiAgICBcIkFERlNfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk9NRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaF9lbmRfd3JpdGVcIixcbiAgICBcImJoX2VuZF9hc3luY193cml0ZVwiLFxuICAgIFwiX19iZm9yZ2V0XCIsXG4gICAgXCJfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uXCIsXG4gICAgXCJqYmQyX2ZjX3dhaXRfYnVmc1wiLFxuICAgIFwib2NmczJfd3JpdGVfYmxvY2tcIixcbiAgICBcImZhdF9zeW5jX2Joc1wiLFxuICAgIFwiZXhmYXRfdXBkYXRlX2Joc1wiLFxuICAgIFwiX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YVwiLFxuICAgIFwiZ2ZzMl9waW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjA1LjUzMTcxNDY1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3NDkwNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjY4OGM2ODBjNTlmYzdlOWZiYzY0MzJhNWVjZjc2NDFkMDE4ZWEwM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIwOjAxOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2FkZnMvZGlyLmMgYi9mcy9hZGZzL2Rpci5jXFxuaW5kZXggMTFhZmE5ZTE1N2FhNy4uYjhjYzZhNjk3YTA1ZCAxMDA2NDRcXG4tLS0gYS9mcy9hZGZzL2Rpci5jXFxuKysrIGIvZnMvYWRmcy9kaXIuY1xcbkBAIC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxcbiBcXHRmb3IgKGkgPSBkaXItXFx1MDAzZW5yX2J1ZmZlcnMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSkge1xcbiBcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gZGlyLVxcdTAwM2ViaHNbaV07XFxuIFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKVxcbitcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuY1xcbmluZGV4IGJlOGI1N2E2MzVjZDguLjY4ZWEwZWY4NDcwZWUgMTAwNjQ0XFxuLS0tIGEvZnMvYnVmZmVyLmNcXG4rKysgYi9mcy9idWZmZXIuY1xcbkBAIC0yMDMsMTEgKzIwMywxMCBAQCB2b2lkIGJoX2VuZF93cml0ZShzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFxcdTAwMjZiaCk7XFxuIFxcbiBcXHRpZiAoc3VjY2Vzcykge1xcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0XFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0YnVmZmVyX2lvX2Vycm9yKGJoLCBcXFwiLCBsb3N0IHN5bmMgcGFnZSB3cml0ZVxcXCIpO1xcbiBcXHRcXHRtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuLVxcdFxcdGNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuIFxcdH1cXG4gXFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuIH1cXG5AQCAtNDM3LDExICs0MzYsMTAgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxcbiBcXG4gXFx0Zm9saW8gPSBiaC1cXHUwMDNlYl9mb2xpbztcXG4gXFx0aWYgKHN1Y2Nlc3MpIHtcXG4tXFx0XFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuK1xcdFxcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGJ1ZmZlcl9pb19lcnJvcihiaCwgXFxcIiwgbG9zdCBhc3luYyBwYWdlIHdyaXRlXFxcIik7XFxuIFxcdFxcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4gXFx0fVxcbiBcXG4gXFx0Zmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcXG5AQCAtNjE4LDcgKzYxNiw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcXG4gXFx0XFx0fVxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW1iLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbi1cXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXFxuK1xcdFxcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxcbiBcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHRcXHRicmVsc2UoYmgpO1xcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tYi1cXHUwMDNlbG9jayk7XFxuQEAgLTEwOTEsNiArMTA4OSw3IEBAIEVYUE9SVF9TWU1CT0woX19icmVsc2UpO1xcbiB2b2lkIF9fYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiB7XFxuIFxcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XFxuK1xcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuIFxcdHJlbW92ZV9hc3NvY19xdWV1ZShiaCk7XFxuIFxcdF9fYnJlbHNlKGJoKTtcXG4gfVxcbkBAIC0xMDk5LDEyICsxMDk4LDE2IEBAIEVYUE9SVF9TWU1CT0woX19iZm9yZ2V0KTtcXG4gc3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4gXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaylcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoYmgtXFx1MDAzZWJfZm9saW8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBleHQ0IGpvdXJuYWwgKGpiZDIpIGNhbiBzdWJtaXQgYSBidWZmZXJfaGVhZCBpdCBkaXJlY3RseSBjcmVhdGVkXFxuLVxcdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgcGFnZS4gIGZzY3J5cHQgZG9lc24ndCBjYXJlIGFib3V0IHRoZXNlLlxcbitcXHQgKiBmb3IgbWVtb3J5IHRoYXQgaXMgbm90IGluIHRoZSBwYWdlIGNhY2hlIGF0IGFsbC4gIGZzY3J5cHQgZG9lc24ndFxcbitcXHQgKiBjYXJlIGFib3V0IHRoZXNlLlxcbiBcXHQgKi9cXG4rXFx0aWYgKCFiaC1cXHUwMDNlYl9mb2xpbylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtYXBwaW5nID0gYmgtXFx1MDAzZWJfZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuIFxcdGlmICghbWFwcGluZylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRmc2NyeXB0X3NldF9iaW9fY3J5cHRfY3R4KGJpbywgbWFwcGluZy1cXHUwMDNlaG9zdCxcXG5AQCAtMTExNSw3ICsxMTE4LDYgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbiBcXHRcXHRiaW9fZW5kX2lvX3QgZW5kX2JpbylcXG4ge1xcbi1cXHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcXHUwMDI2IFJFUV9PUF9NQVNLO1xcbiBcXHRzdHJ1Y3QgYmlvICpiaW87XFxuIFxcbiBcXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcXG5AQCAtMTEyMywxMSArMTEyNSw3IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXFxuIFxcdEJVR19PTihidWZmZXJfZGVsYXkoYmgpKTtcXG4gXFx0QlVHX09OKGJ1ZmZlcl91bndyaXR0ZW4oYmgpKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE9ubHkgY2xlYXIgb3V0IGEgd3JpdGUgZXJyb3Igd2hlbiByZXdyaXRpbmdcXG4tXFx0ICovXFxuLVxcdGlmICh0ZXN0X3NldF9idWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAob3AgPT0gUkVRX09QX1dSSVRFKSlcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4rXFx0c2V0X2J1ZmZlcl9yZXEoYmgpO1xcbiBcXG4gXFx0aWYgKGJ1ZmZlcl9tZXRhKGJoKSlcXG4gXFx0XFx0b3BmIHw9IFJFUV9NRVRBO1xcbkBAIC0xMTQyLDcgKzExNDAsMTEgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJoLVxcdTAwM2ViX2Jsb2NrbnIgKiAoYmgtXFx1MDAzZWJfc2l6ZSBcXHUwMDNlXFx1MDAzZSA5KTtcXG4gXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gd3JpdGVfaGludDtcXG4gXFxuLVxcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtXFx1MDAzZWJfZm9saW8sIGJoLVxcdTAwM2ViX3NpemUsIGJoX29mZnNldChiaCkpO1xcbitcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuK1xcdFxcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgYmgtXFx1MDAzZWJfZm9saW8sIGJoLVxcdTAwM2ViX3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgYmhfb2Zmc2V0KGJoKSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YmlvX2FkZF92aXJ0X25vZmFpbChiaW8sIGJoLVxcdTAwM2ViX2RhdGEsIGJoLVxcdTAwM2ViX3NpemUpO1xcbiBcXG4gXFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBlbmRfYmlvO1xcbiBcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBiaDtcXG5AQCAtMTE1Miw3ICsxMTU0LDggQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcXG4gXFxuIFxcdGlmICh3YmMpIHtcXG4gXFx0XFx0d2JjX2luaXRfYmlvKHdiYywgYmlvKTtcXG4tXFx0XFx0d2JjX2FjY291bnRfY2dyb3VwX293bmVyKHdiYywgYmgtXFx1MDAzZWJfZm9saW8sIGJoLVxcdTAwM2ViX3NpemUpO1xcbitcXHRcXHRpZiAoYmgtXFx1MDAzZWJfZm9saW8pXFxuK1xcdFxcdFxcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVxcdTAwM2ViX2ZvbGlvLCBiaC1cXHUwMDNlYl9zaXplKTtcXG4gXFx0fVxcbiBcXG4gXFx0YmxrX2NyeXB0b19zdWJtaXRfYmlvKGJpbyk7XFxuQEAgLTE1MDgsNyArMTUxMSw3IEBAIEVYUE9SVF9TWU1CT0woZm9saW9fc2V0X2JoKTtcXG4gLyogQml0cyB0aGF0IGFyZSBjbGVhcmVkIGR1cmluZyBhbiBpbnZhbGlkYXRlICovXFxuICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXFxcXFxcbiBcXHQoMSBcXHUwMDNjXFx1MDAzYyBCSF9NYXBwZWQgfCAxIFxcdTAwM2NcXHUwMDNjIEJIX05ldyB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfUmVxIHwgXFxcXFxcbi1cXHQgMSBcXHUwMDNjXFx1MDAzYyBCSF9EZWxheSB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfVW53cml0dGVuKVxcbitcXHQgMSBcXHUwMDNjXFx1MDAzYyBCSF9EZWxheSB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfVW53cml0dGVuIHwgMSBcXHUwMDNjXFx1MDAzYyBCSF9Xcml0ZV9FSU8pXFxuIFxcbiBzdGF0aWMgdm9pZCBkaXNjYXJkX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaClcXG4ge1xcbkBAIC0yNzMzLDcgKzI3MzYsNyBAQCBpbnQgX19zeW5jX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MpXFxuIFxcbiBcXHRcXHRiaF9zdWJtaXQoYmgsIFJFUV9PUF9XUklURSB8IG9wX2ZsYWdzLCBiaF9lbmRfd3JpdGUpO1xcbiBcXHRcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4rXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jXFxuaW5kZXggNmYxMWE5NmE0ZmZhOC4uZGZkMGJiZjMxYzk0MCAxMDA2NDRcXG4tLS0gYS9mcy9leGZhdC9taXNjLmNcXG4rKysgYi9mcy9leGZhdC9taXNjLmNcXG5AQCAtMTg3LDcgKzE4Nyw3IEBAIGludCBleGZhdF91cGRhdGVfYmhzKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywgaW50IG5yX2JocywgaW50IHN5bmMpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfYmhzIFxcdTAwMjZcXHUwMDI2IHN5bmM7IGkrKykge1xcbiBcXHRcXHR3YWl0X29uX2J1ZmZlcihiaHNbaV0pO1xcbi1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXFxuK1xcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaHNbaV0pKVxcbiBcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHR9XFxuIFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuY1xcbmluZGV4IGJlNjNmODk0MDJhMzguLjM5MDA1ZWMyM2ZlNWQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi94YXR0ci5jXFxuKysrIGIvZnMvZXh0Mi94YXR0ci5jXFxuQEAgLTc2OSw3ICs3NjksNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXFxuIFxcdFxcdGlmIChJU19TWU5DKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihuZXdfYmgpO1xcbiBcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfcmVxKG5ld19iaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShuZXdfYmgpKVxcbitcXHRcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKG5ld19iaCkpXFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMgYi9mcy9leHQ0L2V4dDRfamJkMi5jXFxuaW5kZXggMDJiMDY2Mjk5MTY0OS4uZjMzOGQ2ZTNjMjlmNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jXFxuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xcbkBAIC00MTMsNyArNDEzLDcgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbiBcXHRcXHRcXHRcXHRleHQ0X2Vycm9yX2lub2RlX2Vycihpbm9kZSwgd2hlcmUsIGxpbmUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiSU8gZXJyb3Igc3luY2luZyBpdGFibGUgYmxvY2tcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXFxuaW5kZXggOGUyMjU5Nzk5NjE0ZS4uOTU5OTg4MjdmZjAxMSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG4rKysgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG5AQCAtMjAzLDE3ICsyMDMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfc2V0X3NuYXBfZXJyKGludCAqc25hcF9lcnIsIGludCBlcnIpXFxuIHN0YXRpYyB2b2lkIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbi1cXHRib29sIHVwdG9kYXRlID0gYmlvX2VuZGlvX2JoKGJpbywgXFx1MDAyNmJoKTtcXG4rXFx0Ym9vbCBzdWNjZXNzID0gYmlvX2VuZGlvX2JoKGJpbywgXFx1MDAyNmJoKTtcXG4gXFxuIFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcIlxcXCIpO1xcbi1cXHRpZiAodXB0b2RhdGUpIHtcXG4tXFx0XFx0ZXh0NF9kZWJ1ZyhcXFwiJXM6IEJsb2NrICVsbGQgdXAtdG8tZGF0ZVxcXCIsXFxuK1xcdGlmIChzdWNjZXNzKSB7XFxuK1xcdFxcdGV4dDRfZGVidWcoXFxcIiVzOiBCbG9jayAlbGxkIHdyaXR0ZW5cXFwiLFxcbiBcXHRcXHRcXHQgICBfX2Z1bmNfXywgYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuLVxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbitcXHRcXHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRleHQ0X2RlYnVnKFxcXCIlczogQmxvY2sgJWxsZCBub3QgdXAtdG8tZGF0ZVxcXCIsXFxuK1xcdFxcdGV4dDRfZGVidWcoXFxcIiVzOiBCbG9jayAlbGxkIHdyaXRlIGZhaWxlZFxcXCIsXFxuIFxcdFxcdFxcdCAgIF9fZnVuY19fLCBiaC1cXHUwMDNlYl9ibG9ja25yKTtcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0XFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xcbiBcXHR9XFxuIFxcbiBcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tbXAuYyBiL2ZzL2V4dDQvbW1wLmNcXG5pbmRleCA3Y2UzNjE0ODRiMzgyLi40YjE4ZGRlZjQ2OGQ3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbW1wLmNcXG4rKysgYi9mcy9leHQ0L21tcC5jXFxuQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLFxcbiBcXHRcXHRcXHRiaF9lbmRfd3JpdGUpO1xcbiBcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuLVxcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXFxuK1xcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXFxuaW5kZXggYmUxOGY2YjU4MTliYS4uNGE0Y2QwMTExZTQ3YSAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbWlzYy5jXFxuKysrIGIvZnMvZmF0L21pc2MuY1xcbkBAIC0zNTYsNyArMzU2LDcgQEAgaW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfYmhzOyBpKyspIHtcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmhzW2ldKTtcXG4tXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaHNbaV0pKVxcbitcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmhzW2ldKSlcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gXFx0fVxcbiBcXHRyZXR1cm4gZXJyO1xcbmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuY1xcbmluZGV4IDc4YmJhOGNjMTBiOGYuLmUzZTBkY2IxZjU2NzMgMTAwNjQ0XFxuLS0tIGEvZnMvZ2ZzMi9sb2cuY1xcbisrKyBiL2ZzL2dmczIvbG9nLmNcXG5AQCAtMTA3LDcgKzEwNyw3IEBAIF9fYWNxdWlyZXMoXFx1MDAyNnNkcC1cXHUwMDNlc2RfYWlsX2xvY2spXFxuIFxcdFxcdGdmczJfYXNzZXJ0KHNkcCwgYmQtXFx1MDAzZWJkX3RyID09IHRyKTtcXG4gXFxuIFxcdFxcdGlmICghYnVmZmVyX2J1c3koYmgpKSB7XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfdXB0b2RhdGUoYmgpKSB7XFxuK1xcdFxcdFxcdGlmICghYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbiBcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmJkLVxcdTAwM2ViZF9haWxfc3RfbGlzdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHItXFx1MDAzZXRyX2FpbDJfbGlzdCk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXFxuIFxcdFxcdFxcdGFjdGl2ZV9jb3VudCsrO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFjbXB4Y2hnKFxcdTAwMjZzZHAtXFx1MDAzZXNkX2xvZ19lcnJvciwgMCwgLUVJTykpXFxuIFxcdFxcdFxcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XFxuIFxcdFxcdC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmNcXG5pbmRleCA2ZGFiZTczYWQ3OTBkLi43NDQwZTViNzJmOGFkIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvbG9wcy5jXFxuKysrIGIvZnMvZ2ZzMi9sb3BzLmNcXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGdmczJfcGluKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRpZiAodGVzdF9zZXRfYnVmZmVyX3Bpbm5lZChiaCkpXFxuIFxcdFxcdGdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7XFxuLVxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4rXFx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpIHx8IGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXFxuIFxcdFxcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XFxuIFxcdGJkID0gYmgtXFx1MDAzZWJfcHJpdmF0ZTtcXG4gXFx0LyogSWYgdGhpcyBidWZmZXIgaXMgaW4gdGhlIEFJTCBhbmQgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuXFxuQEAgLTE3OSw2ICsxNzksOCBAQCBzdGF0aWMgdm9pZCBnZnMyX2VuZF9sb2dfd3JpdGVfYmgoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuIFxcdFxcdG5leHQgPSBiaC1cXHUwMDNlYl90aGlzX3BhZ2U7XFxuIFxcdFxcdHNpemUgLT0gYmgtXFx1MDAzZWJfc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmNcXG5pbmRleCAzMDI5Y2I2ZjZkNjQwLi5lYmY2YmE1OGZmNGQwIDEwMDY0NFxcbi0tLSBhL2ZzL2piZDIvY29tbWl0LmNcXG4rKysgYi9mcy9qYmQyL2NvbW1pdC5jXFxuQEAgLTMyLDE0ICszMiwxNCBAQFxcbiBzdGF0aWMgdm9pZCBqb3VybmFsX2VuZF9idWZmZXJfaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFxcdTAwMjZiaCk7XFxuK1xcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFxcdTAwMjZiaCk7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqb3JpZ19iaCA9IGJoLVxcdTAwM2ViX3ByaXZhdGU7XFxuIFxcbiBcXHRCVUZGRVJfVFJBQ0UoYmgsIFxcXCJcXFwiKTtcXG4tXFx0aWYgKHVwdG9kYXRlKVxcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0aWYgKHN1Y2Nlc3MpXFxuK1xcdFxcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4rXFx0XFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xcbiBcXHRpZiAob3JpZ19iaCkge1xcbiBcXHRcXHRjbGVhcl9hbmRfd2FrZV91cF9iaXQoQkhfU2hhZG93LCBcXHUwMDI2b3JpZ19iaC1cXHUwMDNlYl9zdGF0ZSk7XFxuIFxcdH1cXG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBpbnQgam91cm5hbF93YWl0X29uX2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLFxcbiBcXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xcbiBcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxcbitcXHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpXFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdHB1dF9iaChiaCk7ICAgICAgICAgICAgLyogT25lIGZvciBnZXRibGsoKSAqL1xcbiBcXG5AQCAtMzMwLDkgKzMzMCw5IEBAIHN0YXRpYyBfX3UzMiBqYmQyX2NoZWNrc3VtX2RhdGEoX191MzIgY3JjMzJfc3VtLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXHRjaGFyICphZGRyO1xcbiBcXHRfX3UzMiBjaGVja3N1bTtcXG4gXFxuLVxcdGFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVxcdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcXG4rXFx0YWRkciA9IGttYXBfbG9jYWxfYmgoYmgpO1xcbiBcXHRjaGVja3N1bSA9IGNyYzMyX2JlKGNyYzMyX3N1bSwgYWRkciwgYmgtXFx1MDAzZWJfc2l6ZSk7XFxuLVxcdGt1bm1hcF9sb2NhbChhZGRyKTtcXG4rXFx0a3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTtcXG4gXFxuIFxcdHJldHVybiBjaGVja3N1bTtcXG4gfVxcbkBAIC0zNTcsMTAgKzM1NywxMCBAQCBzdGF0aWMgdm9pZCBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldChqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0c2VxID0gY3B1X3RvX2JlMzIoc2VxdWVuY2UpO1xcbi1cXHRhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XFxuK1xcdGFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTtcXG4gXFx0Y3N1bTMyID0gamJkMl9jaGtzdW0oai1cXHUwMDNlal9jc3VtX3NlZWQsIChfX3U4ICopXFx1MDAyNnNlcSwgc2l6ZW9mKHNlcSkpO1xcbiBcXHRjc3VtMzIgPSBqYmQyX2Noa3N1bShjc3VtMzIsIGFkZHIsIGJoLVxcdTAwM2ViX3NpemUpO1xcbi1cXHRrdW5tYXBfbG9jYWwoYWRkcik7XFxuK1xcdGt1bm1hcF9sb2NhbF9iaChiaCwgYWRkcik7XFxuIFxcbiBcXHRpZiAoamJkMl9oYXNfZmVhdHVyZV9jc3VtMyhqKSlcXG4gXFx0XFx0dGFnMy1cXHUwMDNldF9jaGVja3N1bSA9IGNwdV90b19iZTMyKGNzdW0zMik7XFxuQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxcbiBcXHRcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxcbiBcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHRcXHRqYmQyX3VuZmlsZV9sb2dfYmgoYmgpO1xcbiBcXHRcXHRzdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZCsrO1xcbkBAIC04NzcsNyArODc3LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcXG4gXFx0XFx0d2FpdF9vbl9idWZmZXIoYmgpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXFxuK1xcdFxcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gXFxuIFxcdFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcInBoNTogY29udHJvbCBidWZmZXIgd3JpdGVvdXQgZG9uZTogdW5maWxlXFxcIik7XFxuZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmNcXG5pbmRleCAwOWVmYTMzNzY0OWUyLi43MmU4Y2NiZjdkZTRlIDEwMDY0NFxcbi0tLSBhL2ZzL2piZDIvam91cm5hbC5jXFxuKysrIGIvZnMvamJkMi9qb3VybmFsLmNcXG5AQCAtMzI3LDggKzMyNyw2IEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbiB7XFxuIFxcdGludCBkb19lc2NhcGUgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaDtcXG4tXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW87XFxuLVxcdHVuc2lnbmVkIGludCBuZXdfb2Zmc2V0O1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX2luID0gamgyYmgoamhfaW4pO1xcbiBcXHRqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi1cXHUwMDNldF9qb3VybmFsO1xcbiBcXG5AQCAtMzQ4LDI0ICszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXFxuIFxcdC8qIGtlZXAgc3Vic2VxdWVudCBhc3NlcnRpb25zIHNhbmUgKi9cXG4gXFx0YXRvbWljX3NldChcXHUwMDI2bmV3X2JoLVxcdTAwM2ViX2NvdW50LCAxKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGJfZnJvemVuX2RhdGEgaXMgc2xhYiBtZW1vcnksIG5vdCBwYWdlIGNhY2hlLCBzbyB3aGVuIHdlIHVzZSBpdCB0aGVcXG4rXFx0ICogc2hhZG93IGJ1ZmZlciBnZXRzIG5vIGZvbGlvIGF0IGFsbDogYl9mb2xpbyBzdGF5cyBOVUxMIGZyb20gdGhlXFxuK1xcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxcbitcXHQgKiB0aGUgc2xhYiBmb2xpbyBpbnN0ZWFkIHdvdWxkIGhhbmQgaXRzIG92ZXJsb2FkZWQgLVxcdTAwM2VtYXBwaW5nIHRvXFxuK1xcdCAqIGFueXRoaW5nIHRoYXQgZ29lcyBsb29raW5nIGZvciBhbiBhZGRyZXNzX3NwYWNlLlxcbitcXHQgKi9cXG4rXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2amhfaW4tXFx1MDAzZWJfc3RhdGVfbG9jayk7XFxuIFxcdC8qXFxuIFxcdCAqIElmIGEgbmV3IHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGRvbmUgYSBidWZmZXIgY29weS1vdXQsIHRoZW5cXG4gXFx0ICogd2UgdXNlIHRoYXQgdmVyc2lvbiBvZiB0aGUgZGF0YSBmb3IgdGhlIGNvbW1pdC5cXG4gXFx0ICovXFxuIFxcdGlmIChqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSkge1xcbi1cXHRcXHRuZXdfZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4tXFx0XFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4gXFx0XFx0ZG9fZXNjYXBlID0gamJkMl9kYXRhX25lZWRzX2VzY2FwaW5nKGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4gXFx0XFx0aWYgKGRvX2VzY2FwZSlcXG4gXFx0XFx0XFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YSk7XFxuK1xcdFxcdG5ld19iaC1cXHUwMDNlYl9kYXRhID0gamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGE7XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBiaF9pbi1cXHUwMDNlYl9mb2xpbztcXG4rXFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgYmhfaW4tXFx1MDAzZWJfZGF0YSk7XFxuIFxcdFxcdGNoYXIgKnRtcDtcXG4gXFx0XFx0Y2hhciAqbWFwcGVkX2RhdGE7XFxuIFxcbi1cXHRcXHRuZXdfZm9saW8gPSBiaF9pbi1cXHUwMDNlYl9mb2xpbztcXG4tXFx0XFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGJoX2luLVxcdTAwM2ViX2RhdGEpO1xcbi1cXHRcXHRtYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8obmV3X2ZvbGlvLCBuZXdfb2Zmc2V0KTtcXG4rXFx0XFx0bWFwcGVkX2RhdGEgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGaXJlIGRhdGEgZnJvemVuIHRyaWdnZXIgaWYgZGF0YSBhbHJlYWR5IHdhc24ndCBmcm96ZW4uIERvXFxuIFxcdFxcdCAqIHRoaXMgYmVmb3JlIGNoZWNraW5nIGZvciBlc2NhcGluZywgYXMgdGhlIHRyaWdnZXIgbWF5IG1vZGlmeVxcbkBAIC0zNzksOCArMzg0LDEwIEBAIGludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBEbyB3ZSBuZWVkIHRvIGRvIGEgZGF0YSBjb3B5P1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFkb19lc2NhcGUpXFxuK1xcdFxcdGlmICghZG9fZXNjYXBlKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9iaChuZXdfYmgsIGZvbGlvLCBvZmZzZXQpO1xcbiBcXHRcXHRcXHRnb3RvIGVzY2FwZV9kb25lO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2amhfaW4tXFx1MDAzZWJfc3RhdGVfbG9jayk7XFxuIFxcdFxcdHRtcCA9IGttYWxsb2MoYmhfaW4tXFx1MDAzZWJfc2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xcbkBAIC0zOTEsNyArMzk4LDcgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhID0gdG1wO1xcbi1cXHRcXHRtZW1jcHlfZnJvbV9mb2xpbyh0bXAsIG5ld19mb2xpbywgbmV3X29mZnNldCwgYmhfaW4tXFx1MDAzZWJfc2l6ZSk7XFxuK1xcdFxcdG1lbWNweV9mcm9tX2ZvbGlvKHRtcCwgZm9saW8sIG9mZnNldCwgYmhfaW4tXFx1MDAzZWJfc2l6ZSk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBhcyB3ZSdyZSB1c2luZyBmcm96ZW5cXG4gXFx0XFx0ICogZGF0YSBmb3IgdGhlIGVzY2FwaW5nLCBidXQgaXQga2VlcHMgY29uc2lzdGVuY3kgd2l0aFxcbkBAIC00MDAsMTMgKzQwNywxMSBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcXG4gXFx0XFx0amhfaW4tXFx1MDAzZWJfZnJvemVuX3RyaWdnZXJzID0gamhfaW4tXFx1MDAzZWJfdHJpZ2dlcnM7XFxuIFxcbiBjb3B5X2RvbmU6XFxuLVxcdFxcdG5ld19mb2xpbyA9IHZpcnRfdG9fZm9saW8oamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbi1cXHRcXHRuZXdfb2Zmc2V0ID0gb2Zmc2V0X2luX2ZvbGlvKG5ld19mb2xpbywgamhfaW4tXFx1MDAzZWJfZnJvemVuX2RhdGEpO1xcbiBcXHRcXHRqYmQyX2RhdGFfZG9fZXNjYXBlKGpoX2luLVxcdTAwM2ViX2Zyb3plbl9kYXRhKTtcXG4rXFx0XFx0bmV3X2JoLVxcdTAwM2ViX2RhdGEgPSBqaF9pbi1cXHUwMDNlYl9mcm96ZW5fZGF0YTtcXG4gXFx0fVxcbiBcXG4gZXNjYXBlX2RvbmU6XFxuLVxcdGZvbGlvX3NldF9iaChuZXdfYmgsIG5ld19mb2xpbywgbmV3X29mZnNldCk7XFxuIFxcdG5ld19iaC1cXHUwMDNlYl9zaXplID0gYmhfaW4tXFx1MDAzZWJfc2l6ZTtcXG4gXFx0bmV3X2JoLVxcdTAwM2ViX2JkZXYgPSBqb3VybmFsLVxcdTAwM2VqX2RldjtcXG4gXFx0bmV3X2JoLVxcdTAwM2ViX2Jsb2NrbnIgPSBibG9ja25yO1xcbkBAIC04ODEsNyArODg2LDcgQEAgaW50IGpiZDJfZmNfd2FpdF9idWZzKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IG51bV9ibGtzKVxcbiBcXHRcXHQgKiBVcGRhdGUgal9mY19vZmYgc28gamJkMl9mY19yZWxlYXNlX2J1ZnMgY2FuIHJlbGVhc2UgcmVtYWluXFxuIFxcdFxcdCAqIGJ1ZmZlciBoZWFkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkge1xcbitcXHRcXHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpIHtcXG4gXFx0XFx0XFx0am91cm5hbC1cXHUwMDNlal9mY19vZmYgPSBpICsgMTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jXFxuaW5kZXggNWNjN2QwOTdiMmFjOC4uODVkODRkOTA5Zjc4NSAxMDA2NDRcXG4tLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcXG4rKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcXG5AQCAtOTIwLDcgKzkyMCw3IEBAIHN0YXRpYyB2b2lkIGpiZDJfZnJlZXplX2poX2RhdGEoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpXFxuIFxcdGNoYXIgKnNvdXJjZTtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpoMmJoKGpoKTtcXG4gXFxuLVxcdEpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCBcXFwiUG9zc2libGUgSU8gZmFpbHVyZS5cXFxcblxcXCIpO1xcbitcXHRKX0VYUEVDVF9KSChqaCwgYnVmZmVyX3VwdG9kYXRlKGJoKSwgXFxcIkJ1ZmZlciBub3QgdXB0b2RhdGUhXFxcXG5cXFwiKTtcXG4gXFx0c291cmNlID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XFxuIFxcdC8qIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBqdXN0IGJlZm9yZSB3ZSBjb3B5IHRoZSBkYXRhICovXFxuIFxcdGpiZDJfYnVmZmVyX2Zyb3plbl90cmlnZ2VyKGpoLCBzb3VyY2UsIGpoLVxcdTAwM2ViX3RyaWdnZXJzKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcXG5pbmRleCA3YmZlMzc3YWYyZGZjLi43MzNjZWRhNzljYTFmIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcXG4rKysgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jXFxuQEAgLTY2LDEyICs2NiwxNCBAQCBpbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuIFxcbiBcXHR3YWl0X29uX2J1ZmZlcihiaCk7XFxuIFxcbi1cXHRpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRpZiAoIWJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4gXFx0XFx0b2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShjaSwgYmgpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHQvKiBXZSBkb24ndCBuZWVkIHRvIHJlbW92ZSB0aGUgY2x1c3RlcmVkIHVwdG9kYXRlXFxuLVxcdFxcdCAqIGluZm9ybWF0aW9uIGZvciB0aGlzIGJoIGFzIGl0J3Mgbm90IG1hcmtlZCBsb2NhbGx5XFxuLVxcdFxcdCAqIHVwdG9kYXRlLiAqL1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgYnVmZmVyIHN0aWxsIGhvbGRzIHdoYXQgd2UgdHJpZWQgdG8gd3JpdGUsIGJ1dCBpdCBkaWRcXG4rXFx0XFx0ICogbm90IHJlYWNoIHRoZSBkaXNrLCBzbyBkb24ndCBhZHZlcnRpc2UgaXQgdG8gdGhlIGNsdXN0ZXJcXG4rXFx0XFx0ICogYXMgdXAgdG8gZGF0ZS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4gXFx0fVxcbkBAIC00NDYsNyArNDQ4LDcgQEAgaW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4gXFxuIFxcdHdhaXRfb25fYnVmZmVyKGJoKTtcXG4gXFxuLVxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbiBcXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jXFxuaW5kZXggZDhhZmJjMWE3NmJiOC4uZWE2ODAyZDg5NGMyYiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmNcXG4rKysgYi9mcy9vY2ZzMi9qb3VybmFsLmNcXG5AQCAtNjc2LDE5ICs2NzYsMjAgQEAgc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdG1sb2coTUxfRVJST1IsIFxcXCJnaXZpbmcgbWUgYSBidWZmZXIgdGhhdCdzIG5vdCB1cHRvZGF0ZSFcXFxcblxcXCIpO1xcbiBcXHRcXHRtbG9nKE1MX0VSUk9SLCBcXFwiYl9ibG9ja25yPSVsbHUsIGJfc3RhdGU9MHglbHhcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC1cXHUwMDNlYl9ibG9ja25yLCBiaC1cXHUwMDNlYl9zdGF0ZSk7XFxuLVxcbitcXHR9XFxuK1xcdC8qXFxuK1xcdCAqIEEgcHJldmlvdXMgdHJhbnNhY3Rpb24gd2l0aCBhIGNvdXBsZSBvZiBidWZmZXIgaGVhZHMgZmFpbFxcbitcXHQgKiB0byBjaGVja3BvaW50LCBzbyBhbGwgdGhlIGJocyBhcmUgbWFya2VkIGFzIEJIX1dyaXRlX0VJTy5cXG4rXFx0ICogRm9yIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHRoZSBiaCBpcyBqdXN0IGFtb25nIHRob3NlIGVycm9yXFxuK1xcdCAqIGJocyB3aGljaCBwcmV2aW91cyB0cmFuc2FjdGlvbiBoYW5kbGUuIFdlIGNhbid0IGp1c3QgY2xlYXJcXG4rXFx0ICogaXRzIEJIX1dyaXRlX0VJTyBhbmQgcmV1c2UgZGlyZWN0bHksIHNpbmNlIG90aGVyIGJocyBhcmVcXG4rXFx0ICogbm90IHdyaXR0ZW4gdG8gZGlzayB5ZXQgYW5kIHRoYXQgd2lsbCBjYXVzZSBtZXRhZGF0YVxcbitcXHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxcbitcXHQgKiBmdXJ0aGVyIGRhbWFnZS5cXG4rXFx0ICovXFxuK1xcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XFxuIFxcdFxcdGxvY2tfYnVmZmVyKGJoKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXFxuLVxcdFxcdCAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLlxcbi1cXHRcXHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3JcXG4tXFx0XFx0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJ3QganVzdCBjbGVhclxcbi1cXHRcXHQgKiBpdHMgQkhfV3JpdGVfRUlPIGFuZCByZXVzZSBkaXJlY3RseSwgc2luY2Ugb3RoZXIgYmhzIGFyZVxcbi1cXHRcXHQgKiBub3Qgd3JpdHRlbiB0byBkaXNrIHlldCBhbmQgdGhhdCB3aWxsIGNhdXNlIG1ldGFkYXRhXFxuLVxcdFxcdCAqIGluY29uc2lzdGVuY3kuIFNvIHdlIHNob3VsZCBzZXQgZnMgcmVhZC1vbmx5IHRvIGF2b2lkXFxuLVxcdFxcdCAqIGZ1cnRoZXIgZGFtYWdlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG4rXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4gXFx0XFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuIFxcdFxcdFxcdHJldHVybiBvY2ZzMl9lcnJvcihvc2ItXFx1MDAzZXNiLCBcXFwiQSBwcmV2aW91cyBhdHRlbXB0IHRvIFxcXCJcXG4gXFx0XFx0XFx0XFx0XFx0XFxcIndyaXRlIHRoaXMgYnVmZmVyIGhlYWQgZmFpbGVkXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb21mcy9pbm9kZS5jIGIvZnMvb21mcy9pbm9kZS5jXFxuaW5kZXggMWQ5MTVlZjcyMTE5Zi4uYmMzNzAyOWE0YWZiMSAxMDA2NDRcXG4tLS0gYS9mcy9vbWZzL2lub2RlLmNcXG4rKysgYi9mcy9vbWZzL2lub2RlLmNcXG5AQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBpbnQgX19vbWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdGlmICh3YWl0KSB7XFxuIFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKVxcbitcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcXG4gXFx0XFx0XFx0c3luY19mYWlsZWQgPSAxO1xcbiBcXHR9XFxuIFxcbkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIGludCBfX29tZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuIFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoMik7XFxuIFxcdFxcdGlmICh3YWl0KSB7XFxuIFxcdFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoMik7XFxuLVxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoMikgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaDIpKVxcbitcXHRcXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoMikpXFxuIFxcdFxcdFxcdFxcdHN5bmNfZmFpbGVkID0gMTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVsc2UoYmgyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXFxuaW5kZXggZmQyYzcxMTVjMDU0Mi4uMjBiOGZjYTFhYmZhYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG5AQCAtNTksMTAgKzU5LDcgQEAgc3RydWN0IGFkZHJlc3Nfc3BhY2U7XFxuIHN0cnVjdCBidWZmZXJfaGVhZCB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYl9zdGF0ZTtcXHRcXHQvKiBidWZmZXIgc3RhdGUgYml0bWFwIChzZWUgYWJvdmUpICovXFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYl90aGlzX3BhZ2U7LyogY2lyY3VsYXIgbGlzdCBvZiBwYWdlJ3MgYnVmZmVycyAqL1xcbi1cXHR1bmlvbiB7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpiX3BhZ2U7XFx0LyogdGhlIHBhZ2UgdGhpcyBiaCBpcyBtYXBwZWQgdG8gKi9cXG4tXFx0XFx0c3RydWN0IGZvbGlvICpiX2ZvbGlvO1xcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xcbi1cXHR9O1xcbitcXHRzdHJ1Y3QgZm9saW8gKmJfZm9saW87XFx0XFx0LyogdGhlIGZvbGlvIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXFxuIFxcbiBcXHRzZWN0b3JfdCBiX2Jsb2NrbnI7XFx0XFx0Lyogc3RhcnQgYmxvY2sgbnVtYmVyICovXFxuIFxcdHNpemVfdCBiX3NpemU7XFx0XFx0XFx0Lyogc2l6ZSBvZiBtYXBwaW5nICovXFxuQEAgLTE3Miw3ICsxNjksMzYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYnVmZmVyX3VwdG9kYXRlKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYmhfb2Zmc2V0KGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4tXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXFx1MDAzZWJfZGF0YSBcXHUwMDI2IChwYWdlX3NpemUoYmgtXFx1MDAzZWJfcGFnZSkgLSAxKTtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXFx1MDAzZWJfZGF0YSBcXHUwMDI2IChmb2xpb19zaXplKGJoLVxcdTAwM2ViX2ZvbGlvKSAtIDEpO1xcbit9XFxuK1xcbisvKipcXG4rICoga21hcF9sb2NhbF9iaCAtIE1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cXG4rICogQGJoOiBUaGUgYnVmZmVyLlxcbisgKlxcbisgKiBCdWZmZXJzIHVzdWFsbHkgbGl2ZSBpbiB0aGUgcGFnZSBjYWNoZSwgYnV0IGEgZmV3IGFyZSBidWlsdCBvdmVyIG1lbW9yeVxcbisgKiB3aGljaCBpcyBub3QuICBUaG9zZSBjYXJyeSBubyBmb2xpbyBhbmQgYl9kYXRhIGlzIGFscmVhZHkgYSBrZXJuZWwgYWRkcmVzc1xcbisgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoXFxuKyAqIGt1bm1hcF9sb2NhbF9iaCgpLlxcbisgKlxcbisgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJ3MgZGF0YS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbit7XFxuK1xcdGlmICghYmgtXFx1MDAzZWJfZm9saW8pXFxuK1xcdFxcdHJldHVybiBiaC1cXHUwMDNlYl9kYXRhO1xcbitcXHRyZXR1cm4ga21hcF9sb2NhbF9mb2xpbyhiaC1cXHUwMDNlYl9mb2xpbywgYmhfb2Zmc2V0KGJoKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBrdW5tYXBfbG9jYWxfYmggLSBVbm1hcCB0aGUgZGF0YSBvZiBhIGJ1ZmZlci5cXG4rICogQGJoOiBUaGUgYnVmZmVyLlxcbisgKiBAYWRkcjogVGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkga21hcF9sb2NhbF9iaCgpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKVxcbit7XFxuK1xcdGlmIChiaC1cXHUwMDNlYl9mb2xpbylcXG4rXFx0XFx0a3VubWFwX2xvY2FsKGFkZHIpO1xcbiB9XFxuIFxcbiAvKiBJZiB3ZSAqa25vdyogcGFnZS1cXHUwMDNlcHJpdmF0ZSByZWZlcnMgdG8gYnVmZmVyX2hlYWRzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjA2LjA0OTkzMTUzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNTgxODgzNjU1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiSkJEMlwiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJFWEZBVF9GU1wiLFxuICAgIFwiQURGU19GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiT01GU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJoX2VuZF93cml0ZVwiLFxuICAgIFwiYmhfZW5kX2FzeW5jX3dyaXRlXCIsXG4gICAgXCJfX2Jmb3JnZXRcIixcbiAgICBcIl9fc3luY19kaXJ0eV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgICBcImpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIixcbiAgICBcImpiZDJfZmNfd2FpdF9idWZzXCIsXG4gICAgXCJvY2ZzMl93cml0ZV9ibG9ja1wiLFxuICAgIFwiZmF0X3N5bmNfYmhzXCIsXG4gICAgXCJleGZhdF91cGRhdGVfYmhzXCIsXG4gICAgXCJfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhXCIsXG4gICAgXCJnZnMyX3BpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYnVmZmVyX2hlYWQgaGFuZGxpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhcm91bmQgd3JpdGUgZXJyb3IgdHJhY2tpbmcgKGJ1ZmZlcl93cml0ZV9pb19lcnJvciB2cyBidWZmZXJfdXB0b2RhdGUpIGFuZCBzdXBwb3J0IGZvciBidWZmZXJfaGVhZHMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIGZvbGlvIChlLmcuLCBmb3IgYl9mcm96ZW5fZGF0YSBpbiBqYmQyKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgbXVsdGlwbGUgZmlsZXN5c3RlbXMgKGV4dDQsIGpiZDIsIGdmczIsIG9jZnMyLCBmYXQsIGV4ZmF0LCBhZGZzLCBleHQyLCBvbWZzKSBhbmQgdGhlIGNvcmUgYmxvY2sgbGF5ZXIuIEZ1enppbmcgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBJL08gZXJyb3IgaGFuZGxpbmcgb3IgbWVtb3J5IGFjY2VzcyAodmlhIHRoZSBuZXcga21hcF9sb2NhbF9iaC9iaW9fYWRkX3ZpcnRfbm9mYWlsIHBhdGhzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjY4OGM2ODBjNTlmYzdlOWZiYzY0MzJhNWVjZjc2NDFkMDE4ZWEwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMjA6MDE6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuY1xuaW5kZXggMTFhZmE5ZTE1N2FhNy4uYjhjYzZhNjk3YTA1ZCAxMDA2NDRcbi0tLSBhL2ZzL2FkZnMvZGlyLmNcbisrKyBiL2ZzL2FkZnMvZGlyLmNcbkBAIC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxuIFx0Zm9yIChpID0gZGlyLVx1MDAzZW5yX2J1ZmZlcnMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4gXHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBkaXItXHUwMDNlYmhzW2ldO1xuIFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuY1xuaW5kZXggYmU4YjU3YTYzNWNkOC4uNjhlYTBlZjg0NzBlZSAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4rKysgYi9mcy9idWZmZXIuY1xuQEAgLTIwMywxMSArMjAzLDEwIEBAIHZvaWQgYmhfZW5kX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcbiBcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdGlmIChzdWNjZXNzKSB7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YnVmZmVyX2lvX2Vycm9yKGJoLCBcIiwgbG9zdCBzeW5jIHBhZ2Ugd3JpdGVcIik7XG4gXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiBcdH1cbiBcdHVubG9ja19idWZmZXIoYmgpO1xuIH1cbkBAIC00MzcsMTEgKzQzNiwxMCBAQCB2b2lkIGJoX2VuZF9hc3luY193cml0ZShzdHJ1Y3QgYmlvICpiaW8pXG4gXG4gXHRmb2xpbyA9IGJoLVx1MDAzZWJfZm9saW87XG4gXHRpZiAoc3VjY2Vzcykge1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbitcdFx0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJ1ZmZlcl9pb19lcnJvcihiaCwgXCIsIGxvc3QgYXN5bmMgcGFnZSB3cml0ZVwiKTtcbiBcdFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuLVx0XHRjbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpO1xuIFx0fVxuIFxuIFx0Zmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcbkBAIC02MTgsNyArNjE2LDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHR9XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tYi1cdTAwM2Vsb2NrKTtcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLVx0XHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHRcdGJyZWxzZShiaCk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZtbWItXHUwMDNlbG9jayk7XG5AQCAtMTA5MSw2ICsxMDg5LDcgQEAgRVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7XG4gdm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4gXHRjbGVhcl9idWZmZXJfZGlydHkoYmgpO1xuK1x0Y2xlYXJfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdHJlbW92ZV9hc3NvY19xdWV1ZShiaCk7XG4gXHRfX2JyZWxzZShiaCk7XG4gfVxuQEAgLTEwOTksMTIgKzEwOTgsMTYgQEAgRVhQT1JUX1NZTUJPTChfX2Jmb3JnZXQpO1xuIHN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhiaC1cdTAwM2ViX2ZvbGlvKTtcbitcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBleHQ0IGpvdXJuYWwgKGpiZDIpIGNhbiBzdWJtaXQgYSBidWZmZXJfaGVhZCBpdCBkaXJlY3RseSBjcmVhdGVkXG4tXHQgKiBmb3IgYSBub24tcGFnZWNhY2hlIHBhZ2UuICBmc2NyeXB0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZS5cbitcdCAqIGZvciBtZW1vcnkgdGhhdCBpcyBub3QgaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYWxsLiAgZnNjcnlwdCBkb2Vzbid0XG4rXHQgKiBjYXJlIGFib3V0IHRoZXNlLlxuIFx0ICovXG4rXHRpZiAoIWJoLVx1MDAzZWJfZm9saW8pXG4rXHRcdHJldHVybjtcbitcdG1hcHBpbmcgPSBiaC1cdTAwM2ViX2ZvbGlvLVx1MDAzZW1hcHBpbmc7XG4gXHRpZiAoIW1hcHBpbmcpXG4gXHRcdHJldHVybjtcbiBcdGZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBtYXBwaW5nLVx1MDAzZWhvc3QsXG5AQCAtMTExNSw3ICsxMTE4LDYgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcbiBcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuIFx0XHRiaW9fZW5kX2lvX3QgZW5kX2JpbylcbiB7XG4tXHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcdTAwMjYgUkVRX09QX01BU0s7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4gXG4gXHRCVUdfT04oIWJ1ZmZlcl9sb2NrZWQoYmgpKTtcbkBAIC0xMTIzLDExICsxMTI1LDcgQEAgc3RhdGljIHZvaWQgX19iaF9zdWJtaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wZixcbiBcdEJVR19PTihidWZmZXJfZGVsYXkoYmgpKTtcbiBcdEJVR19PTihidWZmZXJfdW53cml0dGVuKGJoKSk7XG4gXG4tXHQvKlxuLVx0ICogT25seSBjbGVhciBvdXQgYSB3cml0ZSBlcnJvciB3aGVuIHJld3JpdGluZ1xuLVx0ICovXG4tXHRpZiAodGVzdF9zZXRfYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2IChvcCA9PSBSRVFfT1BfV1JJVEUpKVxuLVx0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuK1x0c2V0X2J1ZmZlcl9yZXEoYmgpO1xuIFxuIFx0aWYgKGJ1ZmZlcl9tZXRhKGJoKSlcbiBcdFx0b3BmIHw9IFJFUV9NRVRBO1xuQEAgLTExNDIsNyArMTE0MCwxMSBAQCBzdGF0aWMgdm9pZCBfX2JoX3N1Ym1pdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BmLFxuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gYmgtXHUwMDNlYl9ibG9ja25yICogKGJoLVx1MDAzZWJfc2l6ZSBcdTAwM2VcdTAwM2UgOSk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdyaXRlX2hpbnQ7XG4gXG4tXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSwgYmhfb2Zmc2V0KGJoKSk7XG4rXHRpZiAoYmgtXHUwMDNlYl9mb2xpbylcbitcdFx0YmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBiaC1cdTAwM2ViX2ZvbGlvLCBiaC1cdTAwM2ViX3NpemUsXG4rXHRcdFx0XHQgICAgIGJoX29mZnNldChiaCkpO1xuK1x0ZWxzZVxuK1x0XHRiaW9fYWRkX3ZpcnRfbm9mYWlsKGJpbywgYmgtXHUwMDNlYl9kYXRhLCBiaC1cdTAwM2ViX3NpemUpO1xuIFxuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGVuZF9iaW87XG4gXHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGJoO1xuQEAgLTExNTIsNyArMTE1NCw4IEBAIHN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4gXG4gXHRpZiAod2JjKSB7XG4gXHRcdHdiY19pbml0X2Jpbyh3YmMsIGJpbyk7XG4tXHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4rXHRcdGlmIChiaC1cdTAwM2ViX2ZvbGlvKVxuK1x0XHRcdHdiY19hY2NvdW50X2Nncm91cF9vd25lcih3YmMsIGJoLVx1MDAzZWJfZm9saW8sIGJoLVx1MDAzZWJfc2l6ZSk7XG4gXHR9XG4gXG4gXHRibGtfY3J5cHRvX3N1Ym1pdF9iaW8oYmlvKTtcbkBAIC0xNTA4LDcgKzE1MTEsNyBAQCBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7XG4gLyogQml0cyB0aGF0IGFyZSBjbGVhcmVkIGR1cmluZyBhbiBpbnZhbGlkYXRlICovXG4gI2RlZmluZSBCVUZGRVJfRkxBR1NfRElTQ0FSRCBcXFxuIFx0KDEgXHUwMDNjXHUwMDNjIEJIX01hcHBlZCB8IDEgXHUwMDNjXHUwMDNjIEJIX05ldyB8IDEgXHUwMDNjXHUwMDNjIEJIX1JlcSB8IFxcXG4tXHQgMSBcdTAwM2NcdTAwM2MgQkhfRGVsYXkgfCAxIFx1MDAzY1x1MDAzYyBCSF9VbndyaXR0ZW4pXG4rXHQgMSBcdTAwM2NcdTAwM2MgQkhfRGVsYXkgfCAxIFx1MDAzY1x1MDAzYyBCSF9VbndyaXR0ZW4gfCAxIFx1MDAzY1x1MDAzYyBCSF9Xcml0ZV9FSU8pXG4gXG4gc3RhdGljIHZvaWQgZGlzY2FyZF9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpXG4ge1xuQEAgLTI3MzMsNyArMjczNiw3IEBAIGludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcbiBcbiBcdFx0Ymhfc3VibWl0KGJoLCBSRVFfT1BfV1JJVEUgfCBvcF9mbGFncywgYmhfZW5kX3dyaXRlKTtcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuLVx0XHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0fSBlbHNlIHtcbiBcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXhmYXQvbWlzYy5jIGIvZnMvZXhmYXQvbWlzYy5jXG5pbmRleCA2ZjExYTk2YTRmZmE4Li5kZmQwYmJmMzFjOTQwIDEwMDY0NFxuLS0tIGEvZnMvZXhmYXQvbWlzYy5jXG4rKysgYi9mcy9leGZhdC9taXNjLmNcbkBAIC0xODcsNyArMTg3LDcgQEAgaW50IGV4ZmF0X3VwZGF0ZV9iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzLCBpbnQgc3luYylcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2JocyBcdTAwMjZcdTAwMjYgc3luYzsgaSsrKSB7XG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoc1tpXSk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoc1tpXSkpXG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmhzW2ldKSlcbiBcdFx0XHRlcnIgPSAtRUlPO1xuIFx0fVxuIFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyLmMgYi9mcy9leHQyL3hhdHRyLmNcbmluZGV4IGJlNjNmODk0MDJhMzguLjM5MDA1ZWMyM2ZlNWQgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL3hhdHRyLmNcbisrKyBiL2ZzL2V4dDIveGF0dHIuY1xuQEAgLTc2OSw3ICs3NjksNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4gXHRcdGlmIChJU19TWU5DKGlub2RlKSkge1xuIFx0XHRcdHN5bmNfZGlydHlfYnVmZmVyKG5ld19iaCk7XG4gXHRcdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKG5ld19iaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUobmV3X2JoKSlcbitcdFx0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKG5ld19iaCkpXG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggMDJiMDY2Mjk5MTY0OS4uZjMzOGQ2ZTNjMjlmNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbisrKyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmNcbkBAIC00MTMsNyArNDEzLDcgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdFx0XHRleHQ0X2Vycm9yX2lub2RlX2Vycihpbm9kZSwgd2hlcmUsIGxpbmUsXG4gXHRcdFx0XHRcdFx0ICAgICBiaC1cdTAwM2ViX2Jsb2NrbnIsIEVJTyxcbiBcdFx0XHRcdFx0XCJJTyBlcnJvciBzeW5jaW5nIGl0YWJsZSBibG9ja1wiKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDhlMjI1OTc5OTYxNGUuLjk1OTk4ODI3ZmYwMTEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIwMywxNyArMjAzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX3NldF9zbmFwX2VycihpbnQgKnNuYXBfZXJyLCBpbnQgZXJyKVxuIHN0YXRpYyB2b2lkIGV4dDRfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbitcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcbiBcdEJVRkZFUl9UUkFDRShiaCwgXCJcIik7XG4tXHRpZiAodXB0b2RhdGUpIHtcbi1cdFx0ZXh0NF9kZWJ1ZyhcIiVzOiBCbG9jayAlbGxkIHVwLXRvLWRhdGVcIixcbitcdGlmIChzdWNjZXNzKSB7XG4rXHRcdGV4dDRfZGVidWcoXCIlczogQmxvY2sgJWxsZCB3cml0dGVuXCIsXG4gXHRcdFx0ICAgX19mdW5jX18sIGJoLVx1MDAzZWJfYmxvY2tucik7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0XHRjbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXh0NF9kZWJ1ZyhcIiVzOiBCbG9jayAlbGxkIG5vdCB1cC10by1kYXRlXCIsXG4rXHRcdGV4dDRfZGVidWcoXCIlczogQmxvY2sgJWxsZCB3cml0ZSBmYWlsZWRcIixcbiBcdFx0XHQgICBfX2Z1bmNfXywgYmgtXHUwMDNlYl9ibG9ja25yKTtcbi1cdFx0Y2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbitcdFx0bWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpO1xuIFx0fVxuIFxuIFx0dW5sb2NrX2J1ZmZlcihiaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9tbXAuYyBiL2ZzL2V4dDQvbW1wLmNcbmluZGV4IDdjZTM2MTQ4NGIzODIuLjRiMThkZGVmNDY4ZDcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21tcC5jXG4rKysgYi9mcy9leHQ0L21tcC5jXG5AQCAtNDksNyArNDksNyBAQCBzdGF0aWMgaW50IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdGJoX3N1Ym1pdChiaCwgUkVRX09QX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTUVUQSB8IFJFUV9QUklPLFxuIFx0XHRcdGJoX2VuZF93cml0ZSk7XG4gXHR3YWl0X29uX2J1ZmZlcihiaCk7XG4tXHRpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKVxuK1x0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggYmUxOGY2YjU4MTliYS4uNGE0Y2QwMTExZTQ3YSAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbisrKyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0zNTYsNyArMzU2LDcgQEAgaW50IGZhdF9zeW5jX2JocyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHMsIGludCBucl9iaHMpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9iaHM7IGkrKykge1xuIFx0XHR3YWl0X29uX2J1ZmZlcihiaHNbaV0pO1xuLVx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaHNbaV0pKVxuK1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoc1tpXSkpXG4gXHRcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmNcbmluZGV4IDc4YmJhOGNjMTBiOGYuLmUzZTBkY2IxZjU2NzMgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2xvZy5jXG4rKysgYi9mcy9nZnMyL2xvZy5jXG5AQCAtMTA3LDcgKzEwNyw3IEBAIF9fYWNxdWlyZXMoXHUwMDI2c2RwLVx1MDAzZXNkX2FpbF9sb2NrKVxuIFx0XHRnZnMyX2Fzc2VydChzZHAsIGJkLVx1MDAzZWJkX3RyID09IHRyKTtcbiBcbiBcdFx0aWYgKCFidWZmZXJfYnVzeShiaCkpIHtcbi1cdFx0XHRpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRcdGlmICghYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuIFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmJkLVx1MDAzZWJkX2FpbF9zdF9saXN0LFxuIFx0XHRcdFx0XHQgIFx1MDAyNnRyLVx1MDAzZXRyX2FpbDJfbGlzdCk7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIsXG4gXHRcdFx0YWN0aXZlX2NvdW50Kys7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cdFx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFjbXB4Y2hnKFx1MDAyNnNkcC1cdTAwM2VzZF9sb2dfZXJyb3IsIDAsIC1FSU8pKVxuIFx0XHRcdGdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7XG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmMgYi9mcy9nZnMyL2xvcHMuY1xuaW5kZXggNmRhYmU3M2FkNzkwZC4uNzQ0MGU1YjcyZjhhZCAxMDA2NDRcbi0tLSBhL2ZzL2dmczIvbG9wcy5jXG4rKysgYi9mcy9nZnMyL2xvcHMuY1xuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBnZnMyX3BpbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiBcdGNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRpZiAodGVzdF9zZXRfYnVmZmVyX3Bpbm5lZChiaCkpXG4gXHRcdGdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7XG4tXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4rXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSlcbiBcdFx0Z2ZzMl9pb19lcnJvcl9iaChzZHAsIGJoKTtcbiBcdGJkID0gYmgtXHUwMDNlYl9wcml2YXRlO1xuIFx0LyogSWYgdGhpcyBidWZmZXIgaXMgaW4gdGhlIEFJTCBhbmQgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuXG5AQCAtMTc5LDYgKzE3OSw4IEBAIHN0YXRpYyB2b2lkIGdmczJfZW5kX2xvZ193cml0ZV9iaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGRvIHtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRuZXh0ID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHRcdHNpemUgLT0gYmgtXHUwMDNlYl9zaXplO1xuZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jXG5pbmRleCAzMDI5Y2I2ZjZkNjQwLi5lYmY2YmE1OGZmNGQwIDEwMDY0NFxuLS0tIGEvZnMvamJkMi9jb21taXQuY1xuKysrIGIvZnMvamJkMi9jb21taXQuY1xuQEAgLTMyLDE0ICszMiwxNCBAQFxuIHN0YXRpYyB2b2lkIGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0Ym9vbCB1cHRvZGF0ZSA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbitcdGJvb2wgc3VjY2VzcyA9IGJpb19lbmRpb19iaChiaW8sIFx1MDAyNmJoKTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqb3JpZ19iaCA9IGJoLVx1MDAzZWJfcHJpdmF0ZTtcbiBcbiBcdEJVRkZFUl9UUkFDRShiaCwgXCJcIik7XG4tXHRpZiAodXB0b2RhdGUpXG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0aWYgKHN1Y2Nlc3MpXG4rXHRcdGNsZWFyX2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHRlbHNlXG4tXHRcdGNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHRcdG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdGlmIChvcmlnX2JoKSB7XG4gXHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChCSF9TaGFkb3csIFx1MDAyNm9yaWdfYmgtXHUwMDNlYl9zdGF0ZSk7XG4gXHR9XG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBpbnQgam91cm5hbF93YWl0X29uX2NvbW1pdF9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLFxuIFx0Y2xlYXJfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdHdhaXRfb25fYnVmZmVyKGJoKTtcbiBcbi1cdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXG4rXHRpZiAodW5saWtlbHkoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkpXG4gXHRcdHJldCA9IC1FSU87XG4gXHRwdXRfYmgoYmgpOyAgICAgICAgICAgIC8qIE9uZSBmb3IgZ2V0YmxrKCkgKi9cbiBcbkBAIC0zMzAsOSArMzMwLDkgQEAgc3RhdGljIF9fdTMyIGpiZDJfY2hlY2tzdW1fZGF0YShfX3UzMiBjcmMzMl9zdW0sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRjaGFyICphZGRyO1xuIFx0X191MzIgY2hlY2tzdW07XG4gXG4tXHRhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbitcdGFkZHIgPSBrbWFwX2xvY2FsX2JoKGJoKTtcbiBcdGNoZWNrc3VtID0gY3JjMzJfYmUoY3JjMzJfc3VtLCBhZGRyLCBiaC1cdTAwM2ViX3NpemUpO1xuLVx0a3VubWFwX2xvY2FsKGFkZHIpO1xuK1x0a3VubWFwX2xvY2FsX2JoKGJoLCBhZGRyKTtcbiBcbiBcdHJldHVybiBjaGVja3N1bTtcbiB9XG5AQCAtMzU3LDEwICszNTcsMTAgQEAgc3RhdGljIHZvaWQgamJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbF90ICpqLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcsXG4gXHRcdHJldHVybjtcbiBcbiBcdHNlcSA9IGNwdV90b19iZTMyKHNlcXVlbmNlKTtcbi1cdGFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGJoLVx1MDAzZWJfZm9saW8sIGJoX29mZnNldChiaCkpO1xuK1x0YWRkciA9IGttYXBfbG9jYWxfYmgoYmgpO1xuIFx0Y3N1bTMyID0gamJkMl9jaGtzdW0oai1cdTAwM2VqX2NzdW1fc2VlZCwgKF9fdTggKilcdTAwMjZzZXEsIHNpemVvZihzZXEpKTtcbiBcdGNzdW0zMiA9IGpiZDJfY2hrc3VtKGNzdW0zMiwgYWRkciwgYmgtXHUwMDNlYl9zaXplKTtcbi1cdGt1bm1hcF9sb2NhbChhZGRyKTtcbitcdGt1bm1hcF9sb2NhbF9iaChiaCwgYWRkcik7XG4gXG4gXHRpZiAoamJkMl9oYXNfZmVhdHVyZV9jc3VtMyhqKSlcbiBcdFx0dGFnMy1cdTAwM2V0X2NoZWNrc3VtID0gY3B1X3RvX2JlMzIoY3N1bTMyKTtcbkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqam91cm5hbClcbiBcdFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSlcbitcdFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKVxuIFx0XHRcdGVyciA9IC1FSU87XG4gXHRcdGpiZDJfdW5maWxlX2xvZ19iaChiaCk7XG4gXHRcdHN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkKys7XG5AQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXG4gXHRcdHdhaXRfb25fYnVmZmVyKGJoKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4tXHRcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpXG4rXHRcdGlmICh1bmxpa2VseShidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSlcbiBcdFx0XHRlcnIgPSAtRUlPO1xuIFxuIFx0XHRCVUZGRVJfVFJBQ0UoYmgsIFwicGg1OiBjb250cm9sIGJ1ZmZlciB3cml0ZW91dCBkb25lOiB1bmZpbGVcIik7XG5kaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuY1xuaW5kZXggMDllZmEzMzc2NDllMi4uNzJlOGNjYmY3ZGU0ZSAxMDA2NDRcbi0tLSBhL2ZzL2piZDIvam91cm5hbC5jXG4rKysgYi9mcy9qYmQyL2pvdXJuYWwuY1xuQEAgLTMyNyw4ICszMjcsNiBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcbiB7XG4gXHRpbnQgZG9fZXNjYXBlID0gMDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoO1xuLVx0c3RydWN0IGZvbGlvICpuZXdfZm9saW87XG4tXHR1bnNpZ25lZCBpbnQgbmV3X29mZnNldDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfaW4gPSBqaDJiaChqaF9pbik7XG4gXHRqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi1cdTAwM2V0X2pvdXJuYWw7XG4gXG5AQCAtMzQ4LDI0ICszNDYsMzEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHQvKiBrZWVwIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucyBzYW5lICovXG4gXHRhdG9taWNfc2V0KFx1MDAyNm5ld19iaC1cdTAwM2ViX2NvdW50LCAxKTtcbiBcbitcdC8qXG4rXHQgKiBiX2Zyb3plbl9kYXRhIGlzIHNsYWIgbWVtb3J5LCBub3QgcGFnZSBjYWNoZSwgc28gd2hlbiB3ZSB1c2UgaXQgdGhlXG4rXHQgKiBzaGFkb3cgYnVmZmVyIGdldHMgbm8gZm9saW8gYXQgYWxsOiBiX2ZvbGlvIHN0YXlzIE5VTEwgZnJvbSB0aGVcbitcdCAqIGFsbG9jYXRpb24gYW5kIGJfZGF0YSBwb2ludHMgc3RyYWlnaHQgYXQgdGhlIGNvcHkuICBQb2ludGluZyBpdCBhdFxuK1x0ICogdGhlIHNsYWIgZm9saW8gaW5zdGVhZCB3b3VsZCBoYW5kIGl0cyBvdmVybG9hZGVkIC1cdTAwM2VtYXBwaW5nIHRvXG4rXHQgKiBhbnl0aGluZyB0aGF0IGdvZXMgbG9va2luZyBmb3IgYW4gYWRkcmVzc19zcGFjZS5cbitcdCAqL1xuK1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmpoX2luLVx1MDAzZWJfc3RhdGVfbG9jayk7XG4gXHQvKlxuIFx0ICogSWYgYSBuZXcgdHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgZG9uZSBhIGJ1ZmZlciBjb3B5LW91dCwgdGhlblxuIFx0ICogd2UgdXNlIHRoYXQgdmVyc2lvbiBvZiB0aGUgZGF0YSBmb3IgdGhlIGNvbW1pdC5cbiBcdCAqL1xuIFx0aWYgKGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpIHtcbi1cdFx0bmV3X2ZvbGlvID0gdmlydF90b19mb2xpbyhqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbi1cdFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGEpO1xuIFx0XHRkb19lc2NhcGUgPSBqYmQyX2RhdGFfbmVlZHNfZXNjYXBpbmcoamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4gXHRcdGlmIChkb19lc2NhcGUpXG4gXHRcdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbitcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG4gXHR9IGVsc2Uge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYmhfaW4tXHUwMDNlYl9mb2xpbztcbitcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhmb2xpbywgYmhfaW4tXHUwMDNlYl9kYXRhKTtcbiBcdFx0Y2hhciAqdG1wO1xuIFx0XHRjaGFyICptYXBwZWRfZGF0YTtcbiBcbi1cdFx0bmV3X2ZvbGlvID0gYmhfaW4tXHUwMDNlYl9mb2xpbztcbi1cdFx0bmV3X29mZnNldCA9IG9mZnNldF9pbl9mb2xpbyhuZXdfZm9saW8sIGJoX2luLVx1MDAzZWJfZGF0YSk7XG4tXHRcdG1hcHBlZF9kYXRhID0ga21hcF9sb2NhbF9mb2xpbyhuZXdfZm9saW8sIG5ld19vZmZzZXQpO1xuK1x0XHRtYXBwZWRfZGF0YSA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7XG4gXHRcdC8qXG4gXHRcdCAqIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBpZiBkYXRhIGFscmVhZHkgd2Fzbid0IGZyb3plbi4gRG9cbiBcdFx0ICogdGhpcyBiZWZvcmUgY2hlY2tpbmcgZm9yIGVzY2FwaW5nLCBhcyB0aGUgdHJpZ2dlciBtYXkgbW9kaWZ5XG5AQCAtMzc5LDggKzM4NCwxMCBAQCBpbnQgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcih0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbixcbiBcdFx0LypcbiBcdFx0ICogRG8gd2UgbmVlZCB0byBkbyBhIGRhdGEgY29weT9cbiBcdFx0ICovXG4tXHRcdGlmICghZG9fZXNjYXBlKVxuK1x0XHRpZiAoIWRvX2VzY2FwZSkge1xuK1x0XHRcdGZvbGlvX3NldF9iaChuZXdfYmgsIGZvbGlvLCBvZmZzZXQpO1xuIFx0XHRcdGdvdG8gZXNjYXBlX2RvbmU7XG4rXHRcdH1cbiBcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2amhfaW4tXHUwMDNlYl9zdGF0ZV9sb2NrKTtcbiBcdFx0dG1wID0ga21hbGxvYyhiaF9pbi1cdTAwM2ViX3NpemUsIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTtcbkBAIC0zOTEsNyArMzk4LDcgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHRcdH1cbiBcbiBcdFx0amhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSA9IHRtcDtcbi1cdFx0bWVtY3B5X2Zyb21fZm9saW8odG1wLCBuZXdfZm9saW8sIG5ld19vZmZzZXQsIGJoX2luLVx1MDAzZWJfc2l6ZSk7XG4rXHRcdG1lbWNweV9mcm9tX2ZvbGlvKHRtcCwgZm9saW8sIG9mZnNldCwgYmhfaW4tXHUwMDNlYl9zaXplKTtcbiBcdFx0LypcbiBcdFx0ICogVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGFzIHdlJ3JlIHVzaW5nIGZyb3plblxuIFx0XHQgKiBkYXRhIGZvciB0aGUgZXNjYXBpbmcsIGJ1dCBpdCBrZWVwcyBjb25zaXN0ZW5jeSB3aXRoXG5AQCAtNDAwLDEzICs0MDcsMTEgQEAgaW50IGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sXG4gXHRcdGpoX2luLVx1MDAzZWJfZnJvemVuX3RyaWdnZXJzID0gamhfaW4tXHUwMDNlYl90cmlnZ2VycztcbiBcbiBjb3B5X2RvbmU6XG4tXHRcdG5ld19mb2xpbyA9IHZpcnRfdG9fZm9saW8oamhfaW4tXHUwMDNlYl9mcm96ZW5fZGF0YSk7XG4tXHRcdG5ld19vZmZzZXQgPSBvZmZzZXRfaW5fZm9saW8obmV3X2ZvbGlvLCBqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbiBcdFx0amJkMl9kYXRhX2RvX2VzY2FwZShqaF9pbi1cdTAwM2ViX2Zyb3plbl9kYXRhKTtcbitcdFx0bmV3X2JoLVx1MDAzZWJfZGF0YSA9IGpoX2luLVx1MDAzZWJfZnJvemVuX2RhdGE7XG4gXHR9XG4gXG4gZXNjYXBlX2RvbmU6XG4tXHRmb2xpb19zZXRfYmgobmV3X2JoLCBuZXdfZm9saW8sIG5ld19vZmZzZXQpO1xuIFx0bmV3X2JoLVx1MDAzZWJfc2l6ZSA9IGJoX2luLVx1MDAzZWJfc2l6ZTtcbiBcdG5ld19iaC1cdTAwM2ViX2JkZXYgPSBqb3VybmFsLVx1MDAzZWpfZGV2O1xuIFx0bmV3X2JoLVx1MDAzZWJfYmxvY2tuciA9IGJsb2NrbnI7XG5AQCAtODgxLDcgKzg4Niw3IEBAIGludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcbiBcdFx0ICogVXBkYXRlIGpfZmNfb2ZmIHNvIGpiZDJfZmNfcmVsZWFzZV9idWZzIGNhbiByZWxlYXNlIHJlbWFpblxuIFx0XHQgKiBidWZmZXIgaGVhZC5cbiBcdFx0ICovXG4tXHRcdGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpIHtcbitcdFx0aWYgKHVubGlrZWx5KGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpKSB7XG4gXHRcdFx0am91cm5hbC1cdTAwM2VqX2ZjX29mZiA9IGkgKyAxO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jXG5pbmRleCA1Y2M3ZDA5N2IyYWM4Li44NWQ4NGQ5MDlmNzg1IDEwMDY0NFxuLS0tIGEvZnMvamJkMi90cmFuc2FjdGlvbi5jXG4rKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmNcbkBAIC05MjAsNyArOTIwLDcgQEAgc3RhdGljIHZvaWQgamJkMl9mcmVlemVfamhfZGF0YShzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaClcbiBcdGNoYXIgKnNvdXJjZTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBqaDJiaChqaCk7XG4gXG4tXHRKX0VYUEVDVF9KSChqaCwgYnVmZmVyX3VwdG9kYXRlKGJoKSwgXCJQb3NzaWJsZSBJTyBmYWlsdXJlLlxcblwiKTtcbitcdEpfRVhQRUNUX0pIKGpoLCBidWZmZXJfdXB0b2RhdGUoYmgpLCBcIkJ1ZmZlciBub3QgdXB0b2RhdGUhXFxuXCIpO1xuIFx0c291cmNlID0ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbiBcdC8qIEZpcmUgZGF0YSBmcm96ZW4gdHJpZ2dlciBqdXN0IGJlZm9yZSB3ZSBjb3B5IHRoZSBkYXRhICovXG4gXHRqYmQyX2J1ZmZlcl9mcm96ZW5fdHJpZ2dlcihqaCwgc291cmNlLCBqaC1cdTAwM2ViX3RyaWdnZXJzKTtcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uY1xuaW5kZXggN2JmZTM3N2FmMmRmYy4uNzMzY2VkYTc5Y2ExZiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcbisrKyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcbkBAIC02NiwxMiArNjYsMTQgQEAgaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFxuIFx0d2FpdF9vbl9idWZmZXIoYmgpO1xuIFxuLVx0aWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbitcdGlmICghYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuIFx0XHRvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCk7XG4gXHR9IGVsc2Uge1xuLVx0XHQvKiBXZSBkb24ndCBuZWVkIHRvIHJlbW92ZSB0aGUgY2x1c3RlcmVkIHVwdG9kYXRlXG4tXHRcdCAqIGluZm9ybWF0aW9uIGZvciB0aGlzIGJoIGFzIGl0J3Mgbm90IG1hcmtlZCBsb2NhbGx5XG4tXHRcdCAqIHVwdG9kYXRlLiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgYnVmZmVyIHN0aWxsIGhvbGRzIHdoYXQgd2UgdHJpZWQgdG8gd3JpdGUsIGJ1dCBpdCBkaWRcbitcdFx0ICogbm90IHJlYWNoIHRoZSBkaXNrLCBzbyBkb24ndCBhZHZlcnRpc2UgaXQgdG8gdGhlIGNsdXN0ZXJcbitcdFx0ICogYXMgdXAgdG8gZGF0ZS5cbitcdFx0ICovXG4gXHRcdHJldCA9IC1FSU87XG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcdH1cbkBAIC00NDYsNyArNDQ4LDcgQEAgaW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbiBcbiBcdHdhaXRfb25fYnVmZmVyKGJoKTtcbiBcbi1cdGlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiBcdFx0cmV0ID0gLUVJTztcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuYyBiL2ZzL29jZnMyL2pvdXJuYWwuY1xuaW5kZXggZDhhZmJjMWE3NmJiOC4uZWE2ODAyZDg5NGMyYiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuY1xuKysrIGIvZnMvb2NmczIvam91cm5hbC5jXG5AQCAtNjc2LDE5ICs2NzYsMjAgQEAgc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdG1sb2coTUxfRVJST1IsIFwiZ2l2aW5nIG1lIGEgYnVmZmVyIHRoYXQncyBub3QgdXB0b2RhdGUhXFxuXCIpO1xuIFx0XHRtbG9nKE1MX0VSUk9SLCBcImJfYmxvY2tucj0lbGx1LCBiX3N0YXRlPTB4JWx4XFxuXCIsXG4gXHRcdCAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC1cdTAwM2ViX2Jsb2NrbnIsIGJoLVx1MDAzZWJfc3RhdGUpO1xuLVxuK1x0fVxuK1x0LypcbitcdCAqIEEgcHJldmlvdXMgdHJhbnNhY3Rpb24gd2l0aCBhIGNvdXBsZSBvZiBidWZmZXIgaGVhZHMgZmFpbFxuK1x0ICogdG8gY2hlY2twb2ludCwgc28gYWxsIHRoZSBiaHMgYXJlIG1hcmtlZCBhcyBCSF9Xcml0ZV9FSU8uXG4rXHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3JcbitcdCAqIGJocyB3aGljaCBwcmV2aW91cyB0cmFuc2FjdGlvbiBoYW5kbGUuIFdlIGNhbid0IGp1c3QgY2xlYXJcbitcdCAqIGl0cyBCSF9Xcml0ZV9FSU8gYW5kIHJldXNlIGRpcmVjdGx5LCBzaW5jZSBvdGhlciBiaHMgYXJlXG4rXHQgKiBub3Qgd3JpdHRlbiB0byBkaXNrIHlldCBhbmQgdGhhdCB3aWxsIGNhdXNlIG1ldGFkYXRhXG4rXHQgKiBpbmNvbnNpc3RlbmN5LiBTbyB3ZSBzaG91bGQgc2V0IGZzIHJlYWQtb25seSB0byBhdm9pZFxuK1x0ICogZnVydGhlciBkYW1hZ2UuXG4rXHQgKi9cbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdGxvY2tfYnVmZmVyKGJoKTtcbi1cdFx0Lypcbi1cdFx0ICogQSBwcmV2aW91cyB0cmFuc2FjdGlvbiB3aXRoIGEgY291cGxlIG9mIGJ1ZmZlciBoZWFkcyBmYWlsXG4tXHRcdCAqIHRvIGNoZWNrcG9pbnQsIHNvIGFsbCB0aGUgYmhzIGFyZSBtYXJrZWQgYXMgQkhfV3JpdGVfRUlPLlxuLVx0XHQgKiBGb3IgY3VycmVudCB0cmFuc2FjdGlvbiwgdGhlIGJoIGlzIGp1c3QgYW1vbmcgdGhvc2UgZXJyb3Jcbi1cdFx0ICogYmhzIHdoaWNoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhbmRsZS4gV2UgY2FuJ3QganVzdCBjbGVhclxuLVx0XHQgKiBpdHMgQkhfV3JpdGVfRUlPIGFuZCByZXVzZSBkaXJlY3RseSwgc2luY2Ugb3RoZXIgYmhzIGFyZVxuLVx0XHQgKiBub3Qgd3JpdHRlbiB0byBkaXNrIHlldCBhbmQgdGhhdCB3aWxsIGNhdXNlIG1ldGFkYXRhXG4tXHRcdCAqIGluY29uc2lzdGVuY3kuIFNvIHdlIHNob3VsZCBzZXQgZnMgcmVhZC1vbmx5IHRvIGF2b2lkXG4tXHRcdCAqIGZ1cnRoZXIgZGFtYWdlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4rXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4gXHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdFx0cmV0dXJuIG9jZnMyX2Vycm9yKG9zYi1cdTAwM2VzYiwgXCJBIHByZXZpb3VzIGF0dGVtcHQgdG8gXCJcbiBcdFx0XHRcdFx0XCJ3cml0ZSB0aGlzIGJ1ZmZlciBoZWFkIGZhaWxlZFxcblwiKTtcbmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmNcbmluZGV4IDFkOTE1ZWY3MjExOWYuLmJjMzcwMjlhNGFmYjEgMTAwNjQ0XG4tLS0gYS9mcy9vbWZzL2lub2RlLmNcbisrKyBiL2ZzL29tZnMvaW5vZGUuY1xuQEAgLTE0NSw3ICsxNDUsNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGlmICh3YWl0KSB7XG4gXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSlcbitcdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpXG4gXHRcdFx0c3luY19mYWlsZWQgPSAxO1xuIFx0fVxuIFxuQEAgLTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbiBcdFx0bWFya19idWZmZXJfZGlydHkoYmgyKTtcbiBcdFx0aWYgKHdhaXQpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaDIpO1xuLVx0XHRcdGlmIChidWZmZXJfcmVxKGJoMikgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgyKSlcbitcdFx0XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoMikpXG4gXHRcdFx0XHRzeW5jX2ZhaWxlZCA9IDE7XG4gXHRcdH1cbiBcdFx0YnJlbHNlKGJoMik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCBmZDJjNzExNWMwNTQyLi4yMGI4ZmNhMWFiZmFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC01OSwxMCArNTksNyBAQCBzdHJ1Y3QgYWRkcmVzc19zcGFjZTtcbiBzdHJ1Y3QgYnVmZmVyX2hlYWQge1xuIFx0dW5zaWduZWQgbG9uZyBiX3N0YXRlO1x0XHQvKiBidWZmZXIgc3RhdGUgYml0bWFwIChzZWUgYWJvdmUpICovXG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfdGhpc19wYWdlOy8qIGNpcmN1bGFyIGxpc3Qgb2YgcGFnZSdzIGJ1ZmZlcnMgKi9cbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IHBhZ2UgKmJfcGFnZTtcdC8qIHRoZSBwYWdlIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXG4tXHRcdHN0cnVjdCBmb2xpbyAqYl9mb2xpbztcdC8qIHRoZSBmb2xpbyB0aGlzIGJoIGlzIG1hcHBlZCB0byAqL1xuLVx0fTtcbitcdHN0cnVjdCBmb2xpbyAqYl9mb2xpbztcdFx0LyogdGhlIGZvbGlvIHRoaXMgYmggaXMgbWFwcGVkIHRvICovXG4gXG4gXHRzZWN0b3JfdCBiX2Jsb2NrbnI7XHRcdC8qIHN0YXJ0IGJsb2NrIG51bWJlciAqL1xuIFx0c2l6ZV90IGJfc2l6ZTtcdFx0XHQvKiBzaXplIG9mIG1hcHBpbmcgKi9cbkBAIC0xNzIsNyArMTY5LDM2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGJ1ZmZlcl91cHRvZGF0ZShjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBiaF9vZmZzZXQoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGJoKS1cdTAwM2ViX2RhdGEgXHUwMDI2IChwYWdlX3NpemUoYmgtXHUwMDNlYl9wYWdlKSAtIDEpO1xuK1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKShiaCktXHUwMDNlYl9kYXRhIFx1MDAyNiAoZm9saW9fc2l6ZShiaC1cdTAwM2ViX2ZvbGlvKSAtIDEpO1xuK31cbitcbisvKipcbisgKiBrbWFwX2xvY2FsX2JoIC0gTWFwIHRoZSBkYXRhIG9mIGEgYnVmZmVyLlxuKyAqIEBiaDogVGhlIGJ1ZmZlci5cbisgKlxuKyAqIEJ1ZmZlcnMgdXN1YWxseSBsaXZlIGluIHRoZSBwYWdlIGNhY2hlLCBidXQgYSBmZXcgYXJlIGJ1aWx0IG92ZXIgbWVtb3J5XG4rICogd2hpY2ggaXMgbm90LiAgVGhvc2UgY2Fycnkgbm8gZm9saW8gYW5kIGJfZGF0YSBpcyBhbHJlYWR5IGEga2VybmVsIGFkZHJlc3NcbisgKiB3aGljaCBpcyBhbHdheXMgbWFwcGVkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciB0aGVtLiAgUGFpciB3aXRoXG4rICoga3VubWFwX2xvY2FsX2JoKCkuXG4rICpcbisgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyJ3MgZGF0YS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfbG9jYWxfYmgoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbit7XG4rXHRpZiAoIWJoLVx1MDAzZWJfZm9saW8pXG4rXHRcdHJldHVybiBiaC1cdTAwM2ViX2RhdGE7XG4rXHRyZXR1cm4ga21hcF9sb2NhbF9mb2xpbyhiaC1cdTAwM2ViX2ZvbGlvLCBiaF9vZmZzZXQoYmgpKTtcbit9XG4rXG4rLyoqXG4rICoga3VubWFwX2xvY2FsX2JoIC0gVW5tYXAgdGhlIGRhdGEgb2YgYSBidWZmZXIuXG4rICogQGJoOiBUaGUgYnVmZmVyLlxuKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyByZXR1cm5lZCBieSBrbWFwX2xvY2FsX2JoKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9sb2NhbF9iaChjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB2b2lkICphZGRyKVxuK3tcbitcdGlmIChiaC1cdTAwM2ViX2ZvbGlvKVxuK1x0XHRrdW5tYXBfbG9jYWwoYWRkcik7XG4gfVxuIFxuIC8qIElmIHdlICprbm93KiBwYWdlLVx1MDAzZXByaXZhdGUgcmVmZXJzIHRvIGJ1ZmZlcl9oZWFkcyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MDE6MDYuMDQ5OTMyODA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxMTQzMTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQnVmZmVyIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgdHdlYWtpbmcgYnVmZmVyX2hlYWQgaGFuZGxpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB6ZXJvaW5nIGluIG9uIGBidWZmZXJfdXB0b2RhdGVgIGFuZCBgYnVmZmVyX3dyaXRlX2lvX2Vycm9yYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3cml0ZSBlcnJvcnMgYXJlIG1hbmFnZWQgYW5kIGNoZWNrZWQsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgcmVncmVzc2lvbnMuXG5cblRoaXMgYWxzbyBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBga21hcF9sb2NhbF9iaGAgYW5kIGBrdW5tYXBfbG9jYWxfYmhgIGFuZCB1c2luZyB0aGVtIGluIGBmcy9qYmQyL2NvbW1pdC5jYC4gVGhlIGNoYW5nZXMgYWxzbyBpbmNsdWRlIG1vZGlmeWluZyBgZnMvamJkMi9qb3VybmFsLmNgIHRvIGhhbmRsZSBgYl9mcm96ZW5fZGF0YWAgYW5kIGNoYW5naW5nIGBmcy9idWZmZXIuY2AgdG8gaGFuZGxlIHRoZSBgYmgtXHUwMDNlYl9mb2xpbyA9PSBOVUxMYCBjYXNlIGluIGBfX2JoX3N1Ym1pdGAgYnkgdXNpbmcgYGJpb19hZGRfdmlydF9ub2ZhaWxgIGluc3RlYWQgb2YgYGJpb19hZGRfZm9saW9fbm9mYWlsYC4gVGhhdCdzIGEgc2hpZnQgaW4gaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYmxvY2sgbGF5ZXIuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyB0b3VjaGluZyB0aGUgVkZTLCBibG9jayBsYXllciwgYW5kIGZpbGVzeXN0ZW1zLCB0aGlzIGlzIGEgY29yZSBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQgbmVlZHMgdG8gYmUgZnV6emVkIGhlYXZpbHkuIEl0J3MgaW1wYWN0aW5nIGNvZGUgYWNyb3NzIGEgYnVuY2ggb2YgZmlsZXN5c3RlbXMg4oCTIGBmcy9idWZmZXIuY2AsIGBmcy9qYmQyL2AsIGBmcy9leHQ0L2AsIGBmcy9nZnMyL2AsIGBmcy9vY2ZzMi9gLCBgZnMvZmF0L2AsIGBmcy9leGZhdC9gLCBgZnMvYWRmcy9gLCBgZnMvZXh0Mi9gLCBhbmQgYGZzL29tZnMvYC5cblxuVG8gcmVmaW5lIG15IGZ1enppbmcgYXBwcm9hY2gsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgc3ltYm9scyB0aGF0IGV4cG9zZSB0aGlzIGNoYW5nZSwgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGZvY3VzIHN5bWJvbHMgaW4gdGhlc2UgZmlsZXMuIEkgY2FuIHNlZSBgX19iaF9zdWJtaXRgIGluIGBmcy9idWZmZXIuY2AsIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYG1tYl9zeW5jYCwgYW5kIGBfX2Jmb3JnZXRgIGFyZSBhbHNvIGluIGBmcy9idWZmZXIuY2AuIE92ZXIgaW4gYGZzL2piZDIvam91cm5hbC5jYCBJIHNlZSBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAgYW5kIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCBpcyBpbiBgZnMvamJkMi9jb21taXQuY2AuIEluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLCBJIHNlZSBgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmNgLCBhbmQgaW4gYGZzL2dmczIvbG9wcy5jYCBJIHNlZSBgZ2ZzMl9lbmRfbG9nX3dyaXRlX2JoYC5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGVycm9yIGhhbmRsaW5nIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJsb2NrIGxheWVyIG5vdy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCdzIHZpc2libGUgYXQgdGhlIGludGVyZmFjZSBhbmQgd2lsbCB0cnkgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlZSBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIG9yIGFyZSBnbG9iYWwgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCBuZWVkcyB0byBiZSB0ZXN0ZWQgYW5kIHdoYXQgbWF5IG5lZWQgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MDE6MTUuMjYxMzc3Mjk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQwNDQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTE5MT1FWFBPUlRfU1lNQk9MKGJoX2VuZF9yZWFkKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTE5OS0gKi9cXG5mcy9idWZmZXIuYzoyMDA6dm9pZCBiaF9lbmRfd3JpdGUoc3RydWN0IGJpbyAqYmlvKVxcbmZzL2J1ZmZlci5jLTIwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjE1LjQ2Mjc4ODU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1ODYwNzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipUaGUgR2xvYmFsIE5hdHVyZSBvZiBgYmhfZW5kX3dyaXRlYCBhbmQgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGZhY3QgdGhhdCBgYmhfZW5kX3dyaXRlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZSBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IEkgbmVlZCB0byBjb25zaWRlciB2ZXJ5IGNhcmVmdWxseS4gRnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZSwgdGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4uIEdsb2JhbCB2YXJpYWJsZXMsIHdoaWxlIHNvbWV0aW1lcyBjb252ZW5pZW50IGZvciBxdWljayBhY2Nlc3MsIGluaGVyZW50bHkgaW50cm9kdWNlIHNldmVyYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgaW4gY29tcGxleCwgbXVsdGktdGhyZWFkZWQgb3IgZGlzdHJpYnV0ZWQgc3lzdGVtcyBsaWtlIHRoZSBvbmVzIEkgdHlwaWNhbGx5IGRlYWwgd2l0aC5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEEgZ2xvYmFsIGxpa2UgdGhpcyBpbXBsaWVzIHRoYXQgYW55IHBhcnQgb2YgdGhlIHN5c3RlbSBjYW4gcG90ZW50aWFsbHkgcmVhZCBhbmQgbW9kaWZ5IHRoZSBzdGF0ZSByZXByZXNlbnRlZCBieSB0aGlzIHZhcmlhYmxlLiBUaGlzIGNhbiBtYWtlIGRlYnVnZ2luZyBzaWduaWZpY2FudGx5IGhhcmRlciBiZWNhdXNlIHlvdSBoYXZlIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBhY2Nlc3MgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2YWx1ZSBjaGFuZ2VzLiBJdCBhbHNvIGluY3JlYXNlcyB0aGUgcmlzayBvZiBzdWJ0bGUgYnVncyB0aGF0IGFyZSBoYXJkIHRvIHJlcHJvZHVjZS4gSWYgbXVsdGlwbGUgdGhyZWFkcyBhcmUgbW9kaWZ5aW5nIGBiaF9lbmRfd3JpdGVgIHdpdGhvdXQgcHJvcGVyIHN5bmNocm9uaXphdGlvbiwgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24gYXJlIGEgc2VyaW91cyBwb3NzaWJpbGl0eSwgYW5kIHRob3NlIHR5cGVzIG9mIGJ1Z3MgY2FuIGJlIHJlYWxseSBkaWZmaWN1bHQgdG8gdHJhY2sgZG93bi5cblxuSSdkIHdhbnQgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBgYmhfZW5kX3dyaXRlYCByZXByZXNlbnRzLiBJcyBpdCBhIGNvdW50ZXIsIGEgZmxhZywgYSBwb2ludGVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBndWFyYW50ZWVzLCBpZiBhbnksIGFyZSB0aGVyZSBhYm91dCBhdG9taWMgYWNjZXNzIG9yIHRocmVhZCBzYWZldHk/IEknZCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdmVyeSBjbG9zZWx5IHRvIHNlZSBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKndoZXJlKiBpdCdzIHVzZWQuIElzIGl0IGNvbmZpbmVkIHRvIGEgc2luZ2xlIG1vZHVsZSwgb3IgZG9lcyBpdCBjcm9zcyBtb2R1bGUgYm91bmRhcmllcywgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBpbiB0ZXJtcyBvZiBtYWludGFpbmFiaWxpdHk/IElmIGl0IGlzIGEgbmVjZXNzYXJ5IGdsb2JhbCwgSSdkIHdhbnQgdG8gY29uc2lkZXIgc3Vycm91bmRpbmcgaXQgd2l0aCBhY2Nlc3MgZnVuY3Rpb25zLCBwb3RlbnRpYWxseSBwcm92aWRpbmcgYSBoaWdoZXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIG1heWJlIGV2ZW4gd2l0aCBzb21lIGluaGVyZW50IGxvY2tpbmcuIFRoaXMgY291bGQgaGVscCBtaXRpZ2F0ZSB0aGUgcHJvYmxlbXMsIGJ1dCBpdOKAmXMgc3RpbGwgbm90IGEgcGVyZmVjdCBzb2x1dGlvbi5cblxuVWx0aW1hdGVseSwgSSdkIGFwcHJvYWNoIHRoaXMgd2l0aCBhIGhlYWx0aHkgZG9zZSBvZiBza2VwdGljaXNtLiBUaGUgdXNlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIGxpa2UgYGJoX2VuZF93cml0ZWAgc2hvdWxkIHRyaWdnZXIgYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIHRvIGVuc3VyZSBpdCdzIHRydWx5IGp1c3RpZmllZCBhbmQgdG8gbWl0aWdhdGUgdGhlIHJpc2tzIGl0IGludHJvZHVjZXMuIEEgY2FyZWZ1bCByZWZhY3RvcmluZyB0byByZWR1Y2UgdGhlIHNjb3BlIG9yIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBzaG91bGQgYmUgYSBrZXkgb2JqZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjIwLjQyMTM5ODYzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE0NDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogYmhfZW5kX2FzeW5jX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTM4ND1zdGF0aWMgdm9pZCBiaF9lbmRfYXN5bmNfcmVhZChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9idWZmZXIuYy00MjUtICovXFxuZnMvYnVmZmVyLmM6NDI2OnZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcXG5mcy9idWZmZXIuYy00Mjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowMToyMC40NzE1NDg2MjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAyNTgxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIEFzeW5jaHJvbm91cyBXcml0ZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJoX2VuZF9hc3luY193cml0ZWAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IGl0J3MgKmdsb2JhbCouIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IHF1ZXN0aW9ucyBpbiBteSBtaW5kLiBBIGdsb2JhbCBmdW5jdGlvbiBsaWtlIHRoaXMgdXN1YWxseSBpbXBsaWVzIHRoYXQgaXQncyBoYW5kbGluZyBhIGNvcmUgb3IgY3JpdGljYWwgb3BlcmF0aW9uIHRoYXQncyBuZWVkZWQgYWNyb3NzIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIGNvbXBsZXRpb24gb2YgYXN5bmNocm9ub3VzIGJsb2NrIGRldmljZSB3cml0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBpdHMgdXNlOyB3aGF0J3MgZGVwZW5kZW50IG9uIGl0cyBjb3JyZWN0IGV4ZWN1dGlvbj8gQW5kLCBtb3JlIHRvIHRoZSBwb2ludCwgd2hhdCBkZXNpZ24gY29uc3RyYWludHMgbGVkIHRvIHRoZSBjaG9pY2Ugb2YgZ2xvYmFsIHNjb3BlPyBXYXMgaXQgZGVlbWVkIG5lY2Vzc2FyeSBmb3IgZWZmaWNpZW5jeSwgb3IgcGVyaGFwcyBhIGxlZ2FjeSBkZWNpc2lvbj8gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIG9wdGltaXphdGlvbnMuIEkgaGF2ZSB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgdG8gc2VlIGl0cyBjYWxsaW5nIGxvY2F0aW9ucy4gR2xvYmFsIHNjb3BlIGlzIGluaGVyZW50bHkgdHJpY2t5IHdpdGggY29uY3VycmVudCBwcm9ncmFtbWluZy4gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbnNpZGVyIGlmIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0J3Mgc2VlIGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgaXQgZG9lcyBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBhc3luYyB3cml0ZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjI0Ljk3NDEzMjAxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUyOTE5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9qb3VybmFsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamJkMi9qb3VybmFsLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdm9pZCBqYmQyX2RhdGFfZG9fZXNjYXBlKGNoYXIgKmRhdGEpXFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy0zMjItXFxuZnMvamJkMi9qb3VybmFsLmM6MzIzOmludCBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLFxcbmZzL2piZDIvam91cm5hbC5jLTMyNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MDE6MjUuMjE5NDI4MjUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5ODA1NzQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWV0YWRhdGEgQnVmZmVyIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLi4uIGl0J3MgYSBnbG9iYWwsIGlzbid0IGl0PyBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlIGFsb25nIHRoZSBsaW5lcyBvZiBob3cgdGhhdCBpbXBhY3RzIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIGpvdXJuYWwgd3JpdGUgcGF0aC4gVGhpbmtpbmcgYWJvdXQgaXRzIHNjb3BlLCB0aGF0IGdsb2JhbCBuYXR1cmUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBhbnkgYWNjZXNzIHRvIGl0IG5lZWRzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uLCBwb3RlbnRpYWxseSB0aHJvdWdoIG11dGV4ZXMgb3Igc3BpbmxvY2tzLCB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgaGVhdnkgSS9PIGxvYWQgb3IgY29uY3VycmVudCB0cmFuc2FjdGlvbnMuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBnbG9iYWwgYnVmZmVyIGNvdWxkIGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gYW5kIHNlcmlhbGl6YXRpb24gd2l0aGluIHRoZSBmaWxlIHN5c3RlbSdzIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiBXaGF04oCZcyB0aGUgbG9ja2luZyBzdHJhdGVneT8gSXMgaXQgZmluZS1ncmFpbmVkIGVub3VnaCwgb3IgY291bGQgd2UgYmUgZmFjaW5nIHBlcmZvcm1hbmNlIGNsaWZmcyBhcyB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBpbmNyZWFzZXM/IEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyDigJMgaXMgdGhlcmUgYSBiYWxhbmNlIHRvIGJlIHN0cnVjayBiZXR3ZWVuIHRoZSBvdmVyaGVhZCBvZiBzeW5jaHJvbml6YXRpb24gYW5kIHRoZSB0aHJvdWdocHV0IG9mIG1ldGFkYXRhIHdyaXRlcz8gVGhpcyBnbG9iYWwgdmFyaWFibGUgcmVhbGx5IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2sgZHVyaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjAxOjI5LjQxNzQ4ODc0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NDU5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9jb21taXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL2NvbW1pdC5jPTM0OD1zdGF0aWMgdm9pZCBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldChqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcXG4tLVxcbmZzL2piZDIvY29tbWl0LmMtMzc1LSAqL1xcbmZzL2piZDIvY29tbWl0LmM6Mzc2OnZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXFxuZnMvamJkMi9jb21taXQuYy0zNzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowMToyOS40NjIzMzk4NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNDczNjI3NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbmAuIEZpcnN0LCBpdCdzIGNsZWFyIHRoYXQgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gTGV0IG1lIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYSBmZXcga25vd24gZXhhbXBsZXMsIGxldCdzIHNlZSwgd2hhdCBhYm91dCBgZXh0NF9lbmRfYnVmZmVyX2lvX3N5bmNgIGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgPyBBaCwgdGhhdCdzIGBzdGF0aWNgLiBBbHJpZ2h0LiBOZXh0LCBJJ2xsIGV4YW1pbmUgYGdmczJfZW5kX2xvZ193cml0ZV9iaGAgaW4gYGZzL2dmczIvbG9wcy5jYOKAlHRoYXQgb25lJ3MgYWxzbyBgc3RhdGljYC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgYSBzZW5zZSBvZiB3aGljaCBmaWxlc3lzdGVtcyBtaWdodCBiZSBpbiBwbGF5LiBJJ20gc2VlaW5nIGBDT05GSUdfRVhUNF9GU2AsIGBDT05GSUdfSkJEMmAsIGBDT05GSUdfR0ZTMl9GU2AsIGBDT05GSUdfT0NGUzJfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfRVhGQVRfRlNgLCBgQ09ORklHX0FERlNfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBhbmQgYENPTkZJR19PTUZTX0ZTYC4gUmlnaHQsIHNvIHRoaXMgbGlzdCB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHdoaWNoIGZpbGVzeXN0ZW1zIG1pZ2h0IGxldmVyYWdlIHRoZSBqb3VybmFsLlxuXG5GaW5hbGx5LCBJIHRoaW5rIEknbGwgZ28gYmFjayB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBmcy9qYmQyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uLCBvciBqb3VybmFsIGNvbW1pdHMgaW4gZ2VuZXJhbCwgYXJlIGNvbmZpZ3VyZWQuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBnbG9iYWwgc2lnbmlmaWNhbmNlIGFuZCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjA2OjExLjkzNTk3MDUzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MjY2MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBKQkQyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2piZDIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9qYmQyL0tjb25maWc6Mjpjb25maWcgSkJEMlxcbmZzL2piZDIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5mcy9qYmQyL0tjb25maWctMTktXFxuZnMvamJkMi9LY29uZmlnOjIwOmNvbmZpZyBKQkQyX0RFQlVHXFxuZnMvamJkMi9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIkpCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDowNjoxMi4xODIyNDE1NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMzkwNzcxODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEZpbGVzeXN0ZW0gTW9kdWxlIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5SaWdodCwgc28gYEpCRDJgIGlzIGEgam91cm5hbGluZyBmaWxlc3lzdGVtOyBpdCdzIHB1bGxlZCBpbiBhcyBhIGRlcGVuZGVuY3kgYnkgYm90aCBgRVhUNF9GU2AgYW5kIGBPQ0ZTMl9GU2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgaXRzIHJvbGUgaW4gZW5zdXJpbmcgZmlsZXN5c3RlbSBpbnRlZ3JpdHkuXG5cbkkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZXhwbGljaXRseSB2ZXJpZnkgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBkZWNsYXJlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGdvIHRvIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jeSBvbiBgSkJEMmAgd2l0aGluIHRoZSBFWFQ0IGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbi4gSnVzdCB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QgaXQgdG8gYmUuIEkgd291bGRuJ3QgYmUgc3VycHJpc2VkLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTI6NTMuNTczMDE2NjU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkyODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTI6NTMuNjE3OTUxNDA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTI3Njc0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIEdGUzIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy9nZnMyL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGF0J3MgdGhlIGNhbm9uaWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEdGUzIgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHJlY2VudCBjaGFuZ2VzLCBkZXBlbmRlbmNpZXMsIG9yIHBvdGVudGlhbCBjb25mbGljdHMgaW50cm9kdWNlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBLbm93aW5nIHRoaXMgZmlsZSBpbnNpZGUgYW5kIG91dCBhbGxvd3MgbWUgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGF2YWlsYWJsZSBHRlMyIGZlYXR1cmVzLCB0aGVpciBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byBteSBjdXJyZW50IHRhc2suIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIEdGUzIuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIG9uIGZlYXR1cmVzIGxpa2UgYENPTkZJR19CTE9DS2AsIGBDT05GSUdfRlNgLCBgQ09ORklHX1hGU2AgYW5kIGBDT05GSUdfSkJEMmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MDcuNTQ1NjI4MTM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM4ODEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9nZnMyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZ2ZzMi9LY29uZmlnOjI6Y29uZmlnIEdGUzJfRlNcXG5mcy9nZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnLTI2LVxcbmZzL2dmczIvS2NvbmZpZzoyNzpjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxcbmZzL2dmczIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJHRlMyIERMTSBsb2NraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDowNy41OTAwMjMzMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzM1NjM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIE9DRlMyIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGZzL29jZnMyL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGJhY2tncm91bmQsIEkga25vdyB0aGlzIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIE9DRlMyIGZpbGVzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgYWxsIHRoZSB2YXJpb3VzIGZlYXR1cmVzLCBvcHRpb25zLCBhbmQgZGVwZW5kZW5jaWVzIG9mIE9DRlMyIGFyZSBkZWZpbmVkIGFuZCBjb250cm9sbGVkIHZpYSB0aGUgS2NvbmZpZyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIGdldCBhIGhpZ2ggbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIHBvc3NpYmxlIGJ1aWxkIHBhcmFtZXRlcnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZCBieSB0aGUgS2J1aWxkIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIHRoZXJlLCB3aGF0IGRlZmF1bHRzIGFyZSBiZWluZyBzZXQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiBob3cgT0NGUzIgaXMgYmVpbmcgY29uZmlndXJlZCwgd2hpY2gsIGluIHR1cm4sIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBsYXRlciBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoxMS4wMzczODI2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjAwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoxMS4wODEwMDc3MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMDU3MDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGQVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBmcy9mYXQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEZBVCBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLCBzbyBpdCdzIHRoZSBuYXR1cmFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIHBhcmFtZXRlcnMgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2Ygd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHRvIGNvbnRyb2wgaXQuIEdvdHRhIGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBsYXlvdXQgb2YgdGhpcyBzZWN0aW9uIGFnYWluOyB0aGVyZSdzIGFsd2F5cyBzb21ldGhpbmcgbmV3IHRvIGxlYXJuIG9yIGEgc3VidGxlIGRpZmZlcmVuY2UgY29tcGFyZWQgdG8gd2hhdCBJIHJlbWVtYmVyLiBMZXQncyBzZWUgd2hhdCBnb29kaWVzIGF3YWl0IHVzIHdpdGhpbiB0aGlzIEtjb25maWcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoxNC4yMDE1ODEyNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjk5MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGQVRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mYXQvS2NvbmZpZzoyOmNvbmZpZyBGQVRfRlNcXG5mcy9mYXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjE0LjI0NDg4NjY4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI4MjQwMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgZXhGQVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXhGQVQgZmlsZXN5c3RlbSBtb2R1bGUuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgZnMvZXhmYXQvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgYWxsIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGUga2VybmVsIGludGVncmF0ZXMgYW5kIGRlYWxzIHdpdGggdGhpcyBzcGVjaWZpYyBmaWxlc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogZW5hYmxlL2Rpc2FibGUgZmxhZ3MgZm9yIHRoZSBleEZBVCBtb2R1bGUgaXRzZWxmLCBvcHRpb25zIHJlbGF0ZWQgdG8gZGlmZmVyZW50IGZlYXR1cmVzIGxpa2UgbG9uZyBmaWxlIG5hbWUgc3VwcG9ydCBvciBqb3VybmFsaW5nLCBwZXJoYXBzIGV2ZW4gc29tZSBkZWJ1Z2dpbmcgZmxhZ3MgaWYgdGhleSdyZSBzdGlsbCBtYWludGFpbmVkLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSB3aWxsIGJlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBiYXNlZCBvbiBvdGhlciBrZXJuZWwgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgd2UgY3VzdG9taXplIHRoaXMgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBrZXJuZWwgYW5kIGJ1aWxkIHRoZSBrZXJuZWwgdG8gb3VyIHNwZWNpZmljIG5lZWRzLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGdvb2RpZXMgaXQgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MTguMjczMTMwODNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDU2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWEZBVF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leGZhdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZmF0L0tjb25maWctMi1cXG5mcy9leGZhdC9LY29uZmlnOjM6Y29uZmlnIEVYRkFUX0ZTXFxuZnMvZXhmYXQvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJleEZBVCBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjE4LjMxODE5MTY0OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyMjI2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBREZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQURGUyAoQWR2YW5jZWQgRGlzayBGaWxlIFN5c3RlbSkgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZnMvYWRmcy9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0J3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcCB0byB1bmRlcnN0YW5kIGhvdyBBREZTIGlzIGJ1aWx0IGFuZCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgbW9kdWxlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhcmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MjIuMjcwNDIxMDQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4NDgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvYWRmcy9LY29uZmlnOjI6Y29uZmlnIEFERlNfRlNcXG5mcy9hZGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQURGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvYWRmcy9LY29uZmlnLTIyLVxcbmZzL2FkZnMvS2NvbmZpZzoyMzpjb25maWcgQURGU19GU19SV1xcbmZzL2FkZnMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJBREZTIHdyaXRlIHN1cHBvcnQgKERBTkdFUk9VUylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjIyLjMxNTQxMTA5NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM0OTcwNjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmU6IGV4dDIncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZnMvZXh0Mi9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGRldGFpbGluZyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgd2UgY2FuIHR3ZWFrLCBwb3RlbnRpYWxseSBvcHRpbWl6ZSwgb3IgZGlzYWJsZSBhbHRvZ2V0aGVyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBJ4oCZbSB0aGlua2luZyB0aGluZ3MgbGlrZSBqb3VybmFsIHN1cHBvcnQsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGxhcmdlIGZpbGUgc3VwcG9ydCDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgdG9vLCBvZiBjb3Vyc2UgLSB1bmRlcnN0YW5kaW5nIHdoaWNoIG90aGVyIHN1YnN5c3RlbXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGV4dDIgY2FuIGJlIGNvcnJlY3RseSBjb25maWd1cmVkIGFuZCB1c2VkLiBBbmQsIEknbGwgYmUgc3VyZSB0byBub3RlIHRoZSB2YXJpb3VzIGRlZmF1bHQgc2V0dGluZ3MgdG8gc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBjdXJyZW50bHkgYXNzdW1lcy4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIGZpbmUtdHVuaW5nIHRoZSBleHQyIG1vZHVsZSB0byBmaXQgdGhpcyBzcGVjaWZpYyB1c2UtY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1ODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoyNS43NTAzODM5MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzY2Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQyL0tjb25maWc6Mjpjb25maWcgRVhUMl9GU1xcbmZzL2V4dDIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTZWNvbmQgZXh0ZW5kZWQgZnMgc3VwcG9ydCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5mcy9leHQyL0tjb25maWctMjAtXFxuZnMvZXh0Mi9LY29uZmlnOjIxOmNvbmZpZyBFWFQyX0ZTX1hBVFRSXFxuZnMvZXh0Mi9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIkV4dDIgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0yOS1cXG5mcy9leHQyL0tjb25maWc6MzA6Y29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMXFxuZnMvZXh0Mi9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIkV4dDIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQyL0tjb25maWctMzktXFxuZnMvZXh0Mi9LY29uZmlnOjQwOmNvbmZpZyBFWFQyX0ZTX1NFQ1VSSVRZXFxuZnMvZXh0Mi9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIkV4dDIgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoyNS43OTc3NTc5NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA2ODg2ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUgZm9yIE9NRlMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGZzL29tZnMvS2NvbmZpZ2AuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgd2hlbmV2ZXIgSSBuZWVkIHRvIGFzc2VzcyBvciB0d2VhayBhbnkgYXNwZWN0cyBvZiBhIGZpbGVzeXN0ZW0ncyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGlzIGZpbGUgdG8gY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIE9NRlMgKE9sZCBNYWNpbnRvc2ggRmlsZSBTeXN0ZW0pIG1vZHVsZSwgb3IgcGVyaGFwcyBjZXJ0YWluIHNwZWNpZmljIGZlYXR1cmVzLiBJJ20gZXNwZWNpYWxseSBrZWVuIG9uIHNlZWluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggYW55IGJyb2FkZXIgZmlsZXN5c3RlbSBzZXR0aW5ncyBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hldGhlciBpdCdzIG1vZHVsYXIsIGFuZCBhbnkgY29tcGlsZS10aW1lIGZlYXR1cmVzIHRoYXQgYXJlIHR1cm5lZCBvbiBvciBvZmYuIEknbGwgYWxzbyB0cnkgdG8gZ2F1Z2UgaXRzIHJlbGF0aXZlIGNvbXBsZXhpdHksIGFuZCBtYXliZSBtYWtlIHNvbWUgbWVudGFsIG5vdGVzIGFib3V0IGFyZWFzIHRoYXQgSSBtaWdodCBuZWVkIHRvIHJldmlzaXQgbGF0ZXIgaWYgSSBwbGFuIG9uIGFueSBraW5kIG9mIG1vZGlmaWNhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjI5LjIwNDY0Nzk3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1MDM4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9NRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb21mcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29tZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29tZnMvS2NvbmZpZzoyOmNvbmZpZyBPTUZTX0ZTXFxuZnMvb21mcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNvbmljQmx1ZSBPcHRpbWl6ZWQgTVBFRyBGaWxlIFN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDoyOS4yNDkxNTc0NTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyODYyOTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZpbGVzeXN0ZW0gY29uZmlnczogYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYEZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLiBTZWVtcyBsaWtlIGEgZmFpcmx5IHN0YW5kYXJkLCBidXQgYnJvYWQsIGxpc3QuIEhhbmcgb24gYSBzZWNvbmQuLi4gYEZBVF9GU2AuLi4gdGhhdCdzIGEgYml0IGRpZmZlcmVudC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSBiZWluZyBhIGhpZGRlbiBjb25maWcuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjay4gWWVhaCwgdGhhdCdzIHJpZ2h0LiBgRkFUX0ZTYCBpcyBzZWxlY3RlZCBieSBib3RoIGBNU0RPU19GU2AgYW5kIGBWRkFUX0ZTYC4gQmVzdCB0byBjb25maXJtIGJ5IG9wZW5pbmcgdGhlIGBmcy9mYXQvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MzMuMjc3Nzg5ODQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ5MjczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVNET1NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L0tjb25maWc9Mj1jb25maWcgRkFUX0ZTXFxuLS1cXG5mcy9mYXQvS2NvbmZpZy0zNy1cXG5mcy9mYXQvS2NvbmZpZzozODpjb25maWcgTVNET1NfRlNcXG5mcy9mYXQvS2NvbmZpZy0zOS1cXHR0cmlzdGF0ZSBcXFwiTVNET1MgZnMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTQ6MzMuMzIzMjg4NzIxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjczOTc4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5SaWdodCwgc28gYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGJvdGggdWx0aW1hdGVseSByZWx5IG9uIHRoZSBgRkFUX0ZTYCBjb3JlLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaG93IHRoZSBrZXJuZWwncyBmaWxlIHN5c3RlbSBkcml2ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBJdCdzIGEgY29tbW9uIGRlcGVuZGVuY3kgcGF0dGVybi4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVkZBVF9GU2AgaXMgZGVmaW5lZCBob3cgSSBleHBlY3QgaXQgdG8gYmUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGZzL2ZhdC9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIE5vIG5lZWQgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB3aXRoIGl0IHJpZ2h0IG5vdywganVzdCBxdWlja2x5IHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc5MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE0OjM2Ljc5MDY4OTIxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjI3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGQVRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmF0L0tjb25maWc9Mzg9Y29uZmlnIE1TRE9TX0ZTXFxuLS1cXG5mcy9mYXQvS2NvbmZpZy02Mi1cXG5mcy9mYXQvS2NvbmZpZzo2Mzpjb25maWcgVkZBVF9GU1xcbmZzL2ZhdC9LY29uZmlnLTY0LVxcdHRyaXN0YXRlIFxcXCJWRkFUIChXaW5kb3dzLTk1KSBmcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNDozNi44MzUwNTc3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcxMjk0NDY1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmlsZSBTeXN0ZW0gQnVmZmVyIE1hbmFnZW1lbnQgVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZpbGUgc3lzdGVtIGJ1ZmZlciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBpbmNsdXNpb24gaW4gb3VyIGN1cnJlbnQgYW5hbHlzaXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFjY291bnQgZm9yIGJvdGggYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGluIG91ciBjb3ZlcmFnZS4gVGhhdCBmZWVscyBjcml0aWNhbC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb3VyIGF0dGVudGlvbiBvbi4gSSdtIHRoaW5raW5nIGBiaF9lbmRfd3JpdGVgLCBgYmhfZW5kX2FzeW5jX3dyaXRlYCwgYGpiZDJfam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXJgLCBhbmQgYGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb25gLiBUaGVzZSBmZWVsIGxpa2UgdGhlIGNvcmUgY29tcG9uZW50cy4gQnV0IGlzIHRoYXQgYWxsPyBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUuXG5cbldhaXQsIEkgdGhpbmsgdGhlcmUgYXJlIHR3byBtb3JlIHBvdGVudGlhbCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBpbiBvdXIgcHVydmlldzogYF9fYmZvcmdldGAgYW5kIGBfX3N5bmNfZGlydHlfYnVmZmVyYC4gSSB0aGluayB0aGV5IGFyZSBnZXJtYW5lIHRvIG91ciBvdmVyYWxsIGNvdmVyYWdlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBfX2Jmb3JnZXRgIHRvIGNvbmZpcm0gdGhhdCBpdCdzIGhhbmRsaW5nIGJ1ZmZlcnMsIGFuZCBsZXQncyBnbyBzdHJhaWdodCB0byBgZnMvYnVmZmVyLmNgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwOTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTU6MDMuOTY0NTA2OTg4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc4NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogX19iZm9yZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTEwODA9RVhQT1JUX1NZTUJPTChfX2JyZWxzZSk7XFxuLS1cXG5mcy9idWZmZXIuYy0xMDg4LSAqL1xcbmZzL2J1ZmZlci5jOjEwODk6dm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG5mcy9idWZmZXIuYy0xMDkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTU6MDQuMDA5MzAwMzM3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDAzNzcwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQnVmZmVyIE1hbmFnZW1lbnQ6IERpZ2dpbmcgaW50byBgX19iZm9yZ2V0YCBhbmQgU3luY2hyb25pemF0aW9uKipcblxuUmlnaHQsIHNvIGBfX2Jmb3JnZXRgIGlzIGdsb2JhbCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gQ2xlYXJseSwgaXQncyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgZnMvYnVmZmVyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYF9fYmZvcmdldGAgYW5kIG90aGVyIGJ1ZmZlciBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnVmZmVyIGNhY2hlLCBpZiB0aGlzIGlzIHdoZXJlIHRoZSBkaXJ0eSBiaXRzIHJlc2lkZSwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgc3luY2hyb25pemF0aW9uIHN0cmF0ZWd5IGlzLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIGRpcnR5IGJ1ZmZlciBtYW5hZ2VtZW50LiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyB3ZSBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHBlcnNpc3RlbmNlLiBJJ20ga2VlbiB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX3N5bmNfZGlydHlfYnVmZmVyYCBpbiB0aGlzIGNvbnRleHQuIEl0IGlzIGxpa2VseSBjYWxsZWQgZHVyaW5nIGJ1ZmZlciB3cml0ZS1iYWNrLCBmaWxlIHN5c3RlbSB1bm1vdW50LCBvciBzaW1pbGFyIGNyaXRpY2FsIG9wZXJhdGlvbnMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGF0IGZ1bmN0aW9uLCBhcyBJIGV4cGVjdCBpdCB3aWxsIGludm9sdmUgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHByb2Nlc3NlcyBvciB0aHJlYWRzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3luY2hyb25pemF0aW9uIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjoxMS4wMTMwNzM2NDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDM2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKiBfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTI3MTY9RVhQT1JUX1NZTUJPTCh3cml0ZV9kaXJ0eV9idWZmZXIpO1xcbi0tXFxuZnMvYnVmZmVyLmMtMjcyMi0gKi9cXG5mcy9idWZmZXIuYzoyNzIzOmludCBfX3N5bmNfZGlydHlfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncylcXG5mcy9idWZmZXIuYy0yNzI0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MTEuMDU5MTE2MjA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NzA1ODY3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBhIEdsb2JhbCBpbiBPQ0ZTMioqXG5cbk9rYXksIHNvIGBfX3N5bmNfZGlydHlfYnVmZmVyYC4uLiB0aGF0J3MgYSBnbG9iYWwgZnVuY3Rpb24uIEhtbS4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQ/IExldCdzIHRyYWNlIGl0cyB1c2FnZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBjb250ZXh0LCBzZWVtcyB0byBiZSBpbiB0aGUgd3JpdGUgcGF0aC4gTGV0J3MgZGlnIGludG8gYG9jZnMyX3dyaXRlX2Jsb2NrYC4gSSdsbCBmaW5kIHRoYXQgaW4gYGZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNgLiBUaW1lIHRvIHNlZSBob3cgdGhpcyBnbG9iYWwgZnVuY3Rpb24gdGllcyBpbnRvIHRoZSBibG9jayB3cml0ZSBvcGVyYXRpb25zIG9mIE9DRlMyLiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFyb3VuZCBpdHMgcm9sZSBpbiBkYXRhIGludGVncml0eSBhbmQgc3luY2hyb25pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk2NCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjE2LjcyOTcwNTg0M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MDAyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIG9jZnMyX3dyaXRlX2Jsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYz0zNj1CVUZGRVJfRk5TKE5lZWRzVmFsaWRhdGUsIG5lZWRzX3ZhbGlkYXRlKTtcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTM3LVxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM6Mzg6aW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMtMzktXFx0XFx0ICAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjE2Ljc3NTMxMTg4MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDM5NDEyMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKk9DRlMyIEJsb2NrIFdyaXRlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYG9jZnMyX3dyaXRlX2Jsb2NrYC4gSSBrbm93IHRoaXMgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIGFuZCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGVzcGVjaWFsbHkgYXMgaXQgcmVsYXRlcyB0byBob3cgT0NGUzIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc3VwZXJibG9jayBhbmQgYmFja3Vwcywgc2luY2UgdGhvc2UgYXJlIGNyaXRpY2FsIG1ldGFkYXRhIGFyZWFzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IHRoaXMgaXMgcHJvYmFibHkgYGZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmNgLiBMZXQncyBmb2N1cyBvbiBgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwYCB3aXRoaW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IGl0IGNhbGxzIGFuZCBpbnRlcmFjdHMgd2l0aCBgb2NmczJfd3JpdGVfYmxvY2tgLCBzaW5jZSBpdCBpcyBwcm9iYWJseSBhIHVzZXIgb2YgdGhhdCBmdW5jdGlvbi4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGhlcmUuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM1MywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjIzLjgxNDcyNzgwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NDExNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmM9NDAyPXN0YXRpYyB2b2lkIG9jZnMyX2NoZWNrX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYy00MjQtICovXFxuZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYzo0MjU6aW50IG9jZnMyX3dyaXRlX3N1cGVyX29yX2JhY2t1cChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jLTQyNi1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjoyMy44NjExNzg0MTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MTg2MjY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBHbG9iYWwgU3RhdGUgTWFuYWdlbWVudCBpbiBGaWxlc3lzdGVtcyoqXG5cblJpZ2h0LCBgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwYCDigJMgdGhhdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgaG93IGdsb2JhbCBzdGF0ZSBpcyBtYW5hZ2VkIGFuZCBhY2Nlc3NlZC4gWW91IGtub3cgdGhlIGltcGxpY2F0aW9ucyDigJMgcG90ZW50aWFsIGNvbnRlbnRpb24sIHNlcmlhbGl6YXRpb24gaXNzdWVzLCBhbmQgZ2VuZXJhbGx5IHRoZSB0cmlja3kgbmF0dXJlIG9mIGNvbmN1cnJlbnQgYWNjZXNzIGluIGEgZmlsZXN5c3RlbS4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0cyBnbG9iYWwgbmF0dXJlIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC5cblxuTGV0IG1lIHNlZSBob3cgb3RoZXJzIGhhbmRsZSBhIHNpbWlsYXIgcmVxdWlyZW1lbnQuLi4gQWhhISBMZXQncyBleGFtaW5lIGBmYXRfc3luY19iaHNgIGluIGBmcy9mYXQvbWlzYy5jYC4gSSBleHBlY3QgdG8gc2VlIHN0cmF0ZWdpZXMgZm9yIGRlYWxpbmcgd2l0aCBkYXRhIGJ1ZmZlcnMgKEJIUykgYW5kIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGluIGEgc2ltcGxlciBmaWxlc3lzdGVtIGNvbnRleHQuIFRoaXMgbWlnaHQgcHJvdmlkZSBjbHVlcyBvbiBob3cgdGhleSdyZSBoYW5kbGluZyBzaW1pbGFyIGlzc3VlcywgZXZlbiBpZiBpdCdzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgZmlsZSBzeXN0ZW0uIENvbXBhcmluZyBhbmQgY29udHJhc3RpbmcgYXBwcm9hY2hlcyBjb3VsZCBoaWdobGlnaHQgdGhlIHN1YnRsZSBhZHZhbnRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIGRpZmZlcmVudCBzdGF0ZSBtYW5hZ2VtZW50IGFwcHJvYWNoZXMgd2l0aGluIHRoZXNlIGtpbmRzIG9mIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3ODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjoyNy45NTMwNDM4NjFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjY5NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKiBmYXRfc3luY19iaHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmF0L21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mYXQvbWlzYy5jPTM0OD1FWFBPUlRfU1lNQk9MX0dQTChmYXRfdXBkYXRlX3RpbWUpO1xcbmZzL2ZhdC9taXNjLmMtMzQ5LVxcbmZzL2ZhdC9taXNjLmM6MzUwOmludCBmYXRfc3luY19iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzKVxcbmZzL2ZhdC9taXNjLmMtMzUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MjguMDAwMzE4NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE5MjA1NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEV4RkFUIElzc3VlKipcblxuQWxyaWdodCwgYGZhdF9zeW5jX2Joc2DigKYgdGhhdCdzIGdsb2JhbCwgaXNuJ3QgaXQ/IFNvbWV0aGluZydzIG5hZ2dpbmcgYXQgbWUgYWJvdXQgaXQuIFdlIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgZXhGQVQgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGV4ZmF0X3VwZGF0ZV9iaHNgIGluIGBmcy9leGZhdC9taXNjLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgaXQncyBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgQmxvY2sgSGVhZCBTcGFjZSwgd2hpY2ggY291bGQgdmVyeSB3ZWxsIGJlIHJlbGV2YW50IHRvIHRoZSBnbG9iYWwgdmFyaWFibGUgd2UncmUgY29uY2VybmVkIGFib3V0LiBUaW1lIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHRoZXJlLiBXZSBrbm93IGV4RkFUIGNhbiBiZSB0cmlja3ksIHNvIGxldCdzIGdldCByaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxODUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjozMS43MTk1MjgxNDdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAxNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKiBleGZhdF91cGRhdGVfYmhzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4ZmF0L21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leGZhdC9taXNjLmM9MTY0PWludCBleGZhdF91cGRhdGVfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHN5bmMpXFxuLS1cXG5mcy9leGZhdC9taXNjLmMtMTc2LVxcbmZzL2V4ZmF0L21pc2MuYzoxNzc6aW50IGV4ZmF0X3VwZGF0ZV9iaHMoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLCBpbnQgbnJfYmhzLCBpbnQgc3luYylcXG5mcy9leGZhdC9taXNjLmMtMTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MzEuNzY1MDM1Nzk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjMwMDc2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeTpcblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIENvZGUgSW50ZXJhY3Rpb25zKipcblxuUmlnaHQsIGBleGZhdF91cGRhdGVfYmhzYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIEEgZ29vZCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0byB0cmFjZSBpdHMgdXNhZ2UuIEdpdmVuIGl0cyBuYW1lLCBpdCBwcm9iYWJseSBwbGF5cyBhIHJvbGUgaW4gdXBkYXRpbmcgYmxvY2sgaGVhZGVycy4gTGV0J3Mgc2VlIGhvdyBzb21ldGhpbmcgc2ltaWxhciBpcyBoYW5kbGVkIGluIG90aGVyIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgSSB0aGluayBpdCBtaWdodCBiZSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNvIGxldCdzIGNoZWNrIGBleHQyX3hhdHRyX3NldDJgIHdpdGhpbiBgZnMvZXh0Mi94YXR0ci5jYCBhcyBhIGNvbXBhcmlzb24uIEl0J2xsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IG9uIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIG1heSBiZSB1cGRhdGVkIGluIHJlbGF0aW9uIHRvIGJsb2NrIGhlYWRlcnMsIGdpdmluZyBtZSBhIHBvaW50IG9mIGNvbXBhcmlzb24gYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxscyB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NDgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjozNS41MjgwNDczMzFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTQ1MDA4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpLiogZXh0Ml94YXR0cl9zZXQyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDIveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTY6MzUuNTc1MjAwNDc5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzMzNzY4MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBleHQyX3hhdHRyX3NldDJgIFNlYXJjaCBTdHJhdGVneSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyB0byB0cmFjayBkb3duIGluc3RhbmNlcyBvZiBgZXh0Ml94YXR0cl9zZXQyYC4gU2ltcGxlIGVub3VnaCwgYSBjb21tb24gZnVuY3Rpb24gbmFtZSB0byBpbnZlc3RpZ2F0ZSB3aGVuIHdvcmtpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGV4dDIgZmlsZXN5c3RlbXMuIEhvd2V2ZXIsIHRoZSBhYnNlbmNlIG9mIHRoZSBgXmAgaW4gdGhlIHNlYXJjaCB0ZXJtIGltcGxpZXMgYSBwcmVmZXJlbmNlIGZvciBhIG1vcmUgYnJvYWQgc2VhcmNoLiBXZSdyZSBub3QgbG9va2luZyBmb3IgZXhhY3QgbWF0Y2hlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGxpbmVzIG9yIGRlZmluaXRpb25zLCBidXQgKmFueSogb2NjdXJyZW5jZXMgb2YgdGhlIHN5bWJvbCBgZXh0Ml94YXR0cl9zZXQyYCB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBleHBsb3JpbmcgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiwgaXRzIHVzYWdlIHdpdGhpbiBvdGhlciBmdW5jdGlvbnMsIHBvdGVudGlhbCBtb2RpZmljYXRpb25zIG9mIHRoZSBmdW5jdGlvbiwgb3IgZXZlbiByZWZlcmVuY2VzIHdpdGhpbiBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uLiBJdCBjb3VsZCBpbmRpY2F0ZSBhbiBpbnZlc3RpZ2F0aW9uIG9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIHBvdGVudGlhbCBidWcgaHVudGluZyBvciBtb2RpZmljYXRpb25zIHRvIHRoaXMgcGllY2Ugb2YgY29kZS4gV2UgY291bGQgYmUgbG9va2luZyBmb3I6XG5cbiogICAqKkZ1bmN0aW9uIENhbGxzOioqIFdoZXJlIGlzIGBleHQyX3hhdHRyX3NldDJgIGJlaW5nIGNhbGxlZCBmcm9tPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgYXJndW1lbnQgdXNhZ2U/XG4qICAgKipEZWZpbml0aW9ucyBhbmQgSW1wbGVtZW50YXRpb25zOioqIFdlIG1pZ2h0IHdhbnQgdG8gcmV2aWV3IHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGZpbGVzeXN0ZW0ncyBleHRlbmRlZCBhdHRyaWJ1dGUgaW1wbGVtZW50YXRpb24uXG4qICAgKipEb2N1bWVudGF0aW9uIG9yIENvbW1lbnRzOioqIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgbWVudGlvbmVkIGluIGRvY3VtZW50YXRpb24sIG9yIGhhdmUgY29tbWVudHMgaW4gb3RoZXIgbG9jYXRpb25zIGRlc2NyaWJpbmcgaXRzIHVzYWdlLlxuKiAgICoqVmFyaWF0aW9ucyBvciBTaW1pbGFyIEZ1bmN0aW9uczoqKiBXZSBtaWdodCBiZSBsb29raW5nIGZvciBzaW1pbGFyIGZ1bmN0aW9ucywgb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGUgcHJpbWFyeSBmdW5jdGlvbi5cblxuVGhlIGxhY2sgb2YgdGhlIGBeYCBtaWdodCBiZSBiZWNhdXNlIHdlIHdhbnQgdG8gc2VlIHRoZSB2YXJpb3VzIHVzZXMsIGluIHBhcnRpY3VsYXIgd2hlbiB0aGUgcGFyYW1ldGVyIG9yZGVyIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNjo0Ni45MDg5NzE2NDRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjIxMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDJfeGF0dHJfc2V0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQyL3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0Mi94YXR0ci5jLTkxLVxcbmZzL2V4dDIveGF0dHIuYzo5MjpzdGF0aWMgaW50IGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuZnMvZXh0Mi94YXR0ci5jLTkzLVxcdFxcdFxcdCAgIHN0cnVjdCBleHQyX3hhdHRyX2hlYWRlciAqKTtcXG4tLVxcbmZzL2V4dDIveGF0dHIuYz00MDY9ZXh0Ml94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQyL3hhdHRyLmMtNjM1LVxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpOyAgLyogd2Ugd2VyZSBtb2RpZnlpbmcgaW4tcGxhY2UuICovXFxuZnMvZXh0Mi94YXR0ci5jOjYzNjpcXHRcXHRlcnJvciA9IGV4dDJfeGF0dHJfc2V0Mihpbm9kZSwgYmgsIE5VTEwpO1xcbmZzL2V4dDIveGF0dHIuYy02MzctXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2V4dDIveGF0dHIuYy02NDAtXFx0XFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7ICAvKiB3ZSB3ZXJlIG1vZGlmeWluZyBpbi1wbGFjZS4gKi9cXG5mcy9leHQyL3hhdHRyLmM6NjQxOlxcdFxcdGVycm9yID0gZXh0Ml94YXR0cl9zZXQyKGlub2RlLCBiaCwgaGVhZGVyKTtcXG5mcy9leHQyL3hhdHRyLmMtNjQyLVxcdH1cXG4tLVxcbmZzL2V4dDIveGF0dHIuYz03MDU9c3RhdGljIGludFxcbmZzL2V4dDIveGF0dHIuYzo3MDY6ZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbmZzL2V4dDIveGF0dHIuYy03MDctXFx0XFx0c3RydWN0IGV4dDJfeGF0dHJfaGVhZGVyICpoZWFkZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE2OjQ2Ljk1MzU5ODQ3M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjM5MjgzNzY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBleHQyX3hhdHRyX3NldDJgIFN0YXRpYyBGdW5jdGlvbiBhbmQgTWV0YWRhdGEgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgZXh0Ml94YXR0cl9zZXQyYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgc2NvcGUsIGxpa2VseSBsaW1pdGluZyBpdHMgZGlyZWN0IHVzYWdlIG91dHNpZGUgdGhlIHNvdXJjZSBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyBmaXQgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBmaWxlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHNldCBhbmQgaG93IHRoYXQgaW1wYWN0cyBvdmVyYWxsIG1ldGFkYXRhIGNvbnNpc3RlbmN5LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSBgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIGZvciBtZXRhZGF0YSB3cml0ZSBvcGVyYXRpb25zIHRvIGJlIGRlYWx0IHdpdGguIFNwZWNpZmljYWxseSwgSSdsbCBsb29rIGludG8gYGZzL2V4dDQvZXh0NF9qYmQyLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBkaXJ0eSBtZXRhZGF0YS4gTGV0J3Mgc2VlIGhvdyB0aGF0IHRpZXMgaW50byB0aGUgam91cm5hbGluZyBwcm9jZXNzLiBJIHN1c3BlY3QgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIG1pZ2h0IGJlIHRoZSBjb3JlIGxvZ2ljIGZvciBlbnN1cmluZyBhdG9taWNpdHkgd2hlbiB3cml0aW5nIGF0dHJpYnV0ZSBkYXRhLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXMgcmVsYXRlZCB0byBqYmQyLCB3aGljaCBpbmRpY2F0ZXMgYSBqb3VybmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU5NSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjA5LjM0NjQzOTM5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MTU0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9leHQ0X2piZDIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfamJkMi5jPTM1Mz1zdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0NF9qYmQyLmMtMzY3LVxcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MzY4OmludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG5mcy9leHQ0L2V4dDRfamJkMi5jLTM2OS1cXHRcXHRcXHRcXHQgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6MDkuMzkxMjYwMzVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5MjkzNDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIERpcnR5IE1ldGFkYXRhIEhhbmRsZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYC4gSXQncyBhIGdsb2JhbCBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgdHJhY2UgdGhpcyB0byBzZWUgd2hlcmUgaXQgbWlnaHQgYmUgYmVpbmcgdXNlZCwgYW5kIHdoYXQgY29udGV4dCB0aGF0IGlzLlxuXG5UaGUgbmV4dCBvYnZpb3VzIHRoaW5nIHRvIGNoZWNrIGlzIGB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkYCBpbiBgZnMvZXh0NC9tbXAuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBoYW5kbGluZyBtaWdodCBiZS4gSSdkIGV4cGVjdCB0aGF0IGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIHdyaXRpbmcgbWV0YWRhdGEsIHBhcnRpY3VsYXJseSBzaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIFwiZGlydHlcIiBoYW5kbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGhhd2luZyBwcm9jZXNzIGlzIGludGVyYWN0aW5nIHdpdGggdGhpcyBnbG9iYWwgaGFuZGxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJlYSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBpbiB0aGUgZmlsZXN5c3RlbSwgZXNwZWNpYWxseSBhcm91bmQgbWV0YWRhdGEgY29uc2lzdGVuY3kgZHVyaW5nIHJlY292ZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjE0Ljg4NDE5NzQxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDYzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVfbW1wX2Jsb2NrX3RoYXdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L21tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvbW1wLmM9MzA9c3RhdGljIHZvaWQgZXh0NF9tbXBfY3N1bV9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcClcXG4tLVxcbmZzL2V4dDQvbW1wLmMtNDEtICovXFxuZnMvZXh0NC9tbXAuYzo0MjpzdGF0aWMgaW50IHdyaXRlX21tcF9ibG9ja190aGF3ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L21tcC5jLTQzLVxcdFxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvbW1wLmM9NTc9c3RhdGljIGludCB3cml0ZV9tbXBfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvbW1wLmMtNjMtXFx0c2NvcGVkX2d1YXJkKHN1cGVyX3dyaXRlLCBzYilcXG5mcy9leHQ0L21tcC5jOjY0OlxcdFxcdHJldHVybiB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHNiLCBiaCk7XFxuZnMvZXh0NC9tbXAuYy02NS19XFxuLS1cXG5mcy9leHQ0L21tcC5jPTI3ND1pbnQgZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21tcC5jLTM1My1cXHQgKi9cXG5mcy9leHQ0L21tcC5jOjM1NDpcXHRyZXR2YWwgPSB3cml0ZV9tbXBfYmxvY2tfdGhhd2VkKHNiLCBiaCk7XFxuZnMvZXh0NC9tbXAuYy0zNTUtXFx0aWYgKHJldHZhbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6MTQuOTI5NzA4NzUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzI2MzI3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHdyaXRlX21tcF9ibG9ja190aGF3ZWRgIEZ1bmN0aW9uKipcblxuSG1tLCBzbyBgd3JpdGVfbW1wX2Jsb2NrX3RoYXdlZGAgaXMgbWFya2VkIGFzIGEgYHN0YXRpY2AgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBpdHMgc2NvcGUuIEl0J3Mgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggdGVsbHMgbWUgaXQncyBsaWtlbHkgYSBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgbGFyZ2VyIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgR0ZTMiBmaWxlIHN5c3RlbS4gTm93LCBnaXZlbiB0aGUgXCJ0aGF3ZWRcIiBwYXJ0IG9mIHRoZSBuYW1lLCBpdCBoYXMgdG8gZG8gd2l0aCBob3cgdGhlIGZpbGUgc3lzdGVtIHdyaXRlcyBibG9ja3Mgd2hlbiB0aGV5IGhhdmUgYmVlbiBcInRoYXdlZFwiIGFmdGVyIGEgcG90ZW50aWFsIHNuYXBzaG90IGNyZWF0aW9uLCBvciBhIHNpbWlsYXIgb3BlcmF0aW9uLiBUbyB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiB0aGF0IGxvZ2ljLCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGludGVyZmFjZXMgd2l0aCBvdGhlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoIGBnZnMyX3BpbmBcblxuSSBrbm93IHRoYXQgYGdmczJfcGluYCBpcyBsaWtlbHkgaW1wb3J0YW50IHRvIGludmVzdGlnYXRlIHRoaXMsIHNpbmNlIEkgYW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRpbmcgb2YgZGF0YSB0byB0aGUgZmlsZSBzeXN0ZW0sIGFuZCB0aGlzIGBnZnMyX3BpbmAgaXMgY29tbW9ubHkgdXNlZCB0byBcInBpblwiIGNlcnRhaW4gYmxvY2tzIG9mIHRoZSBmaWxlIHN5c3RlbSwgc28gdGhhdCB0aGV5J3JlIG5vdCBzd2FwcGVkIG91dCBvZiBtZW1vcnkuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvciBtZXRhZGF0YS5cblxuQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGp1bXAgaW50byB0aGUgYGZzL2dmczIvbG9wcy5jYCBzb3VyY2UgY29kZSBhbmQgc2VlIGhvdyBgZ2ZzMl9waW5gIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHdyaXRlX21tcF9ibG9ja190aGF3ZWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hhdCByZXNvdXJjZXMgaXQgYWNxdWlyZXMgYW5kIHJlbGVhc2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGNvbnNpc3RlbmN5IGFuZCBob3cgdGhlIHRoYXdpbmcgbWVjaGFuaXNtIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjE5LjIwMjM0NDkyMVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3Njk1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGdmczJfcGluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvbG9wcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvbG9wcy5jLTQxLSAqL1xcbmZzL2dmczIvbG9wcy5jOjQyOnZvaWQgZ2ZzMl9waW4oc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuZnMvZ2ZzMi9sb3BzLmMtNDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzoxOS4yNDgxMjEyMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI5OTEzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIElzc3VlcyBpbiB0aGUgR0ZTMiBGaWxlc3lzdGVtKipcblxuQWxyaWdodCwgc28gYGdmczJfcGluYCBpcyBmbGFnZ2VkIGFzIGEgZ2xvYmFsIHZhcmlhYmxlLiBUaGF0J3MgaW1tZWRpYXRlbHkgc29tZXRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWU7IGdsb2JhbHMgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50IGxpa2UgYSBmaWxlc3lzdGVtIGFyZSBvZnRlbiBhIHNvdXJjZSBvZiBjb250ZW50aW9uIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIHNjb3BlIGJldHRlci5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGdsb2JhbCBtaWdodCBiZSBpbnZvbHZlZCwgSSBzaG91bGQgZm9jdXMgb24gYSBsaWtlbHkgd3JpdGUgcGF0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbG9vayBhdCBob3cgZGF0YSBnZXRzIHdyaXR0ZW4gdG8gYW4gaW5vZGUuIGBfX29tZnNfd3JpdGVfaW5vZGVgIGluIGBmcy9vbWZzL2lub2RlLmNgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIHdpdGhpbiB0aGUgT01GUyBmaWxlc3lzdGVtIGNvbnRleHQsIGFzc3VtaW5nIGBvbWZzYCBpcyByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBvbi1kaXNrIHN0cnVjdHVyZS4gSXQgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBpbm9kZSBvbiBkaXNrIHdoZW4gYSB3cml0ZSBvY2N1cnMuIFRoaXMgaXMgd2hlcmUgSSdsbCBzdGFydCBkaWdnaW5nIHRvIHNlZSBob3cgYGdmczJfcGluYCBtaWdodCBiZSB0b3VjaGVkIGR1cmluZyBhIHdyaXRlIG9wZXJhdGlvbi4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgaW1wbGljYXRpb25zIGlmIGl0cyBnbG9iYWwgbmF0dXJlIGlzIHBvb3JseSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE3OjIzLjc3ODAzNjk2MloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTI5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19vbWZzX3dyaXRlX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29tZnMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vbWZzL2lub2RlLmM9ODU9c3RhdGljIHZvaWQgb21mc191cGRhdGVfY2hlY2tzdW1zKHN0cnVjdCBvbWZzX2lub2RlICpvaSlcXG4tLVxcbmZzL29tZnMvaW5vZGUuYy0xMDMtXFxuZnMvb21mcy9pbm9kZS5jOjEwNDpzdGF0aWMgaW50IF9fb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG5mcy9vbWZzL2lub2RlLmMtMTA1LXtcXG4tLVxcbmZzL29tZnMvaW5vZGUuYz0xNzQ9c3RhdGljIGludCBvbWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbmZzL29tZnMvaW5vZGUuYy0xNzUte1xcbmZzL29tZnMvaW5vZGUuYzoxNzY6XFx0cmV0dXJuIF9fb21mc193cml0ZV9pbm9kZShpbm9kZSwgd2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xcbmZzL29tZnMvaW5vZGUuYy0xNzctfVxcbi0tXFxuZnMvb21mcy9pbm9kZS5jPTE3OT1pbnQgb21mc19zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvb21mcy9pbm9kZS5jLTE4MC17XFxuZnMvb21mcy9pbm9kZS5jOjE4MTpcXHRyZXR1cm4gX19vbWZzX3dyaXRlX2lub2RlKGlub2RlLCAxKTtcXG5mcy9vbWZzL2lub2RlLmMtMTgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6MjMuODIzNjk0OTNaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzNjg0ODkyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBhZGZzX2Rpcl9zeW5jYCBGb2xsb3dpbmcgYSBMb29rIGF0IGEgU3RhdGljIElub2RlIFdyaXRlIEZ1bmN0aW9uKipcblxuUmlnaHQsIGBfX29tZnNfd3JpdGVfaW5vZGVgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkIGFuZCBpcyBsaWtlbHkgcGFydCBvZiBhIG1vcmUgbGltaXRlZCBzY29wZSB3aXRoaW4gdGhlIE9NRlMgZmlsZXN5c3RlbS4gR2l2ZW4gdGhhdCBjb250ZXh0LCBJJ20gbm93IGN1cmlvdXMgYWJvdXQgZGlyZWN0b3J5IHN5bmNocm9uaXphdGlvbiB3aXRoaW4gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSwgbGV0J3Mgc2VlLCB0aGUgQURGUyBmaWxlc3lzdGVtLiBNeSBpbnRlbnRpb24gaXMgdG8gY29udHJhc3QgaG93IHRoZXkgYXBwcm9hY2ggaW5vZGUgd3JpdGluZyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgdXBkYXRlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgYWRmc19kaXJfc3luY2AgZnVuY3Rpb24uIExldCdzIGhlYWQgb3ZlciB0byBgZnMvYWRmcy9kaXIuY2AgYW5kIGRpZyBpbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSB1c2VmdWwgaW5zaWdodCBpbnRvIGEgZGlmZmVyZW50IGFwcHJvYWNoIGZvciBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGlzIHJlbGV2YW50IGdpdmVuIHRoZSBwcmlvciBleGFtaW5hdGlvbiBvZiBhIHN0YXRpYywgbGlrZWx5IGludGVybmFsLCB3cml0ZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4MjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzozNi4xOTIxOTIwNTRaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDI1MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZnNfZGlyX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWRmcy9kaXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZGZzL2Rpci5jPTE3Nz1zdGF0aWMgdm9pZCBhZGZzX2Rpcl9tYXJrX2RpcnR5KHN0cnVjdCBhZGZzX2RpciAqZGlyKVxcbi0tXFxuZnMvYWRmcy9kaXIuYy0xODUtXFxuZnMvYWRmcy9kaXIuYzoxODY6c3RhdGljIGludCBhZGZzX2Rpcl9zeW5jKHN0cnVjdCBhZGZzX2RpciAqZGlyKVxcbmZzL2FkZnMvZGlyLmMtMTg3LXtcXG4tLVxcbmZzL2FkZnMvZGlyLmM9Mjc2PWFkZnNfZGlyX3VwZGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9iaiwgaW50IHdhaXQpXFxuLS1cXG5mcy9hZGZzL2Rpci5jLTMwNC1cXHRpZiAod2FpdClcXG5mcy9hZGZzL2Rpci5jOjMwNTpcXHRcXHRyZXQgPSBhZGZzX2Rpcl9zeW5jKFxcdTAwMjZkaXIpO1xcbmZzL2FkZnMvZGlyLmMtMzA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzozNi4yMzY2MjQwODNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NzU3MjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqU3RhdGljIEFuYWx5c2lzIG9mIEFERlMgRGlyZWN0b3J5IFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYGFkZnNfZGlyX3N5bmNgLiBGaXJzdCBvYnNlcnZhdGlvbiDigJMgaXQncyBzdGF0aWMuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTm93LCB0byB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYW5kIGpvdXJuYWwgbWFuYWdlbWVudCBpbiB0aGUgT0NGUzIgZmlsZSBzeXN0ZW0uIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiBgX19vY2ZzMl9qb3VybmFsX2FjY2Vzc2AgbG9jYXRlZCBpbiBgZnMvb2NmczIvam91cm5hbC5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyBgYWRmc19kaXJfc3luY2AgbWlnaHQgYmUgaW50ZXJhY3RpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHdpdGggdGhlIGpvdXJuYWxpbmcgbWVjaGFuaXNtIGR1cmluZyBzeW5jaHJvbml6YXRpb24gZXZlbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBqb3VybmFsIGludGVyYWN0aW9ucyBpcyBwYXJhbW91bnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mjk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDAuOTg0MjAwNDE4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwMTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX29jZnMyX2pvdXJuYWxfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2pvdXJuYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9qb3VybmFsLmM9NTI3PXN0YXRpYyB2b2lkIG9jZnMyX2Zyb3plbl90cmlnZ2VyKHN0cnVjdCBqYmQyX2J1ZmZlcl90cmlnZ2VyX3R5cGUgKnRyaWdnZXJzLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jLTUzNS1cXHQgKiBtdXN0IHVuY29uZGl0aW9uYWxseSBjb21wdXRlIHRoZSBlY2MgZGF0YS5cXG5mcy9vY2ZzMi9qb3VybmFsLmM6NTM2OlxcdCAqIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoKSB3aWxsIG9ubHkgc2V0IHRoZSB0cmlnZ2VycyBpZlxcbmZzL29jZnMyL2pvdXJuYWwuYy01MzctXFx0ICogbWV0YWVjYyBpcyBlbmFibGVkLlxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTU0Nj1zdGF0aWMgdm9pZCBvY2ZzMl9kcV9mcm96ZW5fdHJpZ2dlcihzdHJ1Y3QgamJkMl9idWZmZXJfdHJpZ2dlcl90eXBlICp0cmlnZ2VycyxcXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYy01NTUtXFx0ICogbXVzdCB1bmNvbmRpdGlvbmFsbHkgY29tcHV0ZSB0aGUgZWNjIGRhdGEuXFxuZnMvb2NmczIvam91cm5hbC5jOjU1NjpcXHQgKiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKCkgd2lsbCBvbmx5IHNldCB0aGUgdHJpZ2dlcnMgaWZcXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTU3LVxcdCAqIG1ldGFlY2MgaXMgZW5hYmxlZC5cXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYz01NjY9c3RhdGljIHZvaWQgb2NmczJfZGJfZnJvemVuX3RyaWdnZXIoc3RydWN0IGpiZDJfYnVmZmVyX3RyaWdnZXJfdHlwZSAqdHJpZ2dlcnMsXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNTc1LVxcdCAqIG11c3QgdW5jb25kaXRpb25hbGx5IGNvbXB1dGUgdGhlIGVjYyBkYXRhLlxcbmZzL29jZnMyL2pvdXJuYWwuYzo1NzY6XFx0ICogX19vY2ZzMl9qb3VybmFsX2FjY2VzcygpIHdpbGwgb25seSBzZXQgdGhlIHRyaWdnZXJzIGlmXFxuZnMvb2NmczIvam91cm5hbC5jLTU3Ny1cXHQgKiBtZXRhZWNjIGlzIGVuYWJsZWQuXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmM9NjQ3PXZvaWQgb2NmczJfaW5pdGlhbGl6ZV9qb3VybmFsX3RyaWdnZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNjU1LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo2NTY6c3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIvam91cm5hbC5jLTY1Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTczND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzM4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3Mzk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc0MC1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2b3NiLVxcdTAwM2VzX2pvdXJuYWxfdHJpZ2dlcnNbT0NGUzJfSlRSX0RJXSxcXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYz03NDQ9aW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jLTc0OC1cXG5mcy9vY2ZzMi9qb3VybmFsLmM6NzQ5OlxcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLFxcbmZzL29jZnMyL2pvdXJuYWwuYy03NTAtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm9zYi1cXHUwMDNlc19qb3VybmFsX3RyaWdnZXJzW09DRlMyX0pUUl9FQl0sXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmM9NzU0PWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSxcXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuYy03NTgtXFxuZnMvb2NmczIvam91cm5hbC5jOjc1OTpcXHRyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCxcXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzYwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfUkJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc2ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzY4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3Njk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc3MC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfR0RdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc3ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzc4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3Nzk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc4MC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfREJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc4ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzg4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3ODk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTc5MC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfWEJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTc5ND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtNzk4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo3OTk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTgwMC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRFFdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTgwND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtODA4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo4MDk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTgxMC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRFJdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTgxND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtODE4LVxcbmZzL29jZnMyL2pvdXJuYWwuYzo4MTk6XFx0cmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsXFxuZnMvb2NmczIvam91cm5hbC5jLTgyMC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvc2ItXFx1MDAzZXNfam91cm5hbF90cmlnZ2Vyc1tPQ0ZTMl9KVFJfRExdLFxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5jPTgyND1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmMtODI2LXtcXG5mcy9vY2ZzMi9qb3VybmFsLmM6ODI3OlxcdHJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIGJoLCBOVUxMLCB0eXBlKTtcXG5mcy9vY2ZzMi9qb3VybmFsLmMtODI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDEuMDMyMzA3NTE3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDQ5MTY5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIE9DRlMyIGFuZCBHRlMyIEpvdXJuYWxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG9jZnMyYCBjb2RlIGFuZCBJIHNlZSB0aGlzIGZ1bmN0aW9uLCBgX19vY2ZzMl9qb3VybmFsX2FjY2Vzc2AuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQncyBzY29wZWQgdG8gdGhlIHNvdXJjZSBmaWxlIHdoZXJlIGl0J3MgZGVmaW5lZCwgd2hpY2ggaXMgZmFpcmx5IHN0YW5kYXJkIGZvciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBIb3dldmVyLCBJIGFsc28gc2VlIHRoaXMgb3RoZXIsIHNpbWlsYXJseSBuYW1lZCBmdW5jdGlvbiwgYG9jZnMyX2pvdXJuYWxfYWNjZXNzYCwgYW5kIHRoYXQncyBnbG9iYWwuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgY29uZnVzaW9uIG9yIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgc2NvcGUgd2hlbiBJIGNvbWUgYmFjayBhbmQgYXVkaXQgdGhpcyBjb2RlIGxhdGVyLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZSBHRlMyIGZpbGUgc3lzdGVtIGlzIHNwcmluZ2luZyB0byBtaW5kLiBJdCdzIHRpbWUgdG8gY2hlY2sgaG93IEdGUzIgaGFuZGxlcyBzb21ldGhpbmcgYW5hbG9nb3VzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBHRlMyIGNvZGUgYmFzZSBub3cuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGBnZnMyX2FpbDFfZW1wdHlfb25lYCBmdW5jdGlvbiwgZm91bmQgaW4gYGZzL2dmczIvbG9nLmNgLiBTZWVpbmcgaG93IHRoZSBHRlMyIGF1dGhvcnMgaGFuZGxlIHJlbGF0ZWQgY2FzZXMgbWF5IHByb3ZpZGUgc29tZSB1c2VmdWwgaW5zaWdodHMgYW5kIGJlc3QtcHJhY3RpY2UgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzIyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDYuNjM3MjI3MTI2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTczMDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZnMyX2FpbDFfZW1wdHlfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvbG9nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9sb2cuYz0yNzg9c3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfdHIoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3RyYW5zICp0cixcXG4tLVxcbmZzL2dmczIvbG9nLmMtMjkxLS8qKlxcbmZzL2dmczIvbG9nLmM6MjkyOiAqIGdmczJfYWlsMV9lbXB0eV9vbmUgLSBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zIGluIHRoZSBBSUwgaGFzIGJlZW4gc3luY2VkXFxuZnMvZ2ZzMi9sb2cuYy0yOTMtICogQHNkcDogdGhlIGZpbGVzeXN0ZW1cXG4tLVxcbmZzL2dmczIvbG9nLmMtMjk5LVxcbmZzL2dmczIvbG9nLmM6MzAwOnN0YXRpYyBpbnQgZ2ZzMl9haWwxX2VtcHR5X29uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfdHJhbnMgKnRyLFxcbmZzL2dmczIvbG9nLmMtMzAxLVxcdFxcdFxcdFxcdGludCAqbWF4X3Jldm9rZXMpXFxuLS1cXG5mcy9nZnMyL2xvZy5jPTM1Mj1zdGF0aWMgYm9vbCBnZnMyX2FpbDFfZW1wdHkoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBtYXhfcmV2b2tlcylcXG4tLVxcbmZzL2dmczIvbG9nLmMtMzU5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHRyLCBzLCBcXHUwMDI2c2RwLVxcdTAwM2VzZF9haWwxX2xpc3QsIHRyX2xpc3QpIHtcXG5mcy9nZnMyL2xvZy5jOjM2MDpcXHRcXHRpZiAoIWdmczJfYWlsMV9lbXB0eV9vbmUoc2RwLCB0ciwgXFx1MDAyNm1heF9yZXZva2VzKSBcXHUwMDI2XFx1MDAyNiBvbGRlc3RfdHIpXFxuZnMvZ2ZzMi9sb2cuYy0zNjEtXFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZ0ci1cXHUwMDNldHJfbGlzdCwgXFx1MDAyNnNkcC1cXHUwMDNlc2RfYWlsMl9saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTc6NDYuNjgyOTY2NjU0WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTU2NjQ4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGdmczJfYWlsMV9lbXB0eV9vbmVgKipcblxuUmlnaHQsIGBnZnMyX2FpbDFfZW1wdHlfb25lYCBpcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGFib3V0IGl0cyBzY29wZSBhbmQgaG93IGl0J3MgbGlrZWx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBHRlMyIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0J3MgZGVsdmUgaW50byB0aGUgam91cm5hbC4gU3BlY2lmaWNhbGx5LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgamJkMl9mY193YWl0X2J1ZnNgIGluIGBmcy9qYmQyL2pvdXJuYWwuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGFuZCBob3cgdGhpcyBzdGF0aWMgdmFyaWFibGUgcGxheXMgYSByb2xlIGluIGZsb3cgY29udHJvbCB3aXRoaW4gdGhlIGpvdXJuYWwsIGFuZCBwYXJ0aWN1bGFybHksIHdoYXQgaW1wYWN0IGl0IGhhcyBvbiBidWZmZXIgd2FpdGluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGNhbGxzIGNvb3JkaW5hdGUgd2l0aCwgb3IgcG90ZW50aWFsbHkgaW5mbHVlbmNlLCBBSUwgb3BlcmF0aW9ucyB3aXRoaW4gR0ZTMi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1NS45Mzg2MzQzMzNaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODA4OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpiZDJfZmNfd2FpdF9idWZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2piZDIvam91cm5hbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvam91cm5hbC5jPTg2NT1FWFBPUlRfU1lNQk9MKGpiZDJfZmNfZ2V0X2J1Zik7XFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy04NzAtICovXFxuZnMvamJkMi9qb3VybmFsLmM6ODcxOmludCBqYmQyX2ZjX3dhaXRfYnVmcyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCBudW1fYmxrcylcXG5mcy9qYmQyL2pvdXJuYWwuYy04NzIte1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtODk4LX1cXG5mcy9qYmQyL2pvdXJuYWwuYzo4OTk6RVhQT1JUX1NZTUJPTChqYmQyX2ZjX3dhaXRfYnVmcyk7XFxuZnMvamJkMi9qb3VybmFsLmMtOTAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1NS45ODQ0NTA2OTFaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMzI0MTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgamJkMl9mY193YWl0X2J1ZnNgIFVzYWdlKipcblxuQWxyaWdodCwgc28gYGpiZDJfZmNfd2FpdF9idWZzYCBpcyBhIGdsb2JhbCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBHbG9iYWwgdmFyaWFibGVzIGFsd2F5cyByZXF1aXJlIGV4dHJhIHNjcnV0aW55IGluIHRoaXMgY29udGV4dC4gTGV0IG1lIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBKQkQyIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBgamJkMl9mcmVlemVfamhfZGF0YWAgZnVuY3Rpb24gYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGEgdHJhbnNhY3Rpb24gbWlnaHQgc3RhbGwgd2FpdGluZyBmb3IgYnVmZmVycyB0byBmcmVlIGJlZm9yZSBpdCBjYW4gYmUgZnJvemVuLiBJIHdpbGwgY2hlY2sgdGhlIGBmcy9qYmQyL3RyYW5zYWN0aW9uLmNgIGZpbGUgYXMgdGhlIGxpa2VseSBhcmVhIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBvciwgd29yc2UsIGRlYWRsb2NrIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1OS42MDc2OTQ5ODFaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODcyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpiZDJfZnJlZXplX2poX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi90cmFuc2FjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvdHJhbnNhY3Rpb24uYz05MDg9c3RhdGljIHZvaWQgd2Fybl9kaXJ0eV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTctLyogQ2FsbCB0X2Zyb3plbiB0cmlnZ2VyIGFuZCBjb3B5IGJ1ZmZlciBkYXRhIGludG8gamgtXFx1MDAzZWJfZnJvemVuX2RhdGEuICovXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjkxODpzdGF0aWMgdm9pZCBqYmQyX2ZyZWV6ZV9qaF9kYXRhKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy05MTkte1xcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTk0OD1kb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLFxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTExMzktXFx0XFx0ZnJvemVuX2J1ZmZlciA9IE5VTEw7XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjExNDA6XFx0XFx0amJkMl9mcmVlemVfamhfZGF0YShqaCk7XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTExNDEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxNzo1OS42NTU1NzQyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzY1ODQyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkpCRDIgQW5hbHlzaXM6IFBpbnBvaW50aW5nIHRoZSBGcmVlemUqKlxuXG5SaWdodCwgYGpiZDJfZnJlZXplX2poX2RhdGFgLiBUaGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSB0aGF0J3MgY2FsbGVkIGZyb20uLi4gT2theSwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgbG9ja2luZyBzY2hlbWUgaW4gdGhlIGpvdXJuYWxpbmcgbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIHRoZSByb290IG9mIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHdyaXRlcyBhbmQgZnJlZXppbmcgdGhlIGpvdXJuYWwuXG5cbkxldCdzIGRpdmUgaW50byBgZG9fZ2V0X3dyaXRlX2FjY2Vzc2Agd2l0aGluIGBmcy9qYmQyL3RyYW5zYWN0aW9uLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYWNxdWlyaW5nIHdyaXRlIGFjY2VzcyB0byB0aGUgam91cm5hbC4gSXQncyBjcnVjaWFsIHRvIHNlZSBpZiBpdCdzIGNvbnRyaWJ1dGluZyB0byBhbnkgbG9jayBjb250ZW50aW9uIG9yIGJsb2NraW5nIHJlbGF0ZWQgdG8gdGhlIGZyZWV6ZSBvcGVyYXRpb24uIEl0J3MgbGlrZWx5IHRoYXQgYSBjb21tb24gZnVuY3Rpb24gaXMgY2F1c2luZyBib3RoIGlzc3Vlcy4gVGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBqb3VybmFsIGZyZWV6ZSBtZWNoYW5pc20gYXJlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBwYXRoIHdpdGggc29tZSBmb2N1c2VkIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwMjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxODowMy42MzIxNjE0NzlaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTkyMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2dldF93cml0ZV9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi90cmFuc2FjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvdHJhbnNhY3Rpb24uYz05NDc9c3RhdGljIGludFxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYzo5NDg6ZG9fZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCxcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtOTQ5LVxcdFxcdFxcdGludCBmb3JjZV9jb3B5KVxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTExNjk9c3RhdGljIGJvb2wgamJkMl93cml0ZV9hY2Nlc3NfZ3JhbnRlZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyMDktXFx0ICogZG9lc24ndCBnZXQgcmVvcmRlcmVkIGFuZCBzZWUgaW5jb25zaXN0ZW50IHN0YXRlIG9mIGNvbmN1cnJlbnRcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTIxMDpcXHQgKiBkb19nZXRfd3JpdGVfYWNjZXNzKCkuXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTEyMTEtXFx0ICovXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM9MTIzMz1pbnQgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xMjYyLVxcdCAqIGNvbXBsZXRlcyBhbnkgb3V0c3RhbmRpbmcgSU8gYmVmb3JlIHByb2NlZWRpbmcuICovXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjEyNjM6XFx0cmMgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDApO1xcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xMjY0LVxcdGpiZDJfam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTtcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0xNDAxPWludCBqYmQyX2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTQyMC1cXHQgKi9cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTQyMTpcXHRlcnIgPSBkb19nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgamgsIDEpO1xcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0xNDIyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM9MjEzNz1zdGF0aWMgdm9pZCBfX2piZDJfam91cm5hbF91bmZpbGVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKVxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTIxNzItICogV2hvIGVsc2UgaXMgYWZmZWN0ZWQgYnkgdGhpcz8gIGhtbS4uLiAgUmVhbGx5IHRoZSBvbmx5IGNvbnRlbmRlclxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYzoyMTczOiAqIGlzIGRvX2dldF93cml0ZV9hY2Nlc3MoKSAtIGl0IGNvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIGJ1ZmZlciB3aGlsZVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy0yMTc0LSAqIGpvdXJuYWxfdHJ5X3RvX2ZyZWVfYnVmZmVyKCkgaXMgY2hhbmdpbmcgaXRzIHN0YXRlLiAgQnV0IHRoYXRcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYz0yNTM2PXZvaWQgX19qYmQyX2pvdXJuYWxfZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgsXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1Ny1cXHRcXHQgKiBpbnN0ZWFkIG9mIGJ1ZmZlcl9kaXJ0eS4gV2Ugc2hvdWxkIG5vdCBzZWUgYSBkaXJ0eSBiaXQgc2V0XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjI1NTg6XFx0XFx0ICogaGVyZSBiZWNhdXNlIHdlIGNsZWFyIGl0IGluIGRvX2dldF93cml0ZV9hY2Nlc3MgYnV0IGUuZy5cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMjU1OS1cXHRcXHQgKiB0dW5lMmZzIGNhbiBtb2RpZnkgdGhlIHNiIGFuZCBzZXQgdGhlIGRpcnR5IGJpdCBhdCBhbnkgdGltZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxODowMy42NzY3NTc5ODdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MjEyODgwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoaXMg4oCTIGEgZGlzdGlsbGVkIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgV3JpdGUgQWNjZXNzIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3cml0ZSBhY2Nlc3MgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgamJkMiBqb3VybmFsaW5nIHN5c3RlbS4gVGhlIGNvZGUgaGFzIG1lIGEgYml0IHB1enpsZWQsIHNpbmNlIGBkb19nZXRfd3JpdGVfYWNjZXNzYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbXBsaWVzIGl0J3Mgc2NvcGVkIGxvY2FsbHksIHdoaWxlIGBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzc2Agc2VlbXMgdG8gYmUgZ2xvYmFsLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgSSB3YW50IHRvIGNsYXJpZnkgaG93IHRoaXMgd29ya3MuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0J3MgaGFwcGVuaW5nIGluc2lkZSBgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3NgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaW1wbGVtZW50YXRpb24gZmlsZSBmb3IgdHJhbnNhY3Rpb25zLCB3aGljaCBzaG91bGQgYmUgYGZzL2piZDIvdHJhbnNhY3Rpb24uY2AuIEknbGwgZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGV5IGFyZSByZWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA1OCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE4OjE0LjM5ODA0OTg5MVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4Mjk1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sKS4qIGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2piZDIvdHJhbnNhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL3RyYW5zYWN0aW9uLmM9MTE2OT1zdGF0aWMgYm9vbCBqYmQyX3dyaXRlX2FjY2Vzc19ncmFudGVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIzMi1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6MTIzMzppbnQgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTIzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIwOjE4OjE0LjQ0Mzg4NDY4WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzE2NjM4MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBXcml0ZSBBY2Nlc3MgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzc2Agd29ya3MgYXQgYSBnbG9iYWwgbGV2ZWwuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJhY3Rpb24uIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHBvdGVudGlhbCBmb2N1cyBwb2ludHMsIG15IGluaXRpYWwgbGlzdCBpbmNsdWRlZCBhIGxvdCBvZiBmdW5jdGlvbnMsIGJ1dCBpdCdzIGdvdHRlbiB1bnJ1bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVyY29tcGxpY2F0ZSB0aGluZ3MgaGVyZSwgc28gSSBuZWVkIHRvIHJlZmluZSB0aGF0IGxpc3QgdG8gdGhlIG1vc3QgcmVsZXZhbnQgb3BlcmF0aW9ucy5cblxuSSdtIHplcm9pbmcgaW4gb24gdGhpbmdzIHRoYXQgZGlyZWN0bHkgdG91Y2ggYnVmZmVyIHdyaXRlczogYGJoX2VuZF93cml0ZWAsIGBiaF9lbmRfYXN5bmNfd3JpdGVgLCB0aGUgZnJlZWluZyBvZiBidWZmZXJzIHdpdGggYF9fYmZvcmdldGAsIHN5bmNpbmcgZGlydHkgYnVmZmVycyB3aXRoIGBfX3N5bmNfZGlydHlfYnVmZmVyYCwgYW5kIHRoZSBqb3VybmFsIHdyaXRlcyBsaWtlIGBqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyYCBhbmQgY29tbWl0cyB3aXRoIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYC4gSSdsbCBhbHNvIHdhdGNoIGBqYmQyX2ZjX3dhaXRfYnVmc2AuIFRoZW4gdGhlcmUgYXJlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgd3JpdGVzIGxpa2UgYG9jZnMyX3dyaXRlX2Jsb2NrYCwgYGZhdF9zeW5jX2Joc2AsIGBleGZhdF91cGRhdGVfYmhzYCwgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGFuZCBgZ2ZzMl9waW5gLiBJIHRoaW5rIHRoaXMgbGlzdCBjb3ZlcnMgdGhlIGhpZ2gtbGV2ZWwgd3JpdGUgcGF0aHdheXMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlc2Ugd3JpdGVzLiBUaGUgZmlsZXN5c3RlbXMgdGhhdCBhcmUgcmVsZXZhbnQgaW5jbHVkZSBgRVhUNF9GU2AsIGBKQkQyYCwgYEdGUzJfRlNgLCBgT0NGUzJfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBFWEZBVF9GU2AsIGBBREZTX0ZTYCwgYEVYVDJfRlNgLCBhbmQgYE9NRlNfRlNgLlxuXG5HaXZlbiB0aGF0LCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYEpCRDJgIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4gQWgsIHJpZ2h0LCBpdCdzIHNlbGVjdGVkIHdoZW4gYEVYVDRfRlNgIG9yIGBPQ0ZTMl9GU2AgYXJlIHNlbGVjdGVkLCBzbyBpdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBpdCB0byBiZSBzYWZlLCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIG5lZWQgdG8gZXhjbHVkZSBpdCBpbiBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uXG5cbkknbSBhbHNvIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGZzL2J1ZmZlci5jYCBmb3IgYGttYXBfbG9jYWxfYmhgIGFuZCBga3VubWFwX2xvY2FsX2JoYCwgd2hpY2ggSSByZW1lbWJlciBhcmUgYWN0dWFsbHkgaW5saW5lIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhleSB3b3JrIGluIGNvbnRleHQgb2YgdGhlIHdyaXRlLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgYGZzL2piZDIvY29tbWl0LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNoZWNrc3VtIGZ1bmN0aW9ucywgbGlrZSBgamJkMl9jaGVja3N1bV9kYXRhYCBhbmQgYGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0YCB0aGF0IGFyZSByZWxldmFudCBoZXJlLiBUaGF0IHNob3VsZCBmaWxsIG91dCB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6MjYuMTYwNTI2MTgzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ2MTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJqYmQyX2NoZWNrc3VtX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9jb21taXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qYmQyL2NvbW1pdC5jPTI4Mj1zdGF0aWMgaW50IGpvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhqb3VybmFsX3QgKmpvdXJuYWwsXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTMyNy1cXG5mcy9qYmQyL2NvbW1pdC5jOjMyODpzdGF0aWMgX191MzIgamJkMl9jaGVja3N1bV9kYXRhKF9fdTMyIGNyYzMyX3N1bSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG5mcy9qYmQyL2NvbW1pdC5jLTMyOS17XFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jPTM3Nj12b2lkIGpiZDJfam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvamJkMi9jb21taXQuYy03NDQtXFx0XFx0XFx0XFx0XFx0Y3JjMzJfc3VtID1cXG5mcy9qYmQyL2NvbW1pdC5jOjc0NTpcXHRcXHRcXHRcXHRcXHQgICAgamJkMl9jaGVja3N1bV9kYXRhKGNyYzMyX3N1bSwgYmgpO1xcbmZzL2piZDIvY29tbWl0LmMtNzQ2LVxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6MjYuMjA1OTkyNjQxWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzI2NzIxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBJbnRlZ3JpdHkgb2YgSm91cm5hbGluZyBEYXRhIFN0cnVjdHVyZXMqKlxuXG5SaWdodCwgYGpiZDJfY2hlY2tzdW1fZGF0YWAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBsaWtlbHkgaG9sZHMgY29uc3RhbnRzIG9yIHBvdGVudGlhbGx5IHByZS1jYWxjdWxhdGVkIHZhbHVlcyByZWxhdGVkIHRvIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyB3aXRoaW4gdGhlIGpiZDIgam91cm5hbGluZyBzeXN0ZW0uIEludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIGl0J3MgYSBmaXhlZCBwYXJ0IG9mIHRoZSBkYXRhIGludGVncml0eSBwcm9jZXNzLiBOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzIHRvIGhvdyB0aG9zZSBjaGVja3N1bXMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBhcHBsaWVkIGR1cmluZyB0aGUgam91cm5hbCB1cGRhdGUgcHJvY2Vzcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGZ1bmN0aW9uIGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCdzIGxpa2VseSB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIGFjdHVhbCBjaGVja3N1bSB2YWx1ZXMgb24gYSBibG9jayB0YWcuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcywgaG93IGl0IGNhbGN1bGF0ZXMgYW5kIGFwcGxpZXMgdGhlIGNoZWNrc3VtLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYXJlYXMgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBpbiBlbnN1cmluZyBqb3VybmFsIGRhdGEncyBpbnRlZ3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODE0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6MzAuMDM4NjY5Nzc1WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzNjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qYmQyL2NvbW1pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvY29tbWl0LmM9MzQwPXN0YXRpYyB2b2lkIHdyaXRlX3RhZ19ibG9jayhqb3VybmFsX3QgKmosIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZyxcXG4tLVxcbmZzL2piZDIvY29tbWl0LmMtMzQ3LVxcbmZzL2piZDIvY29tbWl0LmM6MzQ4OnN0YXRpYyB2b2lkIGpiZDJfYmxvY2tfdGFnX2NzdW1fc2V0KGpvdXJuYWxfdCAqaiwgam91cm5hbF9ibG9ja190YWdfdCAqdGFnLFxcbmZzL2piZDIvY29tbWl0LmMtMzQ5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBfX3UzMiBzZXF1ZW5jZSlcXG4tLVxcbmZzL2piZDIvY29tbWl0LmM9Mzc2PXZvaWQgamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsX3QgKmpvdXJuYWwpXFxuLS1cXG5mcy9qYmQyL2NvbW1pdC5jLTcwNC1cXHRcXHR0YWctXFx1MDAzZXRfZmxhZ3MgPSBjcHVfdG9fYmUxNih0YWdfZmxhZyk7XFxuZnMvamJkMi9jb21taXQuYzo3MDU6XFx0XFx0amJkMl9ibG9ja190YWdfY3N1bV9zZXQoam91cm5hbCwgdGFnLCB3YnVmW2J1ZnNdLFxcbmZzL2piZDIvY29tbWl0LmMtNzA2LVxcdFxcdFxcdFxcdFxcdGNvbW1pdF90cmFuc2FjdGlvbi1cXHUwMDNldF90aWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMDoxODozMC4wODU3MTM5MTNaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwMTQyNzQxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBLZXJuZWwgQ2hhbmdlcyBXYXJyYW50IEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gc29tZSAqdmVyeSogaW1wb3J0YW50IGFyZWFzLiBUaGUgZmFjdCB0aGF0IGBqYmQyX2Jsb2NrX3RhZ19jc3VtX3NldGAgaXMgc3RhdGljIGlzbid0IHJlYWxseSByZWxldmFudCwgYnV0IHdoYXQgaXQgKmRvZXMqIGNoYW5nZSBpcy5cblxuSXQncyBoaXR0aW5nIGBmcy9idWZmZXIuY2AsIGEgdG9uIG9mIHRoZSBmaWxlc3lzdGVtcyDigJMgYGpiZDJgLCBgZXh0NGAsIGBnZnMyYCwgYG9jZnMyYCwgYGZhdGAsIGBleGZhdGAsIGBhZGZzYCwgYGV4dDJgLCBhbmQgYG9tZnNgIOKAkyB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gVGhpcyBpc24ndCBqdXN0IGFib3V0IG9uZSBmaWxlc3lzdGVtOyB0aGlzIGlzIGJyb2FkLiBJdCdzIHRvdWNoaW5nIGhvdyB3ZSBoYW5kbGUgYW5kIGNoZWNrIGZvciB3cml0ZSBlcnJvcnMsIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGBrbWFwX2xvY2FsX2JoYCBhbmQgYGt1bm1hcF9sb2NhbF9iaGAgd2l0aGluIGBmcy9qYmQyL2NvbW1pdC5jYCBpcyBpbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyB3ZSdyZSBtYXBwaW5nIG1lbW9yeSBmb3IgYmxvY2sgSS9PLCBhbmQgdGhhdCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gUGx1cywgaXQncyB1cGRhdGluZyBgZnMvamJkMi9qb3VybmFsLmNgIHRvIGhhbmRsZSB0aGUgYGJfZnJvemVuX2RhdGFgIHNjZW5hcmlvIHdpdGhvdXQgZ2VuZXJhdGluZyBhIGZha2UgZm9saW8sIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggYSB0aG91Z2h0IHRvIHByZXZlbnQgcmVncmVzc2lvbnMuXG5cblRoZSBmYWN0IHRoYXQgaXQncyBhbHRlcmluZyBgZnMvYnVmZmVyLmNgIHRvIGRlYWwgd2l0aCBgYmgtXHUwMDNlYl9mb2xpbyA9PSBOVUxMYCBpbiBgX19iaF9zdWJtaXRgLCBhbmQgZW1wbG95aW5nIGBiaW9fYWRkX3ZpcnRfbm9mYWlsYCBpbnN0ZWFkIG9mIGBiaW9fYWRkX2ZvbGlvX25vZmFpbGAsIGlzIGEgcmVkIGZsYWcuIFRoaXMgZGlyZWN0bHkgY2hhbmdlcyBob3cgd2UgZGVhbCB3aXRoIHRoZSBibG9jayBsYXllci5cblxuU28sIHRoaXMgbG9va3MgbGlrZSBhIGNvcmUga2VybmVsIGNoYW5nZSwgd2l0aCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBWRlMsIGJsb2NrIGxheWVyLCAqYW5kKiBtdWx0aXBsZSBmaWxlc3lzdGVtcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBJIGtub3cgcmVxdWlyZXMgcmlnb3JvdXMgZnV6emluZy4gR2l2ZW4gdGhlIGJyZWFkdGggb2YgdGhlIGltcGFjdCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5JJ2xsIGJlIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBzeW1ib2xzIGxpa2UgYGJoX2VuZF93cml0ZWAsIGBiaF9lbmRfYXN5bmNfd3JpdGVgLCBgX19iZm9yZ2V0YCwgYF9fc3luY19kaXJ0eV9idWZmZXJgLCBgamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlcmAsIGBqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uYCwgYGpiZDJfZmNfd2FpdF9idWZzYCwgYG9jZnMyX3dyaXRlX2Jsb2NrYCwgYGZhdF9zeW5jX2Joc2AsIGBleGZhdF91cGRhdGVfYmhzYCwgYF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgLCBhbmQgYGdmczJfcGluYC4gSSdsbCBuZWVkIHRvIGVuYWJsZSBjb25maWd1cmF0aW9ucyBmb3IgYWxsIHRoZSBhZmZlY3RlZCBmaWxlc3lzdGVtczogYEVYVDRfRlNgLCBgSkJEMmAsIGBHRlMyX0ZTYCwgYE9DRlMyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgRVhGQVRfRlNgLCBgQURGU19GU2AsIGBFWFQyX0ZTYCwgYW5kIGBPTUZTX0ZTYC5cblxuVGhlIGNoYW5nZXMgdG91Y2ggZnVuZGFtZW50YWwgYnVmZmVyX2hlYWQgbG9naWM6IHdyaXRlIGVycm9yIHRyYWNraW5nIChgYnVmZmVyX3dyaXRlX2lvX2Vycm9yYCB2cy4gYGJ1ZmZlcl91cHRvZGF0ZWApIGFuZCB0aGUgdXNlIG9mIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGVzcGVjaWFsbHkgaW4gdGhlIGBiX2Zyb3plbl9kYXRhYCBjb250ZXh0IG9mIGpiZDIpLiBHaXZlbiB0aGUgd2lkZXNwcmVhZCBjaGFuZ2VzIGluIGNvcmUgY29tcG9uZW50cywgSSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIGEgdG9wIHByaW9yaXR5LCBhbmQgZnV6emluZyBpcyB0aGUga2V5IHRvIGNhdGNoaW5nIGFueSBpc3N1ZXMgdGhhdCBtaWdodCBoYXZlIGNyZXB0IGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM3MCwiT3V0cHV0VG9rZW5zIjozNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjA6MTg6NDQuMDk5OTkxNjQ2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzAxNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJKQkQyXCIsXG4gICAgXCJHRlMyX0ZTXCIsXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIixcbiAgICBcIkVYRkFUX0ZTXCIsXG4gICAgXCJBREZTX0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJPTUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmhfZW5kX3dyaXRlXCIsXG4gICAgXCJiaF9lbmRfYXN5bmNfd3JpdGVcIixcbiAgICBcIl9fYmZvcmdldFwiLFxuICAgIFwiX19zeW5jX2RpcnR5X2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX3dyaXRlX21ldGFkYXRhX2J1ZmZlclwiLFxuICAgIFwiamJkMl9qb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvblwiLFxuICAgIFwiamJkMl9mY193YWl0X2J1ZnNcIixcbiAgICBcIm9jZnMyX3dyaXRlX2Jsb2NrXCIsXG4gICAgXCJmYXRfc3luY19iaHNcIixcbiAgICBcImV4ZmF0X3VwZGF0ZV9iaHNcIixcbiAgICBcIl9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFcIixcbiAgICBcImdmczJfcGluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBidWZmZXJfaGVhZCBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCB3cml0ZSBlcnJvciB0cmFja2luZyAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yIHZzIGJ1ZmZlcl91cHRvZGF0ZSkgYW5kIHN1cHBvcnQgZm9yIGJ1ZmZlcl9oZWFkcyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgZm9saW8gKGUuZy4sIGZvciBiX2Zyb3plbl9kYXRhIGluIGpiZDIpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoZXh0NCwgamJkMiwgZ2ZzMiwgb2NmczIsIGZhdCwgZXhmYXQsIGFkZnMsIGV4dDIsIG9tZnMpIGFuZCB0aGUgY29yZSBibG9jayBsYXllci4gRnV6emluZyBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIEkvTyBlcnJvciBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzICh2aWEgdGhlIG5ldyBrbWFwX2xvY2FsX2JoL2Jpb19hZGRfdmlydF9ub2ZhaWwgcGF0aHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkpCRDJcIixcbiAgICBcIkdGUzJfRlNcIixcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiLFxuICAgIFwiRVhGQVRfRlNcIixcbiAgICBcIkFERlNfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk9NRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaF9lbmRfd3JpdGVcIixcbiAgICBcImJoX2VuZF9hc3luY193cml0ZVwiLFxuICAgIFwiX19iZm9yZ2V0XCIsXG4gICAgXCJfX3N5bmNfZGlydHlfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyXCIsXG4gICAgXCJqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uXCIsXG4gICAgXCJqYmQyX2ZjX3dhaXRfYnVmc1wiLFxuICAgIFwib2NmczJfd3JpdGVfYmxvY2tcIixcbiAgICBcImZhdF9zeW5jX2Joc1wiLFxuICAgIFwiZXhmYXRfdXBkYXRlX2Joc1wiLFxuICAgIFwiX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YVwiLFxuICAgIFwiZ2ZzMl9waW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJ1ZmZlcl9oZWFkIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHdyaXRlIGVycm9yIHRyYWNraW5nIChidWZmZXJfd3JpdGVfaW9fZXJyb3IgdnMgYnVmZmVyX3VwdG9kYXRlKSBhbmQgc3VwcG9ydCBmb3IgYnVmZmVyX2hlYWRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBmb2xpbyAoZS5nLiwgZm9yIGJfZnJvemVuX2RhdGEgaW4gamJkMikuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IG11bHRpcGxlIGZpbGVzeXN0ZW1zIChleHQ0LCBqYmQyLCBnZnMyLCBvY2ZzMiwgZmF0LCBleGZhdCwgYWRmcywgZXh0Miwgb21mcykgYW5kIHRoZSBjb3JlIGJsb2NrIGxheWVyLiBGdXp6aW5nIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gSS9PIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3MgKHZpYSB0aGUgbmV3IGttYXBfbG9jYWxfYmgvYmlvX2FkZF92aXJ0X25vZmFpbCBwYXRocykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[1] Phase: Succeeded StartedAt: 2026-08-06 20:18:55 +0000 UTC FinishedAt: 2026-08-06 20:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 20:18:55 +0000 UTC FinishedAt: 2026-08-06 20:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2] Phase: Succeeded StartedAt: 2026-08-06 20:18:55 +0000 UTC FinishedAt: 2026-08-07 00:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:18:55 +0000 UTC FinishedAt: 2026-08-07 00:11:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:18:55 +0000 UTC FinishedAt: 2026-08-06 20:19:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:18:55 +0000 UTC FinishedAt: 2026-08-06 20:19:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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-workflowb4qf2/series-workflowb4qf2-convert-artifact-2428353267/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:19:16 +0000 UTC FinishedAt: 2026-08-06 20:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:19:16 +0000 UTC FinishedAt: 2026-08-06 20:42:30 +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:*db07bd7b-0590-4f9a-b248-8cc9e7d873ea,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-workflowb4qf2/series-workflowb4qf2-convert-artifact-2428353267/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": "a032ed29-12e9-41ed-ac80-77167e9dd9e0", "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-workflowb4qf2/series-workflowb4qf2-build-action-3344440737/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:19:16 +0000 UTC FinishedAt: 2026-08-06 20:41:55 +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:*db07bd7b-0590-4f9a-b248-8cc9e7d873ea,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-workflowb4qf2/series-workflowb4qf2-convert-artifact-2428353267/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": "a032ed29-12e9-41ed-ac80-77167e9dd9e0", "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-workflowb4qf2/series-workflowb4qf2-build-action-3344440737/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:42:30 +0000 UTC FinishedAt: 2026-08-06 20:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:42:30 +0000 UTC FinishedAt: 2026-08-06 20:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:42:30 +0000 UTC FinishedAt: 2026-08-06 20:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:42:30 +0000 UTC FinishedAt: 2026-08-06 20:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-workflowb4qf2/series-workflowb4qf2-convert-artifact-1050493674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:42:41 +0000 UTC FinishedAt: 2026-08-06 20:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:42:41 +0000 UTC FinishedAt: 2026-08-06 20:44:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a032ed29-12e9-41ed-ac80-77167e9dd9e0,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-workflowb4qf2/series-workflowb4qf2-build-action-3344440737/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-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:44:24 +0000 UTC FinishedAt: 2026-08-06 20:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:44:24 +0000 UTC FinishedAt: 2026-08-06 20:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:44:24 +0000 UTC FinishedAt: 2026-08-06 21:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:44:24 +0000 UTC FinishedAt: 2026-08-06 21:06:06 +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:*db07bd7b-0590-4f9a-b248-8cc9e7d873ea,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-workflowb4qf2/series-workflowb4qf2-convert-artifact-1050493674/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": "8aa57b1c-3b47-40b6-8f02-a89e54914d1b", "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-workflowb4qf2/series-workflowb4qf2-build-action-2972020494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 20:44:24 +0000 UTC FinishedAt: 2026-08-06 21:05:42 +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:*db07bd7b-0590-4f9a-b248-8cc9e7d873ea,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-workflowb4qf2/series-workflowb4qf2-convert-artifact-1050493674/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": "8aa57b1c-3b47-40b6-8f02-a89e54914d1b", "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-workflowb4qf2/series-workflowb4qf2-build-action-2972020494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:06:06 +0000 UTC FinishedAt: 2026-08-06 21:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:06:06 +0000 UTC FinishedAt: 2026-08-06 21:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:06:06 +0000 UTC FinishedAt: 2026-08-06 21:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:06:06 +0000 UTC FinishedAt: 2026-08-06 21:07:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8aa57b1c-3b47-40b6-8f02-a89e54914d1b,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-workflowb4qf2/series-workflowb4qf2-build-action-2972020494/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-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:09 +0000 UTC FinishedAt: 2026-08-07 00:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:09 +0000 UTC FinishedAt: 2026-08-07 00:11:03 +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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"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:*a032ed29-12e9-41ed-ac80-77167e9dd9e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8aa57b1c-3b47-40b6-8f02-a89e54914d1b,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-workflowb4qf2/series-workflowb4qf2-build-action-3344440737/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-workflowb4qf2/series-workflowb4qf2-build-action-2972020494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:09 +0000 UTC FinishedAt: 2026-08-06 21:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:09 +0000 UTC FinishedAt: 2026-08-06 21:08:14 +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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"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-workflowb4qf2/series-workflowb4qf2-convert-artifact-4061442943/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:09 +0000 UTC FinishedAt: 2026-08-06 21:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:09 +0000 UTC FinishedAt: 2026-08-06 21:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:09 +0000 UTC FinishedAt: 2026-08-06 21:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:19 +0000 UTC FinishedAt: 2026-08-07 00:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4qf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_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":["bh_end_write","bh_end_async_write","__bforget","__sync_dirty_buffer","jbd2_journal_write_metadata_buffer","jbd2_journal_commit_transaction","jbd2_fc_wait_bufs","ocfs2_write_block","fat_sync_bhs","exfat_update_bhs","__ext4_handle_dirty_metadata","gfs2_pin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","JBD2","GFS2_FS","OCFS2_FS","MSDOS_FS","VFAT_FS","EXFAT_FS","ADFS_FS","EXT2_FS","OMFS_FS"],"series_id":"54928d99-516e-4894-882b-0edc4daea042","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-06 21:08:19 +0000 UTC FinishedAt: 2026-08-07 00:10:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a032ed29-12e9-41ed-ac80-77167e9dd9e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8aa57b1c-3b47-40b6-8f02-a89e54914d1b,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-workflowb4qf2/series-workflowb4qf2-build-action-3344440737/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-workflowb4qf2/series-workflowb4qf2-build-action-2972020494/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-workflowb4qf2/series-workflowb4qf2-convert-artifact-4061442943/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,}